GAN量化评估方法——IS(Inception Score)和FID(Frechet Inception Distance score)
生成模型产生的是高维的复杂结构数据,它们不同于判别模型,很难用简单的指标来评估模型的好坏。下面介绍两种当前比较流行的评估生成模型的指标(仅判别图像):IS(Inception Score)和FID(Frechet Inception Distance score)。
IS
IS基于Google的预训练网络Inception Net-V3。Inception Net-V3是精心设计的卷积网络模型,输入为图片张量,输出为1000维向量。输出向量的每个维度的值对应图片属于某类的概率,因此整个向量可以看做一个概率分布。下面讲解IS的思路和推导过程。
定义
IS考虑以下两个方面评估生成器的质量:
1、对于单一的生成图像,Inception输出的概率分布熵值应该尽量小。越小说明生成图像越有可能属于某个类别,图像质量高。
2、对于生成器生成的一批图像而言,Inception输出的平均概率分布熵值应该尽量大。因为生成器应该保证生成图像的多样性,因此Inception在不同生成图像上的输出分布差异应该大一些,从而使得它们的平均更接近均匀分布,熵值更大。
1定义如下:
\begin{equation} \begin{aligned} &E_{x\sim p_G}(H(p(y|x)))\\ =&\sum\limits_{x\in G}P(x)H(p(y|x))\\ =&\sum\limits_{x\in G}P(x)\sum\limits_{i=1}^{1000}P(y_i|x)\log \frac{1}{P(y_i|x)}\\ \end{aligned} \end{equation}
即先求批量输出分布的熵值再求熵的均值。其中$p(y|x)$表示Inception输入生成图像$x$时的输出分布,$P(x)$表示生成器$G$生成图像$x$的概率,$P(y_i|x)$表示Inception预测$x$为第$i$类的概率。
2定义如下:
\begin{equation} \begin{aligned} &H(E_{x\sim p_G}(p(y|x)))\\ =&H\left(\sum\limits_{x\in G} P(x)p(y|x)\right)\\ =&H\left( p(y)\right)\\ =&\sum\limits_{i=1}^{1000} P(y_i)\log \frac{1}{P(y_i)}\\ =&\sum\limits_{i=1}^{1000} \sum\limits_{x\in G}P(y_i,x)\log \frac{1}{P(y_i)}\\ =& \sum\limits_{x\in G}P(x)\sum\limits_{i=1}^{1000}P(y_i|x)\log \frac{1}{P(y_i)}\\ \end{aligned} \end{equation}
即先求批量输出分布的均值再求均值的熵。其中$p(y)$表示$G$生成的图片在Inception输出类别的平均分布,$P(y_i)$表示Inception判断$G$生成的图片属于$i$类的概率。
为了将1和2放在一起作为一个整体,取$(1)$式为负,这样这两个指标的优化目标就一致了,都是越大越好。然后将它们加起来,得到:
\begin{equation} \begin{aligned} &\sum\limits_{x\in G}P(x)\sum\limits_{i=1}^{1000}P(y_i|x)\log \frac{P(y_i|x)}{P(y_i)}\\ =&E_{x\sim p_G}KL(p(y|x)||p(y)) \end{aligned} \end{equation}
其中$KL(p(y|x)||p(y))$是这两个分布的KL散度(相对熵)。最后再加上指数,得到最终的IS:
\begin{equation} \begin{aligned} \text{IS}=\exp E_{x\sim p_G}KL(p(y|x)||p(y)) \end{aligned} \end{equation}
根据定义,IS值越大,生成图像的质量越高。
具体应用
假设生成器$G$生成$n$张图片$\{x_1,x_2,...,x_n\}$,首先计算$P(y_i)$:
\begin{equation} \begin{aligned} P(y_i) = \frac{1}{n}\sum\limits_{j=1}^nP(y_i|x_j) \end{aligned} \end{equation}
然后代入公式$(4)$计算IS:
\begin{equation} \begin{aligned} \text{IS}(G) &=\exp E_{x\sim p_G}KL(p(y|x)||p(y)) \\ &=\exp\left(\sum\limits_{x\in G}P(x)\sum\limits_{i=1}^{1000}P(y_i|x)\log \frac{P(y_i|x)}{P(y_i)}\right)\\ &=\exp\left(\frac{1}{n}\sum\limits_{j=1}^n\sum\limits_{i=1}^{1000}P(y_i|x_j)\log \frac{P(y_i|x_j)}{P(y_i)}\right) \end{aligned} \end{equation}
FID
FID分数是在IS基础上的修改(没有优劣之分),同样也是基于Inception Net-V3。FID与IS的不同之处在于,IS是直接对生成图像进行评估,指标值越大越好;而FID分数则是通过对比生成图像与真实图像来产生评估分数,计算一个“距离值”,指标值越小越好。以下是定义。
定义
FID并不使用Inception Net-V3的原本输出作为依据,它删除模型原本的输出层,于是输出层变为Inception Net-V3的最后一个池化层。这一层的输出是2048 维向量,因此,每个图像会被预测为2048个特征。
对于常见的分布来说(比如高斯分布),当分布类型确定后,只要再确定均值和方差,那么这个分布就确定了。我们假设生成图像与真实图像也服从某类分布,如果它们之间的均值与方差比较相近,我们就有理由认为生成图像是比较真实的。但是直接计算图像的均值和方差是不可取的,因为协方差矩阵规模太大(像素数*像素数)。所以就先通过Inception Net-V3映射为2048维的特征向量,再求特征向量的均值与协方差矩阵进行比较。
于是,真实图像分布与生成器生成分布之间的差异,即FID分数,是这样定义的:
\begin{equation} \begin{aligned} \text{FID}(x,g) = \left\|\mu_x - \mu_g\right\| + \text{Tr}\left(\Sigma_x+\Sigma_g-2\sqrt{\Sigma_x\Sigma_g}\right) \end{aligned} \end{equation}
其中$\mu_x,\Sigma_x$分别是真实图像集合在Inception Net-V3输出的2048维特征向量集合的均值和协方差矩阵,$\mu_g,\Sigma_g$分别是生成图像集合在Inception Net-V3输出的2048维特征向量集合的均值和协方差矩阵,$\text{Tr}$表示矩阵的迹,开根号是按元素进行的运算。
较低的FID意味着生成分布与真实图片分布之间更接近,如果用于测试的真实图片清晰度高且种类多样,也就意味着生成图像的质量高、多样性好。
GAN量化评估方法——IS(Inception Score)和FID(Frechet Inception Distance score)的更多相关文章
- Finding Similar Users-Euclidean Distance Score
Purpose: Finding Similar Users Method: Euclidean Distance Score ex2.py critics={'Lisa Rose': {'Lady ...
- GAN实战笔记——第五章训练与普遍挑战:为成功而GAN
训练与普遍挑战:为成功而GAN 一.评估 回顾一下第1章中伪造达・芬奇画作的类比.假设一个伪造者(生成器)正在试图模仿达・芬奇,想使这幅伪造的画被展览接收.伪造者要与艺术评论家(判别器)竞争,后者试图 ...
- (转)GANs and Divergence Minimization
GANs and Divergence Minimization 2018-12-22 09:38:27 This blog is copied from: https://colinraff ...
- Fréchet Inception Distance(FID)
计算 IS 时只考虑了生成样本,没有考虑真实数据,即 IS 无法反映真实数据和样本之间的距离,IS 判断数据真实性的依据,源于 Inception V3 的训练集 ------ ImageNet,在 ...
- Inception Score
转载 https://www.jiqizhixin.com/articles/2019-01-10-18 全面解析Inception Score原理及其局限性 https://blog.csdn ...
- 你的GAN训练得如何--GAN 的召回率(多样性)和精确率(图像质量)方法评估
生成对抗网络(GAN)是当今最流行的图像生成方法之一,但评估和比较 GAN 产生的图像却极具挑战性.之前许多针对 GAN 合成图像的研究都只用了主观视觉评估,一些定量标准直到最近才开始出现.本文认为现 ...
- LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS
最强GAN图像生成器,真假难辨 论文地址: https://openreview.net/pdf?id=B1xsqj09Fm 更多样本地址: https://drive.google.com/driv ...
- 学界!关于GAN的灵魂七问
根据一些指标显示,关于生成对抗网络(GAN)的研究在过去两年间取得了本质的进步.在图像合成模型实践中的进步快到几乎无法跟上. 但是,根据其他指标来看,实质性的改进还是较少.例如,在应如何评价生成对抗网 ...
- 深度学习与CV教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
随机推荐
- spring学习(八)事务操作
一.事务的概念: 事务是并发控制的单位,一系列操作组成的工作单元,该工作单元内的操作是不可分割的,也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做,所有操作必须成功完成,否则 ...
- List<Activity> lists的关闭finish()
public class App extends Application { private static List<Activity> lists = new ArrayList< ...
- python的__get__方法看这一篇就足够了
get类型函数 直接上代码: class TestMain: def __init__(self): print('TestMain:__init__') self.a = 1 if __name__ ...
- Oracle DataGuard故障转移(failover)后使用RMAN还原失败的主库
(一)DG故障转移后切换为备库的方法 在DG执行故障转移之后,主库与从库的关系就被破坏了.这个时候如果要恢复主从关系,可以使用下面的3种方法: 将失败的主库重新搭建为备库,该方法比较耗时: 使用数据库 ...
- Python爬虫开发与项目实战pdf电子书|网盘链接带提取码直接提取|
Python爬虫开发与项目实战从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言与HTML基础知识引领读者入门,之后根据当前风起云涌的云计算.大数据热潮,重点讲述了云计算的相关内容及其在爬虫中的应 ...
- 部分浏览器 set-cookie 不成功踩坑记录
事件起因: 公司正在做一个sso的单点登录的项目,做完之后,在测试阶段,不同的终端的兼容测试时候,好几个不同的浏览器出现了不同的问题,有登录之后自动退出,有登陆不成功等问题. 在 pc 端只有 uc ...
- Python os.link() 方法
概述 os.link() 方法用于创建硬链接,名为参数 dst,指向参数 src.高佣联盟 www.cgewang.com 该方法对于创建一个已存在文件的拷贝是非常有用的. 只支持在 Unix, Wi ...
- number类型转date类型
遇到用数字记录日期时,进行查询转换. create or replace function num_to_date(s in number) return dateisbegin return to_ ...
- MyBatis-Plus使用(4)-集成SpringBoot
我这里使用的MyBatis-Plus是当前最新的3.2.0版本, 1. 引入需要的jar,基础jar包括: <dependencies> <dependency> <gr ...
- 【转】一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结
[转]原文链接:https://cloud.tencent.com/developer/article/1497826 这是一个十分严重的线上问题 自从最近的某年某月某天起,线上服务开始变得不那么稳定 ...