在使用GAN进行图像生成任务中,我们的目的就是为了得到高质量的生成图像,那么总得需要个度量指标来衡量生成的图像是否是“高质量”的吧?不能完全靠人眼主观判断。这里提到生成图像的“高质量”,主要从两方面考虑:
下面介绍两个在文献中常用的评价指标,IS(Inception Score)和FID(Fréchet Inception Distance)。
Inception Score[1] 使用在ImageNet上预训练的Inception V3 Network作为分类网络,将生成器生成的图像输入到Inception V3 Network中,对该网络输出值(图像所属类别)做统计分析。
IS的计算公式如下:
I S ( G ) = exp ( E x ∼ p g D K L ( p ( y ∣ x ) ∣ ∣ p ( y ) ) ) (1) IS(G)=\exp(\mathbb{E}_{\mathbf{x}\sim p_g}D_{KL}(p(y|\mathbf{x}) || p(y))) \tag 1 IS(G)=exp(Ex∼pgDKL(p(y∣x)∣∣p(y)))(1)
其中:
IS值越大说明模型效果越好。
之所以IS公式考虑分布 p ( y ∣ x ) p(y|\mathbf{x}) p(y∣x)和 p ( y ) p(y) p(y),是出于以下两个目的[2]:
如果满足上述两个特性,我们想要 p ( y ∣ x ) p(y|\mathbf{x}) p(y∣x)和 p ( y ) p(y) p(y)的KL散度越大,从IS公式中看出IS值也越大。我们从推导中来看一看IS如何与 p ( y ∣ x ) p(y|\mathbf{x}) p(y∣x)和 p ( y ) p(y) p(y)的熵联系起来的。这里直接附上文献[2]中的证明过程,对公式(1)左右两边取 l n ln ln:
而互信息(Mutual Information) I ( y ; x ) I(y;\mathbf{x}) I(y;x)
I ( y ; x ) = H ( y ) − H ( y ∣ x ) (2) I(y;\mathbf{x})=H(y)-H(y|\mathbf{x}) \tag 2 I(y;x)=H(y)−H(y∣x)(2)
因此
l n ( I S ( G ) ) = H ( y ) − H ( y ∣ x ) (3) ln(IS(G))=H(y)-H(y|\mathbf{x}) \tag 3 ln(IS(G))=H(y)−H(y∣x)(3)
由(3)式我们就可以轻易看出, p ( y ) p(y) p(y)的熵越大, p ( y ∣ x ) p(y|\mathbf{x}) p(y∣x)的熵越小,IS值越大。
实际计算:
先利用模型生成若干图片 x i \mathbf{x}^{i} xi来计算先验类别边缘分布 p ^ ( y ) \hat{p}(y) p^(y):
p ^ ( y ) = 1 N ∑ i = 1 N p ( y ∣ x i ) (4) \hat{p}(y)=\frac{1}{N} \sum_{i=1}^{N}p(y|\mathbf{x}^{i}) \tag 4 p^(y)=N1i=1∑Np(y∣xi)(4)
其中 N N N表示由模型生成的样本图片数目。之后可以求 I S ( G ) IS(G) IS(G)的近似值:
I S ( G ) ≈ exp ( 1 N ∑ i = 1 N D K L ( p ( y ∣ x i ) ∣ ∣ p ^ ( y ) ) ) (5) IS(G) \approx \exp \Big(\frac{1}{N} \sum_{i=1}^{N} D_{KL}(p(y|\mathbf{x}^{i})||\hat{p}(y))\Big) \tag 5 IS(G)≈exp(N1i=1∑NDKL(p(y∣xi)∣∣p^(y)))(5)
对每张图像计算 p ( y ∣ x i ) p(y|\mathbf{x}^{i}) p(y∣xi),再求它与 p ^ ( y ) \hat{p}(y) p^(y)的KL散度,再取平均、取指数。
在计算最终IS时,通常在 N = 5000 N=5000 N=5000下计算10次,再计算IS值的均值和标准差。
缺点:[2]
IS弊端还是不少的,下文的FID可以克服上述缺点。
补充知识点
互信息(Mutual Information)度量的是两个随机变量间相互依赖的程度。
假设有两个随机变量 X X X和 Y Y Y,它们的互信息定义为:
I ( X ; Y ) = ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ( p ( x , y ) p ( x ) p ( y ) ) I(X;Y)=\sum_{x\in X} \sum_{y\in Y}p(x,y)\log\Big(\frac{p(x,y)}{p(x)p(y)}\Big) I(X;Y)=x∈X∑y∈Y∑p(x,y)log(p(x)p(y)p(x,y))
其中 p ( x , y ) p(x,y) p(x,y)是随机变量 X X X和 Y Y Y的联合概率分布, p ( x ) p(x) p(x)和 p ( y ) p(y) p(y)分别是 X X X和 Y Y Y的边缘概率分布。
性质:
再介绍下条件熵(Conditional Entropy)。给定随机变量 X X X的条件下,随机变量 Y Y Y的条件熵定义为:
H ( Y ∣ X ) = ∑ x ∈ X p ( x ) H ( Y ∣ X = x ) = ∑ x ∈ X p ( x ) [ − ∑ y ∈ Y p ( y ∣ x ) log p ( y ∣ x ) ] = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log p ( y ∣ x ) \begin{aligned} H(Y|X) &= \sum_{x\in X}p(x)H(Y|X=x) \\ &=\sum_{x\in X}p(x) \big[-\sum_{y\in Y}p(y|x)\log p(y|x)\big] \\ &=-\sum_{x\in X}\sum_{y\in Y}p(x,y)\log p(y|x) \end{aligned} H(Y∣X)=x∈X∑p(x)H(Y∣X=x)=x∈X∑p(x)[−y∈Y∑p(y∣x)logp(y∣x)]=−x∈X∑y∈Y∑p(x,y)logp(y∣x)
那么,有:
I ( X ; Y ) = ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ( p ( x , y ) p ( x ) p ( y ) ) = ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ( p ( x ∣ y ) p ( x ) ) = ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log p ( x ∣ y ) − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log p ( x ) = − H ( X ∣ Y ) − ∑ x ∈ X ( ∑ y ∈ Y p ( x , y ) ) log p ( x ) = − H ( X ∣ Y ) − ∑ x ∈ X p ( x ) log p ( x ) = − H ( X ∣ Y ) + H ( X ) = H ( X ) − H ( X ∣ Y ) = H ( Y ) − H ( Y ∣ X ) \begin{aligned} I(X;Y)&=\sum_{x\in X} \sum_{y\in Y}p(x,y)\log(\frac{p(x,y)}{p(x)p(y)}) \\ &=\sum_{x\in X} \sum_{y\in Y}p(x,y)\log (\frac{p(x|y)}{p(x)}) \\ &=\sum_{x\in X} \sum_{y\in Y}p(x,y)\log p(x|y) - \sum_{x\in X} \sum_{y\in Y}p(x,y)\log p(x) \\ &= -H(X|Y)- \sum_{x\in X} \Big( \sum_{y\in Y}p(x,y) \Big) \log p(x)\\ &=-H(X|Y)- \sum_{x\in X} p(x)\log p(x) \\ &=-H(X|Y)+H(X) \\ &=H(X)-H(X|Y) \\ &=H(Y)-H(Y|X) \end{aligned} I(X;Y)=x∈X∑y∈Y∑p(x,y)log(p(x)p(y)p(x,y))=x∈X∑y∈Y∑p(x,y)log(p(x)p(x∣y))=x∈X∑y∈Y∑p(x,y)logp(x∣y)−x∈X∑y∈Y∑p(x,y)logp(x)=−H(X∣Y)−x∈X∑(y∈Y∑p(x,y))logp(x)=−H(X∣Y)−x∈X∑p(x)logp(x)=−H(X∣Y)+H(X)=H(X)−H(X∣Y)=H(Y)−H(Y∣X)
互信息的含义:
我们以 I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I(X;Y)=H(X)-H(X|Y) I(X;Y)=H(X)−H(X∣Y)为例,互信息即在测量引入 Y Y Y之后导致的 X X X的不确定性减少的程度。互信息越大,说明 X X X和 Y Y Y间关系越强;反小, X X X和 Y Y Y越趋于相互独立。
下面给出互信息、条件熵、联合熵间的韦恩图:
有关更详细内容,请移步:信息论 – 熵与互信息和什么是「互信息」?
FID(Fréchet Inception Distance)[4]是用来计算真实图像与生成图像的特征向量间距离的一种度量,这里的特征向量是由Inception v3 Network得到的。Inception v3 Network是一个分类网络,网络结构的最后两层为全连接层,以得到 1 ∗ 1 ∗ 1000 1*1*1000 1∗1∗1000分类向量,而FID采用的是倒数第二个全连接层的输出 1 ∗ 1 ∗ 2048 1*1*2048 1∗1∗2048维图像特征向量用于距离度量。
我们用这个距离来衡量真实图像和生成图像的相似程度,如果FID值越小,则相似程度越高。最好情况即是FID=0,两个图像相同。
FID值越小说明模型效果越好。
假设真实分布 P r P_r Pr和生成分布 P g P_g Pg建模为多维高斯分布,参数分别为 ( μ r , Σ r ) (\mu_r, \Sigma_r) (μr,Σr)和 ( μ g , Σ g ) (\mu_g, \Sigma_g) (μg,Σg),其中 μ \mu μ和 Σ \Sigma Σ分别为均值向量和协方差矩阵。FID的计算公式为:
d 2 ( ( μ r , Σ r ) , ( μ g , Σ g ) ) = ∥ μ r − μ g ∥ 2 + T r ( Σ r + Σ g − 2 ( Σ r Σ g ) 1 2 ) d^2 \big( (\mu_r, \Sigma_r), (\mu_g, \Sigma_g) \big)=\Vert \mu_r - \mu_g \Vert^2 + Tr \big( \Sigma_r + \Sigma_g - 2(\Sigma_r \Sigma_g)^{\frac{1}{2}} \big) d2((μr,Σr),(μg,Σg))=∥μr−μg∥2+Tr(Σr+Σg−2(ΣrΣg)21)
其中 T r Tr Tr表示矩阵的迹(矩阵对角元之和)。
实际计算:
那在计算FID时呢,一般性我们假设特征向量维数为 n n n,那么均值向量 μ \mu μ的维数为 n n n,协方差矩阵 Σ \Sigma Σ的维数为 n ∗ n n*n n∗n。首先分别选取真实图像和生成图像各 N N N张,计算得到的特征向量有 N ∗ n N*n N∗n维,之后分别计算这 N N N个样本对应的均值向量 μ \mu μ和协方差矩阵 Σ \Sigma Σ,即得到了真实分布 P r P_r Pr和生成分布 P g P_g Pg对应的参数。详细计算代码可参考:How to Implement the Frechet Inception Distance (FID) for Evaluating GANs
缺点:
与IS同样基于特征的方法,不能很好区分指标的好坏是由生成图像质量问题还是生成多样性问题导致的[3]。IS和FID同样还不能描述特征的空间关系[6]。
[1] Improved techniques for training gans. (NeurIPS2016)
[2] A Note on the Inception Score.
[3] How good is my GAN?.(ECCV2018) (引用了其Related work部分)
[4] Gans trained by a two time-scale update rule converge to a local nash equilibrium. (NeurIPS2017)
[5] GAN生成图像质量的两个评价指标——IS与FID
[6] 【深度理解】如何评价GAN网络的好坏?IS(inception score)和FID(Fréchet Inception Distance)
[7] How to Implement the Frechet Inception Distance (FID) for Evaluating GANs