GAN量化评估方法——IS(Inception Score)和FID(Frechet Inception Distance score)

摘要:
生成的模型生成不同于判别模型的高维复杂结构数据。很难用简单的指标来评估模型。以下描述了两种流行的评估生成模型(仅图像)的指标:IS(Inception Score)和FID(FrechetInceptionDistancescore)。IS IS基于谷歌的预训练网络InceptionNet-V3。InceptionNet-V3是一个精心设计的卷积网络模型。输入为图片

  生成模型产生的是高维的复杂结构数据,它们不同于判别模型,很难用简单的指标来评估模型的好坏。下面介绍两种当前比较流行的评估生成模型的指标(仅判别图像):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定义如下:

egin{equation} egin{aligned} &E_{xsim p_G}(H(p(y|x)))\ =&sumlimits_{xin G}P(x)H(p(y|x))\ =&sumlimits_{xin G}P(x)sumlimits_{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定义如下:

egin{equation} egin{aligned} &H(E_{xsim p_G}(p(y|x)))\ =&Hleft(sumlimits_{xin G} P(x)p(y|x) ight)\ =&H( p(y))\ =&sumlimits_{i=1}^{1000} P(y_i)log frac{1}{P(y_i)}\ =&sumlimits_{i=1}^{1000} sumlimits_{xin G}P(y_i,x)log frac{1}{P(y_i)}\ =& sumlimits_{xin G}P(x)sumlimits_{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)$式为负,这样这两个指标的目标就一致了,都是越大越好。然后将它们加起来,得到:

egin{equation} egin{aligned} &sumlimits_{xin G}P(x)sumlimits_{i=1}^{1000}P(y_i|x)log frac{P(y_i|x)}{P(y_i)}\ =&E_{xsim p_G}KL(p(y|x)||p(y)) end{aligned} end{equation}

  其中$KL(p(y|x)||p(y))$是这两个分布的KL散度(相对熵)。最后再加上指数,得到最终的IS:

egin{equation} egin{aligned}   ext{IS}=exp E_{xsim p_G}KL(p(y|x)||p(y)) end{aligned} end{equation}

  根据定义,IS值越大,生成图像的质量越高。

具体应用

  假设生成器$G$生成$n$张图片${x_1,x_2,...,x_n}$,首先计算$P(y_i)$:

egin{equation} egin{aligned} P(y_i) = frac{1}{n}sumlimits_{j=1}^nP(y_i|x_j) end{aligned} end{equation}

  然后代入公式$(4)$计算IS:

egin{equation} egin{aligned} ext{IS}(G) &=exp E_{xsim p_G}KL(p(y|x)||p(y)) \ &=expleft(sumlimits_{xin G}P(x)sumlimits_{i=1}^{1000}P(y_i|x)log frac{P(y_i|x)}{P(y_i)} ight)\ &=expleft(frac{1}{n}sumlimits_{j=1}^nsumlimits_{i=1}^{1000}P(y_i|x_j)log frac{P(y_i|x_j)}{P(y_i)} ight) 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分数,是这样定义的:

egin{equation} egin{aligned} ext{FID}(x,g) = left|mu_x - mu_g ight| + ext{Tr}left(Sigma_x+Sigma_g-2sqrt{Sigma_xSigma_g} ight) end{aligned} end{equation}

  其中$mu_x,Sigma_x$分别是真实图像集合在Inception Net-V3输出的2048维特征向量集合的均值和协方差矩阵,$mu_g,Sigma_g$分别是生成图像集合在Inception Net-V3输出的2048维特征向量集合的均值和协方差矩阵。$ ext{Tr}$表示矩阵的迹。根号表示矩阵的平方根,需要注意的是,它并不是按元素进行的运算,表示如下:

$A = sqrt{A}sqrt{A}$

  代码实现时,矩阵根号开出来大概率会出现复根,我们直接取它的实部即可。另外,在python中,我们通常使用scipy.linalg.sqrtm函数对矩阵开方,它是通过迭代的方式来计算的,结果并不是很准确。经过实验,MATLAB计算得要准确得多,所以我们可以保存两个均值与协方差矩阵,然后用MATLAB来计算FID。

  较低的FID意味着生成分布与真实图片分布之间更接近,如果用于测试的真实图片清晰度高且种类多样,也就意味着生成图像的质量高、多样性好。

SWD

  SWD(Sliced Wasserstein Distance)是以Wasserstein距离为标准,衡量两个分布之间差异的评估方法。

免责声明:文章转载自《GAN量化评估方法——IS(Inception Score)和FID(Frechet Inception Distance score)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇openssl编程轻松入门(含完整示例)使用 Python 和 Oracle 数据库实现高并发性下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

GAN训练技巧汇总

  GAN自推出以来就以训练困难著称,因为它的训练过程并不是寻找损失函数的最小值,而是寻找生成器和判别器之间的纳什均衡。前者可以直接通过梯度下降来完成,而后者除此之外,还需要其它的训练技巧。   下面对历年关于GAN的论文提出的训练技巧进行总结,这里仅记录技巧,具体原理请直接看论文原文。 WGAN和WGAN-GP   WGAN论文将GAN原文用来度量两个分...

tfgan折腾笔记(二):核心函数详述——gan_model族

定义model的函数有: 1.gan_model 函数原型: defgan_model( #Lambdas defining models. generator_fn, discriminator_fn, #Real data and conditioning. real_data, generator_inputs,...

GAN作用——在我做安全的看来,就是做数据拟合、数据增强

from:https://www.zhihu.com/question/56171002/answer/155777359GAN的作用,也就是为什么GAN会火了(有部分原因可能是因为Lecun的赞赏)。如果GAN只是用来生成一些像真是数据一样的数据的话,那不会有像现在这么火。更多的,或者对于机器学习研究员来说,看待的最关键一点应该是GAN可以用来 拟合数据...

深度学习文献代码阅读-超分辨(ESRGAN)

ESRGAN是在SRGAN基础上进行增强的网络, 在2018年的比赛中获得了冠军 Introduction 介绍了基于PSNR指标获得的超分辨图像其结果会较为平滑,且与人们的主观有较大的差别 作者针对SRGAN提出了3个改进的点 第一点: 使用了RDDB网络结构, 这种层叠式的网络结构更容易表达效果 第二点: 使用RaGAN对抗网络, 这种网络在优化生...

开发者自述:我是这样学习 GAN 的

Generative Adversarial Network,就是大家耳熟能详的 GAN,由 Ian Goodfellow 首先提出,在这两年更是深度学习中最热门的东西,仿佛什么东西都能由 GAN 做出来。我最近刚入门 GAN,看了些资料,做一些笔记。 1.Generation 什么是生成(generation)?就是模型通过学习一些数据,然后生成类似的数...

Wasserstein GAN

  WGAN论文指出,原始GAN以JS、KL散度作为损失容易导致生成器梯度消失,他们提出了一种新的损失函数——Wasserstein 距离,很大程度上解决了GAN训练难的问题。 原始GAN的损失函数的缺陷   当两个分布之间重叠很小,或者说,两个分布的概率密度同时大于0的区域在整个分布的占比几乎为0时(无穷小,但还不是0),随着分布之间的靠拢,用于衡量分布...