在对抗生成网络中,判别器和生成器的目标函数通常都是用来衡量它们各自做的怎么样的。例如,生成器的目标函数用来衡量生成的图片能骗过分类器的性能。
但是这并不能很好的衡量生成图片的质量多样性
通常,我们使用IS(inception score)和FID(Fréchet Inception Distance)这两个指标来评价不同的GAN模型。

IS(inception score)

IS用来衡量GAN网络的两个指标:

1. 生成图片的质量 和
2. 多样性

熵(entropy)可以用来描述随机性:如果一个随机变量是高度可预测的,那么它就有较低的熵;相反,如果它是高度不可预测,那么它就用较高的熵。
如下图,我们有两个概率分布,p2p_2p2​ 比 p1p_1p1​ 有更高的熵值,因为 p2p_2p2​ 是一个均匀分布,我们很难预测 xxx 的值。

在GAN中,我们希望条件概率 P(y∣x)P(y|x)P(y∣x) 可以被高度预测(xxx 表示给定的图片,yyy 表示这个图片包含的主要物体,看到后面你会更加清楚这个概率是什么意思),也就是希望它的熵值较低。例如,给定一个图片,我们很容易的知道其中包含什么物体。

因此,我们使用inception network(可以理解这是一个固定的分类网络)来对生成的图像进行分类。(这里都是针对ImageNet数据集而言)然后预测 P(y∣x)P(y|x)P(y∣x), 这里的 yyy 就是标签。用这个概率来反应图片的质量。

简单来说,假如inception network能够以较高的概率预测图片中包含的物体,也就是有很高的把握对其进行正确分类,这就说明图片质量较高。相反,比如我们人眼并无法看出这张图片是什么,就说明这个图片质量不高。当然这里的人是我改的。

综上,我们知道概率 P(y∣x)P(y|x)P(y∣x) 代表了图片的质量,概率越大,质量则越高。接下来说说如何评价多样性。

我们用下面的公式计算边缘概率:

∫zp(y∣x=G(z))dz\int_z{p(y|x=G(z))}dz∫z​p(y∣x=G(z))dz

G(z)G(z)G(z) 就是生成器用噪声 zzz 得到的输出图像。
如果生成的图像多样化很好,那么预测的标签 yyy 的分布则会有较高的熵,因为数量多了,我们就更难准确预测 yyy 。
下图就表现了这样的概念:

结合以上两个指标来说,我们的目标应该就是这样的:
1)图片质量:针对每一张生成的图片,已知的分类器应该很确信的知道它属于哪一类。而这可以用条件概率p(y∣x)p(y|x)p(y∣x)来表示,它越大越好。而p(y∣x)p(y|x)p(y∣x)熵应该是越小越好
2)图片的多样性:我们这时候考虑的是标签的分布情况,我们希望标签分布均与,而不希望模型生成的都是某一类图片。这时候我们考虑的不是条件概率了,而是边缘概率,也就是p(y)p(y)p(y),展开来写应该是p(y1),p(y2),...,p(yn)p(y_1), p(y_2), ...,p(y_n)p(y1​),p(y2​),...,p(yn​)这里的nnn就是原训练数据的类数。我们希望p(y1)=p(y2)=...=p(yn)=1/np(y_1)= p(y_2) =...= p(y_n) = 1/np(y1​)=p(y2​)=...=p(yn​)=1/n从熵的角度来说,我们希望p(y)p(y)p(y) 的熵越大越好

注意到上面yyy不只是一个数,而是很多的数,准确来说是一个分布,或者说是一个随机变量。

为了综合两个指标,我们使用KL-divergence 并用下面的公式计算得到IS的值:
IS(G)=eEx∈pDKL(p(y∣x)∣∣p(y))IS(G)=e^{E_{x\in{p}}D_{KL}(p(y|x)||p(y))}IS(G)=eEx∈p​DKL​(p(y∣x)∣∣p(y))
其中 DKLD_{KL}DKL​ 就是KL-divergence的计算公式。

IS缺点:当只产生一种物体的图像时,我们仍会认为这是均匀分布,而导致评价不正确。当模型坍塌时,结果就可能产生同样的图片。

写到这里或许有朋友有点看不下去了。怎么就从一个熵较小、一个熵较大变成了一个KL散度公式。下面试着解释一下两个熵怎么变成了一个KL散度公式。不感兴趣的朋友可以跳过以下的部分

让我们先从数学角度来看,为了简便,我们用EEE表示熵。
出发点:
1)条件熵越小越好,也就是E(p(y∣x))=−∑i=1mp(yi∣xi)∗log(p(yi∣xi))E(p(y|x))=-\sum_{i=1}^{m}p(y_i|x_i)*log(p(y_i|x_i))E(p(y∣x))=−∑i=1m​p(yi​∣xi​)∗log(p(yi​∣xi​))越小越好。这里的mmm表示生成的图片量。
2) 熵越大越好,也就是E(p(y))=−∑i=1mp(yi)∗log(p(yi))E(p(y))=-\sum_{i=1}^{m}p(y_i)*log(p(y_i))E(p(y))=−∑i=1m​p(yi​)∗log(p(yi​))越大越好。

我们要做的就是求以上的这两个熵与KL散度之间的关系了
按照KL公式,我们可以做下面的计算:
KL(p(y∣x)∗p(y))=∑i=1mp(yi∣xi)∗log(p(yi∣xi)p(yi))KL(p(y|x)*p(y))=\sum_{i=1}^{m}p(y_i|x_i)*log(\frac{p(y_i|x_i)}{p(y_i)})KL(p(y∣x)∗p(y))=∑i=1m​p(yi​∣xi​)∗log(p(yi​)p(yi​∣xi​)​)
=∑i=1mp(yi∣xi)∗log(yi∣xi)−∑i=1mp(yi∣xi)∗log(p(yi))=\sum_{i=1}^{m}p(y_i|x_i)*log(y_i|x_i)-\sum_{i=1}^{m}p(y_i|x_i)*log(p(y_i))=∑i=1m​p(yi​∣xi​)∗log(yi​∣xi​)−∑i=1m​p(yi​∣xi​)∗log(p(yi​))
算到这里,我们可以看到前者就是我们前面计算的条件熵。因此可以记作:−E(p(y∣x))-E(p(y|x))−E(p(y∣x))

后者就有一点麻烦,需要转化一下。
让我们接着前面的计算。于是上面公式第二项变成了
∑i=1mp(yi∣xi)p(yi)∗p(yi)∗log(p(yi))\sum_{i=1}^{m}\frac{p(y_i|x_i)}{p(y_i)}*p(y_i)*log(p(y_i))∑i=1m​p(yi​)p(yi​∣xi​)​∗p(yi​)∗log(p(yi​)).
如果这个公式里面的p(yi∣xi)p(yi)\frac{p(y_i|x_i)}{p(y_i)}p(yi​)p(yi​∣xi​)​始终等于1,我们上面的式子就会等于前面说的熵E(p(y))E(p(y))E(p(y))。

下面我们证明在什么条件下这个假设成立,在这个过程中,我们用到两个基本知识:
1)条件概率怎么计算:p(A∣B)=p(AB)/p(B)p(A|B)=p(AB)/p(B)p(A∣B)=p(AB)/p(B)其中p(AB)p(AB)p(AB)表示两者相交的概率,也就是联合概率。
2)互相独立变量的联合概率怎么计算:p(AB)=p(A)∗p(B)p(AB)=p(A)*p(B)p(AB)=p(A)∗p(B),必须注意到条件是两者互相独立

首先根据条件概率可得
p(yi∣xi)p(yi)=p(yi,xi)p(yi)∗p(xi)\frac{p(y_i|x_i)}{p(y_i)}=\frac{p(y_i, x_i)}{p(y_i)*p(x_i)}p(yi​)p(yi​∣xi​)​=p(yi​)∗p(xi​)p(yi​,xi​)​
再根据第二个基础知识可以知道:
p(yi,xi)p(yi)∗p(xi)=p(yi)∗p(xi)p(yi)∗p(xi)=1\frac{p(y_i, x_i)}{p(y_i)*p(x_i)}=\frac{p(y_i)*p(x_i)}{p(y_i)*p(x_i)}=1p(yi​)∗p(xi​)p(yi​,xi​)​=p(yi​)∗p(xi​)p(yi​)∗p(xi​)​=1

到这里我们证明了两者的KL散度就是两个熵做减法。
即:KL(p(y∣x)∗p(y))=−E(p(y∣x))+E(p(y))KL(p(y|x)*p(y)) = -E(p(y|x)) +E(p(y))KL(p(y∣x)∗p(y))=−E(p(y∣x))+E(p(y))

这时,条件熵p(y∣x)p(y|x)p(y∣x)越小,而熵p(y)p(y)p(y)越大,则散度越大 (注意到KL散度中计算exp函数不改变单调性),则IS值越高,图片质量和多样性则好。到这里证明就基本结束了。

剩下的问题就是怎样知道xi,yix_i, y_ixi​,yi​两者是独立的呢?而且显然两者是不独立的,也就是说上面的证明过程中,这个条件并不满足。 但可能并不影响这样的使用。这也有待进一步探讨。

另外,前面说到IS的缺点,就是当模式倒塌发生时,我们的IS依然很高,但是这显然不是我们希望的结果,因为这时候的多样性为0。这时我们就可以从上面推导公式的条件出发,当模式倒塌发生时,生成的图片xix_ixi​和它对应的yiy_iyi​就完全不独立了,而是一个确定性关系。这时我们也就理解了为什么IS无法检测模式倒塌。

我们再从另一个角度来分析,也就是KL散度之间的物理意义来分析,毕竟每次去做数学推导有点难受。
我们知道KL散度是衡量两个分布之间的“距离”,这里引号表示这不是严格意义上的距离,因为KL散度不满足三角不等式和对称性,这里就不细说这个了,但这不影响我们说后面的内容。总之记住:KL散度是衡量两个分布之间的距离
我们再把前面的那幅图拿来:

从图上来看,我们希望条件概率p(y∣x)p(y|x)p(y∣x)是一个确定的数,我们可以将它理解成一个方差为0的高斯分布。
而另一个概率p(y)p(y)p(y)是一个均匀分布,也就是方差为无穷大的高斯分布。
在这样的情况,我们可以忽略高斯分布的均值是多少了,这样两个分布就相差很大了。这个过程也就是距离,所以距离越大,图片质量和多样性就越好

**写到这里,我还想再说明一点,那就是数学中距离的公式很重要。**大家都知道点与点之间的距离,但是点与分布之间的距离呢?本文就要使用到分布与分布之间的距离。推荐大家在记这些公式的时候记一记他们的物理含义。

FID(Fréchet Inception Distance )

以下内容重新更新,主要讲解FID的意义,为何FID能够表示生成图像的多样性和质量,为什么FID越小,则图像多样性越好,质量也越好

在计算FID中我们也同样使用inception network网络。我们还是先来简单回顾一下什么是inception network,它就是一个特征提取的深度网络,最后一层是一个pooling层,然后可以输出一张图像的类别。在计算FID时,我们去掉这个最后一层pooling层,得到的是一个2048维的高层特征,以下简称n维特征。我们继续简化一下,那么这个n维特征是一个向量。则有:对于我们已经拥有的真实图像,这个向量是服从一个分布的,(我们可以假设它是服从一个高斯分布);对于那些用GAN来生成的n维特征它也是一个分布;我们应该立马能够知道了,GAN的目标就是使得两个分布尽量相同。假如两个分布相同,那么生成图像的真实性和多样性就和训练数据相同了。于是,现在的问题就是,怎么计算两个分布之间的距离呢?我们需要注意到这两个分布是多变量的,也就是前面提到的n维特征。也就是说我们计算的是两个多维变量分布之间的距离,数学上可以用Wasserstein-2 distance或者Frechet distance来进行计算。以下简单介绍一下如何计算这个距离。

假如一个随机变量服从高斯分布,这个分布可以用一个均值和方差来确定。那么两个分布只要均值和方差相同,则两个分布相同。我们就利用这个均值和方差来计算这两个单变量高斯分布之间的距离。但我们这里是多维的分布,我们知道协方差矩阵可以用来衡量两个维度之间的相关性。所以,我们使用均值和协方差矩阵来计算两个分布之间的距离。均值的维度就是前面n维特征的维度,也就是n维;协方差矩阵则是n*n的矩阵。

最后,我们可以使用下面的公式计算FID(看这个公式之前务必要记住这个公式的物理意义,毕竟我们不是专门的数学学习者):

公式中,TrTrTr 表示矩阵对角线上元素的总和,矩阵论中俗称“迹”(trace)。均值为 μ\muμ 协方差为 Σ\SigmaΣ 。此外xxx表示真实的图片,ggg是生成的图片。

较低的FID意味着两个分布之间更接近,也就意味着生成图片的质量较高、多样性较好。

FID对模型坍塌更加敏感。相比较IS来说,FID对噪声有更好的鲁棒性。因为假如只有一种图片时,FID这个距离将会相当的高。因此,FID更适合描述GAN网络的多样性。

同样的,FID和IS都是基于特征提取,也就是依赖于某些特征的出现或者不出现。但是他们都无法描述这些特征的空间关系。如下图:

这里我们我们人不会认为这是一张好的人脸图片。但是根据FID和IS,他们就是一个很好的人脸图片。因为它有人脸必要的特征,虽然这些特征的空间关系不好。

pytorch代码实现

请查考个人GitHub地址查看compute_FID_for_GAN 和 compute_IS_for_GAN
地址:https://github.com/xml94/open/tree/master
更新(2022年5月2日):更新版计算FID,简单好用

参考

值得一看,总结了IS和FID的历史发展
IS参考
FID参考

点赞给个鼓励呗

如果本文解决了你的困惑,不妨点个赞鼓励一下。
不管你信不信,也不管你同不同意,实际上,你的每一次点赞都标志着你自身的进步。而打赏乃是点赞的高级形式。
曾经有无数个点赞的机会,但是我都没有好好珍惜,假如时光可以倒流,我一定为他们也为自己点赞。

在此,也感谢给我反馈的小伙伴们,让我自己更加知道该怎么将这些概念弄得更清楚。
@丹童。
@刘鸣凤。
@jxvl假装。注意到了我在推导过程中出现了一个错误,负号的位置放错。现在已经改正过来。2020年3月28日13点03分。
@pzSuen。注意到公式中符号有误,特意全文检查一次,现在已经改正。2020-08-02 11:40:12。

【深度理解】如何评价GAN网络的好坏?IS(inception score)和FID(Fréchet Inception Distance)相关推荐

  1. 深度学习之生成对抗网络(6)GAN训练难题

    深度学习之生成对抗网络(6)GAN训练难题 1. 超参数敏感 2. 模式崩塌  尽管从理论层面分析了GAN网络能够学习到数据的真实分布,但是在工程实现中,常常出现GAN网络训练困难的问题,主要体现在G ...

  2. 深度学习之生成对抗网络(4)GAN变种

    深度学习之生成对抗网络(4)GAN变种 1. DCGAN 2. InfoGAN 3. CycleGAN 4. WGAN 5. Equal GAN 6. Self-Attention GAN 7. Bi ...

  3. 深度学习之生成对抗网络(2)GAN原理

    深度学习之生成对抗网络(2)GAN原理 1. 网络结构 生成网络G(z)\text{G}(\boldsymbol z)G(z) 判别网络D(x)\text{D}(\boldsymbol x)D(x) ...

  4. 『TensorFlow』通过代码理解gan网络_中

    『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 上篇是一个尝试生成minist手写体数据的简单GAN网络,之前有介绍过,图片维度是28*28*1,生成器的上采样使 ...

  5. 【深度学习】生成对抗网络(GAN)的tensorflow实现

    [深度学习]生成对抗网络(GAN)的tensorflow实现 一.GAN原理 二.GAN的应用 三.GAN的tensorflow实现 参考资料 GAN( Generative Adversarial ...

  6. 《深度学习》------生成对抗网络(GAN)学习笔记

    1.生成对抗网络的(GAN)的原理 GAN的思想:一种二人零和博弈思想(two-player game),博弈双方的利益之和是一个常数. 就像电影<猫鼠游戏>,生成网络G可以被看做是假支票 ...

  7. 深度学习新星:GAN的基本原理、应用和走向 | 硬创公开课

    深度学习新星:GAN的基本原理.应用和走向 | 硬创公开课 本文作者:亚萌 2017-01-07 15:56 专题:硬创公开课 导语:新加坡国立大学冯佳时通过[硬创公开课]为我们洞悉GAN的诞生和走向 ...

  8. 【GAN优化】最早被用于评价GAN模型的定量指标Inception Score是什么

    最近一部分的内容将会比较容易,将和大家一起讨论GAN的评价指标,也没有太难以理解的东西,希望大家踊跃讨论,欢迎留言. 作者&编辑 | 小米粥 编辑 | 言有三 在判别模型中,训练完成的模型要在 ...

  9. FSRNet:端到端深度可训练人脸超分辨网络

    作者丨左育莘 学校丨西安电子科技大学 研究方向丨计算机视觉 这篇文章 FSRNet: End-to-End Learning Face Super-Resolution with Facial Pri ...

  10. GAN网络系列博客(三):不受坐标限制的GAN(StyleGAN3)

    目录 1. 概述 2. 连续信号分析 2.1 等变网络层 3. 具体实现 3.1 傅里叶特征和基础简化 3.2 根据连续插值进行的步骤重建 4.实验 总结 Reference 关于StyleGAN系列 ...

最新文章

  1. 一起学习手撕包菜如何做 - 生活至上,美容至尚!
  2. 利用sendmail搭建邮件服务器
  3. zz 写科技论文的一点体会
  4. (转)WEB2.0的单手定则
  5. iOS开发:AFNetworking、MKNetworkKit和ASIHTTPRequest比较
  6. activemq中怎么知道推送消息是否成功_如何优雅的使用activeMQ 安装、应用、安全认证、持久化...
  7. 等式约束的序列二次规划(SQP)
  8. linux给目录加裸设备磁盘,Linux添加裸设备空间(Redhat)
  9. AF_INET是什么?
  10. 语义分割之PointRend论文与源码解读
  11. 蓝桥每日真题之负载均衡
  12. Codeproject收藏
  13. nodejs项目实例医生预约平台宠物医院预约挂号网
  14. HTML+CSS 模仿淘宝部分网页(未实现事件)
  15. grep -A -B -C -a -c -n -v -i等
  16. cmd是计算机语言吗,cmd的含义和作用
  17. policy服务器未能登陆,开机出现Group Policy Client服务未能登录的解决措施
  18. electron静默打印v_13,webview方式的相关配置
  19. 09组团队项目-Alpha冲刺-2/6
  20. 哈工大计算机854考研经验分享

热门文章

  1. 一线数据分析师教你如何写简历才能脱颖而出!
  2. xmind怎样画流程图_【工作流程图】如何用xmind做流程图
  3. 数据可视化大屏能为物联网项目带来什么
  4. R语言分类变量独立性检验(Tests of independence)、使用Fisher精确检验fisher.test函数检验分类变量的独立性( test of independence)
  5. 微信小程序之文本内的p标签去除
  6. hibernate之多对多配置
  7. 微信openid的生成规则研究
  8. 汉服php素材,【福利】汉服裁剪制作图——收录大全
  9. matlab仿真低通滤波,Matlab 低通Butterworth滤波仿真m文件
  10. 总结淘宝客应该注意的佣金陷阱