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

175480编辑收藏

  生成模型产生的是高维的复杂结构数据,它们不同于判别模型,很难用简单的指标来评估模型的好坏。下面介绍两种当前比较流行的评估生成模型的指标(仅判别图像):IS(Inception Score)和FID(Frechet Inception Distance score)。

1  IS#

  IS基于Google的预训练网络Inception Net-V3。Inception Net-V3是精心设计的卷积网络模型,输入为图片张量,输出为1000维向量。输出向量的每个维度的值对应图片属于某类的概率,因此整个向量可以看做一个概率分布。下面讲解IS的思路和推导过程。

1.1  定义#

  IS考虑以下两个方面评估生成器的质量:

  1、对于单一的生成图像,Inception输出的概率分布熵值应该尽量小。越小说明生成图像越有可能属于某个类别,图像质量高。

  2、对于生成器生成的一批图像而言,Inception输出的平均概率分布熵值应该尽量大。也就是说,因为生成器应该保证生成图像的多样性,因此一批图像在Inception的输出应该尽量平均地“遍历”所有1000维标签。

  1定义如下:

(1)ExpG(H(p(y|x)))=xGP(x)H(p(y|x))=xGP(x)i=11000P(yi|x)log1P(yi|x)

  即先求批量输出分布的熵值再求熵的均值。其中p(y|x)表示Inception输入生成图像x时的输出分布,P(x)表示生成器G生成图像x的概率,P(yi|x)表示Inception预测x为第i类的概率。

  2定义如下:

(2)H(ExpG(p(y|x)))=H(xGP(x)P(y|x))=H(p(y))=i=11000P(yi)log1P(yi)=i=11000xGP(yi,x)log1P(yi)=xGP(x)i=11000P(yi|x)log1P(yi)

  即先求批量输出分布的均值再求均值的熵。其中p(y)表示G生成的图片在Inception输出类别的平均分布,P(yi)表示Inception判断G生成的图片属于i类的概率。

  为了将1和2放在一起作为一个整体,取(1)式为负,这样这两个指标的目标就一致了,都是越大越好。然后将它们加起来,得到:

(3)xGP(x)i=11000P(yi|x)logP(yi|x)P(yi)=ExpGKL(p(y|x)||p(y))

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

(4)IS=expExpGKL(p(y|x)||p(y))

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

1.2  具体应用#

  假设生成器G生成n张图片{x1,x2,...,xn},首先计算P(yi)

(5)P(yi)=1nj=1nP(yi|xj)

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

(6)IS(G)=expExpGKL(p(y|x)||p(y))=exp(xGP(x)i=11000P(yi|x)logP(yi|x)P(yi))=exp(1nj=1ni=11000P(yi|xj)logP(yi|xj)P(yi))

2  FID#

  FID分数是在IS基础上的改进,同样也是基于Inception Net-V3。FID与IS的不同之处在于,IS是直接对生成图像进行评估,指标值越大越好;而FID分数则是通过对比生成图像与真实图像来产生评估分数,计算一个“距离值”,指标值越小越好。以下是定义。

2.1  定义#

  FID并不使用Inception Net-V3的原本输出作为依据,它删除模型原本的输出层,于是输出层变为Inception Net-V3的最后一个池化层。这一层的输出是2048 维向量,因此,每个图像会被预测为2048个特征。

  对于常见的分布来说(比如高斯分布),当分布类型确定后,只要再确定均值和方差,那么这个分布就确定了。我们假设生成图像与真实图像也服从类似分布,如果它们之间的均值与方差比较相近,我们就有理由认为生成图像是比较真实的。但是直接计算图像的均值和方差是不可取的,因为协方差矩阵规模太大(像素数*像素数)。所以就先通过Inception Net-V3映射为2048维的特征向量,再求特征向量的均值与协方差矩阵进行比较。

  于是,真实图像分布与生成器生成分布之间的差异,即FID分数,是这样定义的:

(7)FID(x,g)=μxμg+Tr(Σx+Σg2ΣxΣg)

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

A=AA

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

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

3  SWD#

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

 

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
很高兴能帮到你~
点赞
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示