在使用GAN进行图像生成任务中,我们的目的就是为了得到高质量的生成图像,那么总得需要个度量指标来衡量生成的图像是否是“高质量”的吧?不能完全靠人眼主观判断。这里提到生成图像的“高质量”,主要从两方面考虑:
图像本身的质量。如:是否清晰,内容是否完整,是否逼真等等。
多样性。最终的生成器所生成的图像需要多种多样的,不能只生成一种或几种类型的图像,产生的这种现象称为模式崩溃(Mode collapse)。
下面介绍两个在文献中常用的评价指标,IS(Inception Score)和FID(Fréchet Inception Distance)。
一、IS(Inception Score)
Inception Score[1] 使用在ImageNet上预训练的Inception V3 Network作为分类网络,将生成器生成的图像输入到Inception V3 Network中,对该网络输出值(图像所属类别)做统计分析。
IS的计算公式如下:
IS(G)=exp(Ex∼pgDKL(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 1IS(G)=exp(Ex∼pgDKL(p(y∣x)∣∣p(y)))(1)
其中:
x∼pg\mathbf{x} \sim p_gx∼pg表示x\mathbf{x}x是从pgp_gpg中生成的图像样本。
DKL(p∣∣q)D_{KL}(p || q)DKL(p∣∣q)表示分布ppp和qqq间的KL散度(衡量两个分布间距离)。
p(y∣x)p(y|\mathbf{x})p(y∣x)表示在给定图像x\mathbf{x}x下分类为yyy的概率(∈[0,1]1000\in [0, 1]^{1000}∈[0,1]1000,表示ImageNet中的1000类)。
p(y)=∫xp(y∣x)pg(x)p(y)=\int_x p(y|\mathbf{x})p_g(x)p(y)=∫xp(y∣x)pg(x)是类别的边缘分布。
exp\expexp是便于比较最终计算的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∣x)p(y|\mathbf{x})p(y∣x)反映出图片的生成质量,概率值越大,说明生成的图像属于yyy类的可能性越高,也就表明生成的质量越高。最理想的情况是分布p(y∣x)p(y|\mathbf{x})p(y∣x)集中在某一值,即该分布的熵很低。因此,p(y∣x)p(y|\mathbf{x})p(y∣x)的熵越低,生成图像的质量越好。
生成器要能生成ImageNet中多种类型的图像,保持多样性或者说p(y)p(y)p(y)要有较高的熵。p(y)p(y)p(y)指的是生成图像的类别分布,假如有nnn类,理想情况是p(y1)=p(y2)=⋯=p(yn)=1/np(y_1)=p(y_2)=\cdots=p(y_n)=1 / np(y1)=p(y2)=⋯=p(yn)=1/n,即类别分布是一个均匀分布,这时具有较高的熵。因此,p(y)p(y)p(y)的熵越高,生成图像的多样性越好。
如果满足上述两个特性,我们想要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)左右两边取lnlnln:
而互信息熵(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 2I(y;x)=H(y)−H(y∣x)(2)
因此
ln(IS(G))=H(y)−H(y∣x)(3)ln(IS(G))=H(y)-H(y|\mathbf{x}) \tag 3ln(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值越大。
实际计算:
利用模型生成部分图片xi\mathbf{x}^{i}xi来计算先验类别边缘分布p^(y)\hat{p}(y)p^(y):
p^(y)=1N∑i=1Np(y∣xi)(4)\hat{p}(y)=\frac{1}{N} \sum_{i=1}^{N}p(y|\mathbf{x}^{i}) \tag 4p^(y)=N1i=1∑Np(y∣xi)(4)
其中NNN表示由模型生成的样本图片数目。之后可以求IS(G)IS(G)IS(G)的近似值:
IS(G)≈exp(1N∑i=1NDKL(p(y∣xi)∣∣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 5IS(G)≈exp(N1i=1∑NDKL(p(y∣xi)∣∣p^(y)))(5)
计算IS时,建议在N=5000N=5000N=5000下计算10次,再计算IS值的均值和标准差。
缺点:
IS计算公式没有考虑真实图像(Ground Truth),不能反映出生成图像与真实图像是否相近[3]。
由于使用Inception Network,为此对网络权重变化较敏感。
补充知识点
互信息(Mutual Information)度量的是两个随机变量间相互依赖的程度。
假设有两个随机变量XXX和YYY,它们的互信息定义为:
I(X;Y)=∑x∈X∑y∈Yp(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)是随机变量XXX和YYY的联合概率分布,p(x)p(x)p(x)和p(y)p(y)p(y)分别是XXX和YYY的边缘概率分布。当XXX和YYY相互独立时,p(x,y)=p(x)p(y)p(x,y)=p(x)p(y)p(x,y)=p(x)p(y),I(X;Y)=0I(X;Y)=0I(X;Y)=0。而且互信息是非负的,对称的。
再介绍下条件熵(Conditional Entropy)。给定随机变量XXX的条件下,随机变量YYY的条件熵定义为:
H(Y∣X)=∑x∈Xp(x)H(Y∣X=x)=∑x∈Xp(x)[−∑y∈Yp(y∣x)logp(y∣x)]=−∑x∈X∑y∈Yp(x,y)logp(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∈Yp(x,y)log(p(x,y)p(x)p(y))=∑x∈X∑y∈Yp(x,y)log(p(x∣y)p(x))=∑x∈X∑y∈Yp(x,y)logp(x∣y)−∑x∈X∑y∈Yp(x,y)logp(x)=−H(X∣Y)−∑x∈X(∑y∈Yp(x,y))logp(x)=−H(X∣Y)−∑x∈Xp(x)logp(x)=−H(X∣Y)+H(X)=H(X)−H(X∣Y)\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)
\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)
下面给出互信息、条件熵、联合熵间的韦恩图:
有关更详细内容,请移步:信息论 – 熵与互信息和什么是「互信息」?
二、FID(Fréchet Inception Distance)
FID(Fréchet Inception Distance)[4]是用来计算真实图像与生成图像的特征向量间距离的一种度量,这里的特征向量是由Inception v3 Network得到的。Inception v3 Network是一个分类网络,网络结构的最后两层为全连接层,以得到1∗1∗10001*1*10001∗1∗1000分类向量,而FID采用的是倒数第二个全连接层的输出1∗1∗20481*1*20481∗1∗2048维向量用于距离度量。
我们用这个距离来衡量真实图像和生成图像的相似程度,如果FID值越小,则相似程度越高。最好情况即是FID=0,两个图像相同。
假设真实分布PrP_rPr和生成分布PgP_gPg建模为多维高斯分布,参数分别为(μr,Σr)(\mu_r, \Sigma_r)(μr,Σr)和(μg,Σg)(\mu_g, \Sigma_g)(μg,Σg),其中μ\muμ和Σ\SigmaΣ分别为均值向量和协方差矩阵。FID的计算公式为:
d2((μr,Σr),(μg,Σg))=∥μr−μg∥2+Tr(Σr+Σg−2(ΣrΣg)12)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)
其中TrTrTr表示矩阵的迹(矩阵对角元之和)。
实际计算:
那在计算FID时呢,一般性我们假设特征向量维数为nnn,那么均值向量μ\muμ的维数为nnn,协方差矩阵Σ\SigmaΣ的维数为n∗nn*nn∗n。首先分别选取真实图像和生成图像各NNN张,计算得到的特征向量有N∗nN*nN∗n维,之后分别计算这NNN个样本对应的均值向量μ\muμ和协方差矩阵Σ\SigmaΣ,即得到了真实分布PrP_rPr和生成分布PgP_gPg对应的参数。详细计算代码可参考: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