如何评价GAN网络生成图像的好坏?有两个简单常用的衡量方法,一个是Inception Score(IS),另一个是Frechet Inception Distance(FID),下面分别对这两个算法进行介绍。

一、Inception Score(IS)

评价一个生成模型的好坏,需要从两方面考量:

  1. 生成的图像是否清晰,清晰度高的表示生成图像的质量高;

  2. 生成的图像是否具有多样性,即每个类别生成图像的数目尽可能相等。

在IS算法中,对以上两点是这样考虑的:

  1. 在评判生成图像是否清晰方面,引入Inception模型,对生成图像 xxx 进行分类判断,得到一个1000维的分类向量 yyy。如果图像 xxx 清晰,则该向量 yyy 在某一个维度上的取值较大(表示属于某一类的概率较大),而其他维度的取值较小。用专业的术语来说,对于一张清晰的图像,则 P(y∣x)P(y|x)P(y∣x) 的熵越小(熵越大代表混乱程度越大,即随机变量的取值越不确定)。
  2. 在图像的多样性方面,假设我们生成20000张图像,总共有1000个类别,那么最理想的情况是每一类的个数是平均的,即每类图像的个数为20个。换做专业术语,即对于生成图像在所有类别的边缘分布 P(y)P(y)P(y) 的熵越大,则多样性越好(最理想是均匀分布)。

结合上述的两点考虑,IS的计算公式如下所示:

IS(G)=exp(Ex∼PgKL(p(y∣x)∣∣p(y)))IS(G)=exp(E_{x\sim P_{g}}KL(p(y|x)||p(y)))IS(G)=exp(Ex∼Pg​​KL(p(y∣x)∣∣p(y)))

其中,exp是为了公式的美观,意义不大。图像 xxx 是从生成数据的分布 PgP_{g}Pg​ 中采样的;KL表示KL散度;p(y∣x)p(y|x)p(y∣x)表示将生成图像 xxx 喂入 Inception网络得到的1000维的分类向量,原则上某一个维度越大越好;p(y)p(y)p(y) 是生成图片在所有类别上的边缘分布,我们希望越接近均匀分布越好。

因此,对于 p(y∣x)p(y|x)p(y∣x) 来说,我们希望他接近one-hot编码,即一个维度很大,其他维度值较小;对于 p(y)p(y)p(y) 来说,每个维度的值越平均越好。由于KL散度衡量的是两个分布之间的距离,因此在理想状况下,KL散度的值是最大的,即IS值越大,生成模型的效果越好。

深入理解 Inception Score

信息熵、条件熵、互信息

在深入理解IS之前,首先需要了解几个定义:

信息熵(熵)是衡量随机变量取值的不确定性的量,熵值越大,变量的不确定性越大。对于随机变量 xxx,其信息熵的定义如下:

H(x)=−∑ip(xi)logp(xi)H(x)=-\sum_{i}p(x_{i})logp(x_{i})H(x)=−i∑​p(xi​)logp(xi​)

条件熵衡量的是在给定一定的条件下,随机变量取值的不确定性。对于给定条件 yyy,随机变量 xxx 的条件熵计算公式为:

H(x∣y)=−∑i,jp(xi,yj)logp(xi∣yj)H(x|y)=-\sum_{i,j}p(x_{i},y_{j})logp(x_{i}|y_{j})H(x∣y)=−i,j∑​p(xi​,yj​)logp(xi​∣yj​)

互信息又称为信息增益,描述的是对于随机变量 xxx,在给定某个条件 yyy 后,随机变量 xxx 取值不确定性的减小程度。下面给出其原始公式和化简过后的结果:

I(y;x)=∑x,yp(x,y)logp(x,y)p(x)p(y)=H(x)−H(x∣y)I(y;x)=\sum_{x,y}p(x,y)log \frac{p(x,y)}{p(x)p(y)}=H(x)-H(x|y)I(y;x)=x,y∑​p(x,y)logp(x)p(y)p(x,y)​=H(x)−H(x∣y)

互信息满足对称性,即 I(x;y)=I(y;x)I(x;y)=I(y;x)I(x;y)=I(y;x)。

IS背后的原理

在介绍了上面三个基本概念后,下面再拉回正题。对于IS的计算式,可以先将exp去除掉,然后进行化简:

ln(IS(G))=Ex∼PgKL(p(y∣x)∣∣p(y))ln(IS(G))=E_{x\sim P_{g}}KL(p(y|x)||p(y))ln(IS(G))=Ex∼Pg​​KL(p(y∣x)∣∣p(y))

=∑xpg(x)KL(p(y∣x)∣∣p(y))=\sum_{x}p_{g}(x)KL(p(y|x)||p(y))=x∑​pg​(x)KL(p(y∣x)∣∣p(y))

=∑xpg(x)∑ip(y=i∣x)logp(y=i∣x)p(y=i)=\sum_{x}p_{g}(x)\sum_{i}p(y=i|x)log\frac{p(y=i|x)}{p(y=i)}=x∑​pg​(x)i∑​p(y=i∣x)logp(y=i)p(y=i∣x)​

=∑x,ip(x,y=i)logp(y=i∣x)p(x)p(y=i)p(x)=\sum_{x,i}p(x,y=i)log\frac{p(y=i|x)p(x)}{p(y=i)p(x)}=x,i∑​p(x,y=i)logp(y=i)p(x)p(y=i∣x)p(x)​

=∑x,ip(x,y=i)logp(x,y=i)p(y=i)p(x)=\sum_{x,i}p(x,y=i)log\frac{p(x,y=i)}{p(y=i)p(x)}=x,i∑​p(x,y=i)logp(y=i)p(x)p(x,y=i)​

=I(x;y)=H(y)−H(y∣x)=I(x;y)=H(y)-H(y|x)=I(x;y)=H(y)−H(y∣x)

经过一系列转化,IS取对数过后的值变为生成图像 xxx 与对应的类别向量 yyy之间的互信息。对于H(y)H(y)H(y),它表示的是类别 yyy 取值的不确定性,我们希望这个值越大越好,因为生成的样本具有多样性;对于 H(y∣x)H(y|x)H(y∣x),我们希望这个值越小越好,因为对于每一张生成图像 xxx 来说,我们希望它在某一个维度上的值越大越好,即随机变量 yyy 取值越单一,图像的清晰度越高。因此,IS的取值越高,表明生成模型的效果越理想。

关于IS的计算过程可先计算生成图像在每个类别的边缘分布,随后对于每一张图像,计算其经过Inception模型得到的1000维向量与之间计算的边缘分布之间的KL散度即可,过程比较简单,不做赘述。

关于IS的一些缺点可以参考:https://www.jiqizhixin.com/articles/2019-01-10-18

二、Frechet Inception Distance(FID)

设计GAN的初衷是希望得到一个分布,使得该分布尽可能与真实分布靠近。但是IS只是考虑了生成图像的清晰度和多样性,完全忽略了真实数据的影响,再加上IS本身的一些缺点,显然不能胜任GAN评价指标的王者地位。

因此,Frechet Inception Distance(FID)应运而生。FID考虑的更多的是生成的图像与真实图像之间的联系。该算法也是通过Inception模型进行计算的。

不同的是,FID拿掉了Inception模型最后的一个用于分类全连接层,将前面一层的2048维向量进行输出。在这里,Inception不再进行分类,而是进行特征提取,得到的2048维向量,每一个维度都表示着某种特征。

取同样数目的生成图像和真实图像各 NNN 张,经过改造后的Inception网络,各自得到 N∗2048N*2048N∗2048 维的特征向量,然后用下面的公式计算两个 N∗2048N*2048N∗2048 维的特征向量之间的距离:

FID(g,r)=∣μg−μr∣∣22+Tr(Σg+Σr−2(ΣgΣr)12))FID(g,r)=|\mu_{g}-\mu_{r}||_{2}^{2}+Tr(\Sigma_{g}+\Sigma_{r}-2(\Sigma_{g}\Sigma_{r})^\frac{1}{2}))FID(g,r)=∣μg​−μr​∣∣22​+Tr(Σg​+Σr​−2(Σg​Σr​)21​))

其中ggg和rrr分别代表生成图像和真实图像,μg\mu_{g}μg​和μr\mu_{r}μr​表示的是各自特征向量的均值,Σg\Sigma_{g}Σg​和Σr\Sigma_{r}Σr​表示各自特征向量的协方差矩阵,Tr表示矩阵的迹(主对角线各元素的和),矩阵开根如果为复数,则只取实部。

FID表示的是生成图像的特征向量与真实图像的特征向量之间的距离,该距离越近,表明生成模型的效果越好,即图像的清晰度高,且多样性丰富。

FID相对于IS来说有着更好的鲁棒性,因此在评价GAN模型中受用面更广一些。

为了更直观的了解FID计算过程,最后给出FID算法的代码:

# calculate frechet inception distance
def calculate_fid(act1, act2):# calculate mean and covariance statisticsmu1, sigma1 = act1.mean(axis=0), np.cov(act1, rowvar=False)mu2, sigma2 = act2.mean(axis=0), np.cov(act2, rowvar=False)# calculate sum squared difference between meansssdiff = np.sum((mu1 - mu2)**2.0)# calculate sqrt of product between covcovmean = linalg.sqrtm(sigma1.dot(sigma2))# check and correct imaginary numbers from sqrtif np.iscomplexobj(covmean):covmean = covmean.real# calculate scorefid = ssdiff + np.trace(sigma1 + sigma2 - 2.0 * covmean)return fid

其中型参act1和act2表示两个N∗2048N*2048N∗2048维度的特征向量。

关于衡量GAN好坏的指标还有很多,IS和FID是比较经典的两类评价算法,虽然都有一些缺陷,但也是为衡量生成模型质量做出了巨大的贡献。

参考:

https://blog.csdn.net/qq_27261889/article/details/86483505

https://baijiahao.baidu.com/s?id=1647349368499780367&wfr=spider&for=pc

https://www.jiqizhixin.com/articles/2019-01-10-18

https://blog.csdn.net/jackzhang11/article/details/104995524

https://arxiv.org/abs/1706.08500017

https://machinelearningmastery.com/how-to-implement-the-frechet-inception-distance-fid-from-scratch/

GAN的评价指标IS和FID相关推荐

  1. gan怎么输入一维数据_GAN评价指标最全汇总

    本文首发于微信公众号:有三AI 作者:小米粥 最近一部分的内容将会比较容易,将和大家一起讨论GAN的评价指标.在判别模型中,训练完成的模型要在测试集上进行测试,然后使用一个可以量化的指标来表明模型训练 ...

  2. GAN网络评估指标:IS、FID、PPL

    GAN网络评估指标:IS.FID.PPL 转自:IS.FID.PPL,GAN网络评估指标 另外关于GAN的评价指标,推荐李宏毅老师的视频:[機器學習2021]生成式對抗網路 (Generative A ...

  3. 如何快速计算生成模型的FID、IS、sFID、Precision、Recall等关键评价指标?

    前言:无论是对于GANs.VAEs.Diffusion models.flow-based models等生成模型,计算评价指标是都是必需品.这篇博客教大家如何快速计算FID.IS.sFID.Prec ...

  4. 史上最全GAN综述2020版:算法、理论及应用

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 转载自:机器之心 自从 2014 年 Ian GoodFellow 提出 GAN ...

  5. 「GAN优化」如何学会以正确的姿势定量评价你的GAN

    作者 | 小米粥 编辑 | 言有三 在机器学习中,训练完成的模型要在测试集上进行性能测试,然后使用一个可以量化的指标来表明模型训练的好坏,例如最简单的,使用分类准确率评价分类模型的性能,使用均方误差评 ...

  6. 【GAN优化】长文综述解读如何定量评价生成对抗网络(GAN)

    欢迎大家来到<GAN优化>专栏,这里将讨论GAN优化相关的内容,本次将和大家一起讨论GAN的评价指标. 作者&编辑 | 小米粥 编辑 | 言有三 在判别模型中,训练完成的模型要在测 ...

  7. 史上最全GAN综述2020版:算法、理论及应用(A Review on Generative Adversarial Networks: Algorithms, Theory, and Applic)

    ** ** 史上最全GAN综述2020版:算法.理论及应用** 论文地址:https://arxiv.org/pdf/2001.06937.pdf ** 摘要:生成对抗网络(GANs)是近年来的一个研 ...

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

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

  9. 李宏毅2021机器学习笔记——GAN

    GAN_P1 Generation Network as Generator 接下来要进入一个,新的主题 我们要讲生成这件事情 到目前為止大家学到的network,都是一个function,你给他一个 ...

  10. 生成式对抗网络(GAN)(李宏毅2022)

    到目前為止大家学到的network,都是一个function,你给他一个X就可以输出一个Y 我们已经学到各式各样的,network架构,可以处理不同的X 不同的Y 我们学到输入的X 如果是一张图片的时 ...

最新文章

  1. 大一期末考试,python,测试题,含答案
  2. 数据洪流时代的芯片之变
  3. Java黑皮书课后题第7章:7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则最小
  4. JDK7新特性简单翻译介绍
  5. 前端学习(1701):前端系列javascript之闭包
  6. 刷机提示图像和设备不匹配_安卓5.0升级失败如何解决 安卓5.0刷机失败解决方法介绍【教程】...
  7. 爬虫学习二: bs4 xpath re
  8. 脑波技术来袭,人类hold住吗?
  9. python dataframe的某一列变为list_Pandas某一列是列表,怎么展开呢?
  10. 一张书籍清单(软件工程师学习参考资料)
  11. ApiCloud数据Url请求
  12. Redis 集群模式(Cluster)原理详解
  13. 透视表学习(四)想要做好数据分析必知必会排序操作
  14. VS编译间接引用的DLL不一定输出
  15. d3d9.dll丢失怎么办
  16. 测试用例评审的旁观记录
  17. 关于自动化运维的那些事儿
  18. nginx反向代理加gitlab认证
  19. 二维码如何转为链接,看了这篇文章才知道多好用!
  20. Sicily 题目分类

热门文章

  1. vpay模式软件开发 vpay系统
  2. 如何在 R 中进行 Fisher 精确检验
  3. 图像处理基础:特征金字塔
  4. 百度地图点聚合仿链家定位点多级聚合,且滑动、刷新加载定位点
  5. 陪你看这世间---识人术
  6. json在线解析(json在线解析)
  7. 对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会
  8. 图片剪裁在线html,前端图片裁剪实战
  9. 评估指标【簇内误差平方和】-轮廓系数
  10. win7局域网计算机无法访问,win7局域网不能访问怎么办_win7系统电脑无法访问局域网怎么办-win7之家...