持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
一、FID分数简介
FID全称为:Fréchet Inception Distance。
FID分数用于根据预训练网络提取的特征,测量真实图像分布和生成图像分布之间的距离。真实图像在空间中是服从一个分布的(假设为正态分布),而GAN生成的特征也是一个分布,GAN做的事情就是不断训练使这两个分布尽可能的相同。FID就是计算这两个分布直接的距离,使用的距离算法叫做Frechet distance。
1.物理意义:真实图像在空间中是服从一个分布的(假设为正态分布),而GAN生成的特征也是一个分布,GAN做的事情就是不断训练使这两个分布尽可能的相同。FID就是计算这两个分布直接的距离,使用的距离算法叫做Frechet distance。(比较好的还有Wasserstein-2 distance) 2. 假设你有基础的统计学知识,很简单就能明白两个正态分布只要均值和方差相同,则两个分布相同。而我们这里的图像是多维的分布,所以使用协方差矩阵衡量单个分布里两个维度之间的相关性,FID正是用均值和协方差矩阵来计算两个分布之间的距离。3. 上式由两个部分组成,r表示真实图像,g表示生成图像。第一部分中μ 表示分布的均值,第一部分为两个均值 μ 的差的平方。4. 第二部分中,Σ表示协方差,Tr表示迹(矩阵对角线上的元素和),第二部分为协方差矩阵的和减去根号下协方差矩阵的乘积的迹。
FID计算两个分布之间的距离,距离越小代表生成的分布越贴近于真实分布,故FID越小越好。
二、FID分数 CUB定量实验步骤
与IS类似,计算FID中我们也同样使用inception network网络,由30k或50k的真实和生成的图像样本计算,使用预先训练的Inception-v3模型的最后一个池化层的激活来获得视觉特征。
2.1、下载FID计算代码
github下载:github.com/MinfengZhu/…
将其放入code目录中
2.2、下载FID预训练好的模型
谷歌云盘链接:drive.google.com/file/d/1747… CSDN链接:FID训练好的模型 针对CUB-birds的FID预训练模型
下载后是一个npz文件,将其放入指定文件夹位置
2.3、输入终端命令
打开终端,输入命令为:python fid_score.py --gpu 0 --batch-size 24 --path1 eval/FID/bird_val.npz --path2 ../test/valid/single
其中后面的两个参数path1代表你放FID预训练的模型所在位置,path2代表你放生成的图片的位置。
运行后显示:
2.4、注意事项
1、计算FID一般需要30000张生成图像,如果只有3000张是测不准的; 2、计算FID的标准方法目前还不统一,用不用imagenet 预训练的参数测出来的FID也不一样,本篇仅仅是一种做法,目前看来可能还不够严谨,仅供参考。 3、FID的评价指标有很高的偏差,需要相同数量的样本进行公平比较。且其基于特征提取,也就是依赖于某些特征的出现或者不出现,因此无法描述这些特征的空间关系。例如用GAN去生成人脸,如果嘴巴长在眼睛上面,FID可能也会认为它是一张较好地生成结果。另外其面临着与IS相同的问题,因为它依赖于在ImageNet上预先训练的分类器。不适合在内部差异较大的数据集上使用,无法区分过拟合。