在使用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的计算公式如下:
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)
其中:
- x ∼ p g \mathbf{x} \sim p_g x∼pg表示 x \mathbf{x} x是从 p g p_g pg中生成的图像样本。
- D K L ( p ∣ ∣ q ) D_{KL}(p || q) DKL(p∣∣q)表示分布 p p p和 q q q间的KL散度(衡量两个分布间距离)。
- p ( y ∣ x ) p(y|\mathbf{x}) p(y∣x)表示在给定图像 x \mathbf{x} x下分类为 y y y的概率( ∈ [ 0 , 1 ] 1000 \in [0, 1]^{1000} ∈[0,1]1000,表示ImageNet中的1000类)。
- p ( y ) = ∫ x p ( y ∣ x ) p g ( x ) p(y)=\int_x p(y|\mathbf{x})p_g(x) p(y)=∫xp(y∣x)pg(x),表示类别的边缘分布。
- exp \exp exp是便于比较最终计算的IS值。
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)反映出图片的生成质量,概率值越大,说明生成的图像属于 y y y类的可能性越高,也就表明生成的质量越高。最理想的情况是分布 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)指的是生成图像的类别分布,假如有 n n n类,理想情况是 p ( y 1 ) = p ( y 2 ) = ⋯ = p ( y n ) = 1 / n p(y_1)=p(y_2)=\cdots=p(y_n)=1 / n p(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)左右两边取
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计算公式没有考虑真实图像(Ground Truth),不能反映出生成图像与真实图像是否相近[3]。
- 由于使用Inception Network,为此对网络权重变化较敏感。(不同深度学习框架中内置的Inception V3网络权重有细微不同,计算得到的IS会有差距。)
- 在利用ImageNet以外的数据集计算IS时,没什么意义。(Inception V3是在ImageNet下训练的,而待评估的生成模型是在其他数据集上生成的,这种跨数据集计算IS是不正确的。这就需要分类模型和生成模型都在同一数据集上训练而来,才能得到可用于比较的IS。)
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的边缘概率分布。
性质:
- 当 X X X和 Y Y Y相互独立时, p ( x , y ) = p ( x ) p ( y ) p(x,y)=p(x)p(y) p(x,y)=p(x)p(y), I ( X ; Y ) = 0 I(X;Y)=0 I(X;Y)=0。
- 互信息是非负的,对称的。
再介绍下条件熵(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)
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