589 字
3 分钟
生成网络评价指标

https://blog.csdn.net/weixin_44966641/article/details/126614844

图形生成的要求#

对于生成模型,主要考虑以下两点

  1. 生成的图像是否清晰?
  2. 生成的图像是否多样? 当然也可以考虑下面 2 点
  3. 生成的图片是否和原始图片相似?
  4. 生成图片是否可以平滑的变化?

Inception Score#

基本思想Score 使用图片分类器来进行评估图片生成的质量.使用的分类器为 Inception Net3

Inception Net-V3 是图片分类器,在 ImageNet 数据集上训练。ImageNet 是由 120 多万张图片,1000 个类别组成的数据集。Inception Net-V3 可以对一副图片输出一个 1000 分类的概率。

  • 清晰度生成的图片分类,得到一个一千分类的向量,我们希望他某一维接近 1,其他维度小,也就是 P(yx)P(y|x) 的熵很小
  • 多样性: 我们希望生成的图片均匀分布,也就是 P(y)=p(yxi)P(y)=\sum p(y|x^i) 的熵很大 具体指标如下:
IS(G)=exp(Ex pgDKL(P(yx)P(y)))IS(G) = \exp(E_{x~p_{g}}D_{KL}(P(y|x)||P(y)))

这个指标越大约好,衡量了 y 的边缘概率 (也就是总体分布) 和每个的分布的相似度

FID#

FID 反应了生成图片和真实图片的距离,越小越好,专业来说,FID 是衡量两多元正态分布的距离,公示如下:

FID=μrμg2+Tr(Σr+Σg2(ΣrΣg)1/2)\begin{equation} FID = \|\mu_r - \mu_g\|^2 + \mathrm{Tr}(\Sigma_r + \Sigma_g - 2 (\Sigma_r \Sigma_g)^{1/2}) \end{equation}

μr\mu_r: 真实图片的特征均值

μg\mu_g: 生成图片的特征均值

Σr\Sigma_r: 真实图片的协方差矩阵

Σg\Sigma_g: 生成图片的协方差矩阵

Tr\mathrm{Tr}: 迹

$

这里的特征也是用 Inception network 网络来提取,但是不经过分类层, 得到一个 2048 维向量,假如这个分布服从正态分布,那么这个分布可以用一个均值和方差来确定.这里是多维度,那么就可以用协方差矩阵来衡量多个维度之间的关系.,那么用均值和协方差矩阵就可以衡量两个高维分布之间的距离.

numpy 代码如下

# calculate frechet inception distance
def calculate_fid(act1, act2):
 mu1, sigma1 = act1.mean(axis=0), cov(act1, rowvar=False)
 mu2, sigma2 = act2.mean(axis=0), cov(act2, rowvar=False)
 ssdiff = numpy.sum((mu1 - mu2)**2.0)
 covmean = sqrtm(sigma1.dot(sigma2))
 if iscomplexobj(covmean):
  covmean = covmean.real
 fid = ssdiff + trace(sigma1 + sigma2 - 2.0 * covmean)
 return fid
  
act1 = random(10*2048)
act1 = act1.reshape((10,2048))
act2 = random(10*2048)
act2 = act2.reshape((10,2048))
# fid between act1 and act1
fid = calculate_fid(act1, act1)
print('FID (same): %f' % fid)
# fid between act1 and act2
fid = calculate_fid(act1, act2)
print('FID (different): %f' % fid)