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

  1. Finding Similar Users-Euclidean Distance Score

    Purpose: Finding Similar Users Method:  Euclidean Distance Score ex2.py critics={'Lisa Rose': {'Lady ...

  2. GAN实战笔记——第五章训练与普遍挑战:为成功而GAN

    训练与普遍挑战:为成功而GAN 一.评估 回顾一下第1章中伪造达・芬奇画作的类比.假设一个伪造者(生成器)正在试图模仿达・芬奇,想使这幅伪造的画被展览接收.伪造者要与艺术评论家(判别器)竞争,后者试图 ...

  3. (转)GANs and Divergence Minimization

    GANs and Divergence Minimization 2018-12-22 09:38:27     This blog is copied from: https://colinraff ...

  4. Fréchet Inception Distance(FID)

    计算 IS 时只考虑了生成样本,没有考虑真实数据,即 IS 无法反映真实数据和样本之间的距离,IS 判断数据真实性的依据,源于 Inception V3 的训练集 ------ ImageNet,在 ...

  5. Inception Score

    转载 https://www.jiqizhixin.com/articles/2019-01-10-18    全面解析Inception Score原理及其局限性 https://blog.csdn ...

  6. 你的GAN训练得如何--GAN 的召回率(多样性)和精确率(图像质量)方法评估

    生成对抗网络(GAN)是当今最流行的图像生成方法之一,但评估和比较 GAN 产生的图像却极具挑战性.之前许多针对 GAN 合成图像的研究都只用了主观视觉评估,一些定量标准直到最近才开始出现.本文认为现 ...

  7. LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS

    最强GAN图像生成器,真假难辨 论文地址: https://openreview.net/pdf?id=B1xsqj09Fm 更多样本地址: https://drive.google.com/driv ...

  8. 学界!关于GAN的灵魂七问

    根据一些指标显示,关于生成对抗网络(GAN)的研究在过去两年间取得了本质的进步.在图像合成模型实践中的进步快到几乎无法跟上. 但是,根据其他指标来看,实质性的改进还是较少.例如,在应如何评价生成对抗网 ...

  9. 深度学习与CV教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

随机推荐

  1. vue-过渡动画和 第三方动画库导入,带图

    vue路由过渡动画 //用transition将路由出口包裹起来 <transition name="fade" mode="out-in"> &l ...

  2. LaTeX公式学习

    简介 本文公式较多可能有加载较慢. 使用 LaTeX 的主要原因之一是它可以方便地排版公式.我们使用数学模式来排版公式. 公式 插入公式 可以用一对$来启用数学模式. 行中公式可以用如下方法: $数学 ...

  3. ICPC North Central NA Contest 2018

    目录 ICPC North Central NA Contest 2018 1. 题目分析 2. 题解 A.Pokegene B.Maximum Subarrays C.Rational Ratio ...

  4. MySQL中change与modify的用法与区别

    浅析MySQL中change与modify的区别   MySQL版本 show variables like 'version'; 表结构 desc student; 修改表 例如:修改表studen ...

  5. 利用Python的装饰器一键开启多线程

    记录一下自己写的烂代码 import time import threading def WithThread(obj): """这是一个开启线程的装饰器"&q ...

  6. MYSQL_详细基本命令

    修改新密码:use mysql:update user set password='新密码' where user='用户名':flush privileges:  更新权限 增加新用户:grant ...

  7. Python定义一个函数

    Python函数:实现某种功能的代码段 定义一个函数需要遵循的规则: 1.使用 def 关键字 函数名和( ),括号内可以有形参 匿名函数使用 lambda 关键字定义 2.任何传入参数和自变量必须放 ...

  8. 一分钟玩转 Spring IoC!

    前言 「上一篇文章」我们对 Spring 有了初步的认识,而 Spring 全家桶中几乎所有组件都是依赖于 IoC 的. 刚开始听到 IoC,会觉得特别高大上,但其实掰开了很简单. 跟着我的脚步,一文 ...

  9. PHP get_html_translation_table() 函数

    实例 输出 htmlspecialchars 函数使用的翻译表: <?php高佣联盟 www.cgewang.comprint_r (get_html_translation_table()); ...

  10. luogu P3285 [SCOI2014]方伯伯的OJ splay 线段树

    LINK:方伯伯的OJ 一道稍有质量的线段树题目.不写LCT splay这辈子是不会单独写的 真的! 喜闻乐见的是 题目迷惑选手 \(op==1\) 查改用户在序列中的位置 题目压根没说位置啊 只有排 ...