之前写了一篇文章介绍 Inception Score 的原理和局限性
尹相楠:Inception Score 的原理和局限性首先回顾一下 Inception Score 的两个假设:
Inception Score 通过计算 1 和 2 中两个概率分布的散度,来衡量生成模型的表现。
我们乍一看这两条假设,不难发现最明显的两个问题:
除了上面最直观的两个硬伤,本文开头提到的文章中对 Inception Score 缺点做了详细分析。其中涉及到:使用 IS 时,分类模型应该和生成模型在同一个训练集上训练,否则分类模型计算的边缘分布将不准确,而分类模型对单个图片的预测,也将不能真实反映图片的清晰程度。
出现这一问题的本质原因是:计算 IS 时只考虑了生成样本,没有考虑真实数据,即 IS 无法反映真实数据和样本之间的距离,IS 判断数据真实性的依据,源于 Inception V3 的训练集: ImageNet,在 Inception V3 的“世界观”下,凡是不像 ImageNet 的数据,都是不真实的,都不能保证输出一个 sharp 的 predition distribution。
而 Fréchet Inception Distance (FID) 则是计算了真实图片和假图片在 feature 层面的距离,因此显得更有道理一点。FID 的公式如下:
众所周知,预训练好的神经网络顶层可以提取图片的高级信息,一定程度能反映图片的本质。因此,FID 的提出者通过预训练的 Inception V3 来提取全连接层之前的 2048 维向量,作为图片的特征。公式 (1) 中:
:真实图片的特征的均值
:生成的图片的特征的均值
: 真实图片的特征的协方差矩阵
: 生成图片的特征的协方差矩阵
FID 用以衡量两个多元正态分布的距离,具体的来源见论文:
The Fréchet distance between multivariate normal distributions我数学能力有限,实在读不懂,好在最后的距离公式还是比较简单的,直接套进去就能用了。
FID 只把 Inception V3 作为特征提取器,并不依赖它判断图片的具体类别,hang因此不必担心 Inception V3 的训练数据和生成模型的训练数据不同。同时,由于直接衡量生成数据和真实数据的分布之间的距离,也不必担心每个类别内部只产生一模一样的图片这种形式的 mode collapse。完美避开了很多 Inception Score 的缺陷。
综上所述,对比 IS,FID 有如下优点:
但是基于我的上篇文章 尹相楠:Inception Score 的原理和局限性,FID 仍然存在一些和 IS 同样的问题:
下面的链接是基于 pytorch 的计算 FID 的代码。
mseitzer/pytorch-fid
~~注意作者在源码中并没有加载 Inception V3 的权重,因此千万不要直接套用。建议读者自己继承一下 pytorch Inception V3 的类,修改 forward 函数,让它返回全连接层前面的 2048 维向量,这样就可以直接加载 pytorch 官方的Inception V3 的权重了。~~
之前没有仔细看代码贸然提了个 issue,发现作者其实加载了 Inception V3 的权重,在inception.py文件的第 60 行。
原文:https://www.cnblogs.com/cx2016/p/12967255.html