图像生成常用指标:IS score和FID score

1,701 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

评价一个生成模型,我们需要考验它两方面性能:

  1. 生成的图片是否清晰;
  2. 生成的图片是否多样。

生成的图片不够清晰,那肯定就是模型生成的效果不行了。那如果生成的图片足够清晰了,但是缺乏多样性,比如模型只能生成有限的几种图片,陷入mode collapse,也不能说是一个好的生成模型。

那就可以用到IS评价指标,这个指标就是综合考虑生成图片的清晰度和多样性。

Inception Score (IS)

Inception Score是使用图片类别分类器来评估生成图片的质量。其中使用的图片类别分类器为Inception Net-V3,Inception Net-V3 是在ImageNet数据集上训练好的图片分类器,Inception Net-V3可以对一副图片输出一个1000分类的概率。

熵(entropy):

熵通俗来讲用于表示一个物体的无序程度,越有序的东西熵越小,越无序的东西熵越大。

清晰度: 把生成的图片xx输入 Inception V3 中,将输出 1000 维的向量yy ,向量的每个维度的值对应图片属于某类的概率。 一个清晰的图片,我们应该很容易就能识别出它属于某一类的概率,所以该1000维向量的某一维会非常大。

使用条件概率p(yx)p(y |x)表示图片的质量,也就是被预测程度,其中xx表示给定的图片,yy表示这个图片中的主体。这个概率越大,图片质量越高,被预测程度越高。 但是图片越清晰意味着图片的熵越小,所以的熵越小越好。

多样性: 对于模型生成的所有图片来说,为了保证生成的多样性,生成的图片应该尽可能的均匀。 比如生成一千万张图,一共1000个类别嘛,这些图片应该趋于均匀分布,也就是每类都生成一万左右的图。

图片多样性是使用边缘概率p(y)p(y)表示的,我们希望边缘分布趋于均匀分布,也就是熵越大越好。本来p(y)=xp(yx)pg(x)p(y)=\int_{{x}} p(y \mid {x}) p_g({x}),但是由于我们是使用网络来近似模型的,无法对其进行精确计算,因此使用p^(y)=1ni=1np(yx(i))\hat p(y)=\frac 1 n\sum^n_{i=1}{p(y|x^{(i)})},其中nn为图像的类别。 公式也从IS(G)=exp(ExpgDKL(p(yx)p(y)))\operatorname{IS}(G)=\exp \left(\mathbb{E}_{\mathbf{x} \sim p_g} D_{K L}(p(y \mid \mathbb{x}) \| p(y))\right)变为IS(G)exp(1Ni=1NDKL(p(yx(i))p^(y)))\operatorname{IS}(G) \approx \exp \left(\frac{1}{N} \sum_{i=1}^N D_{K L}\left(p\left(y \mid x^{(i)}\right) \| \hat{p}(y)\right)\right)。 IS是要计算两个概率分布的KL散度,所以IS应该是越大越好。

Fréchet Inception Distance(FID)

FID是计算真实图像和生成图像的特征向量之间距离的一种度量。计算FID我们用的还是Inception Net-V3,但是区别在于FID中去掉最后的输出层,得到的结果是2048维的向量。

FID=d2((μ,Σ),(μg,Σg))=μmg22+Tr(Σ+Σg2(ΣΣg)12)FID = d^2\left((\mu, \Sigma),\left(\mu_g, \Sigma_g\right)\right)=\left\|\mu-{m}_g\right\|_2^2+\operatorname{Tr}\left(\Sigma+\Sigma_g-2\left(\Sigma \Sigma_g\right)^{\frac 1 2 }\right)
  • Tr\operatorname{Tr}求矩阵的迹(对角线和)

  • μ\mu为特征均值

  • Σ\Sigma为协方差矩阵

通过计算图像的均值和协方差,将激活函数的输出归纳为一个多变量高斯分布。然后将这些统计量用于计算真实图像和生成图像集合中的激活函数。然后使用 Frechet 距离(又称 Wasserstein-2 距离)计算这两个分布之间的距离。 FID 越低,图像质量越好;并且FID具有很好的抗失真能力。下图可以看到失真程度越低FID分数越高。

image.png