• Inception Score


    转载

    https://zhuanlan.zhihu.com/p/109342043                                这篇文章讲的特别好

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

    https://blog.csdn.net/qq_27261889/article/details/86483505   如何评价GAN网络的好坏?IS(inception score)和FID(Fréchet Inception Distance)主要公式推导

    https://blog.csdn.net/qq_35586657/article/details/98478508   GAN的多种评价指标

    很多关于 GAN 生成图片的论文中,作者评价其模型表现的一项重要指标是 Inception Score(下文简称 IS)。其名字中 Inception 来源于 Google 的 Inception Net,因为计算这个 score 需要用到 Inception Net-V3(第三个版本的 Inception Net)。 Inception Net 是图片分类网络,在 ImageNet 数据库上训练,ImageNet 数据库共有 1.2M 个 RGB 图片,分为 1000 类。Inception Score 只是把 Inception Net-V3 作为一个工具,理解 Inception Score 不需要知道 Inception Net-V3 的细节,各种深度学习框架中都已经包含了预训练好的 Inception Net-V3 了,直接拿来用就好了。

    基本原理

    评价一个生成模型,我们需要考验它两方面性能:

        1. 生成的图片是否清晰;

        2. 生成的图片是否多样。

    生成的图片不够清晰,说明生成模型表现欠佳;生成的图片够清晰了,我们还要看是不是能生成足够多样的图片,有些生成模型只能生成有限的几种清晰图片,陷入了所谓 mode collapse,也不是好的模型。

    在GAN中,我们希望条件概率P(y∣x) 可以被高度预测(x 表示给定的图片,y  表示这个图片包含的主要物体,看到后面你会更加清楚这个概率是什么意思),也就是希望它的熵值较低。例如,给定一个图片,我们很容易的知道其中包含什么物体。

    因此,我们使用inception network(可以理解这是一个固定的分类网络)来对生成的图像进行分类。(这里都是针对ImageNet数据集而言)然后预测 P(y∣x) P(y∣x), 这里的 y  就是标签。用这个概率来反应图片的质量。

    简单来说,假如inception network能够以较高的概率预测图片中包含的物体,也就是有很高的把握对其进行正确分类,这就说明图片质量较高。

    Inception Score 是这样考虑这两个方面的: 

    1. 清晰度:把生成的图片 x 输入 Inception V3 中,将输出 1000 维的向量 y ,向量的每个维度的值对应图片属于某类的概率。对于一个清晰的图片,它属于某一类的概率应该非常大,而属于其它类的概率应该很小(这个假设本身是有问题的,有可能有些图片很清晰,但是具体属于哪个类却是模棱两可的)。用专业术语说, p(y|x) 的熵应该很小(熵代表混乱度,均匀分布的混乱度最大,熵最大)。 

    可以用条件概率p(y∣x) 来表示,它越大越好。而p(y∣x)熵应该是越小越好。

    Inception Net-V3可将其以很高的概率分类成某个类,即标签向量 [公式] 的数值比较集中,形如 [公式] 。我们可以使用熵来量化该指标,分布[公式]相对于类别的熵定义为:

    其中, [公式] 表示 [公式] 属于第[公式]类的概率,即 [公式] 值,为了避免歧义,计算方式展示如下图所示:

    2. 多样性:如果一个模型能生成足够多样的图片,那么它生成的图片在各个类别中的分布应该是平均的,假设生成了 10000 张图片,那么最理想的情况是,1000 类中每类生成了 10 张。转换成术语,就是生成图片在所有类别概率的边缘分布 p(y) 熵很大(均匀分布)。

    具体计算时,可以先用生成器生成 N 张图片,然后用公式 (1) 的经验分布来代替:

    综合上面两方面,Inception Score 的公式为:

    exp:仅仅是为了好看,没有具体含义。

    x~Pg :表示从生成器中生图片。

    p(y|x) :把生成的图片 x 输入到 Inception V3,得到一个 1000 维的向量 y ,也就是该图片属于各个类别的概率分布。IS 提出者的假设是,对于清晰的生成图片,这个向量的某个维度值格外大,而其余的维度值格外小(也就是概率密度图十分尖)。

    p(y) :N 个生成的图片(N 通常取 5000),每个生成图片都输入到 Inception V3 中,各自得到一个自己的概率分布向量,把这些向量求一个平均,得到生成器生成的图片全体在所有类别上的边缘分布,见公式 (1)。

    :对 p(y|x) 和 p(y) 求 KL 散度。KL 散度离散形式的公式如下:

    KL 散度用以衡量两个概率分布的距离,它是非负的,值越大说明这两个概率分布越不像。但这个距离不是对称的,观察公式, P(i) 很大 Q(i) 很小的地方对 KL 距离贡献很大,而 P(i) 很小 Q(i) 很大的地方对 KL 距离的贡献很小。

    我们预期的某个维度值很大,而 p(y) 总体均匀,因此需要把放在公式 (2) 中双竖线的前面。放到后面可能会造成的极端值被忽略,而正是这个极端值的存在告诉了我们这个生成的图片是否清晰。 

    综合起来,只要 p(y|x) 和 p(y) 的距离足够大,就能证明这个生成模型足够好。因为前者是一个很尖锐的分布,后者是一个均匀分布,这俩距离本就应该很大。 

    公式 (2) 很不直观,在实际操作中可以改成如下形式:

    实际操作中,先用生成的大量样本代入公式 (1),求出,然后再对每个样本求出,计算它和的 KL 散度,最后求平均,再算一下指数即可。 

    Inception Score 的 pytorch 版本代码可以参考下面的链接,十分清晰易懂:

    https://github.com/sbarratt/inception-score-pytorch

    局限性
    虽然IS是GAN中使用最多的一种评价标准,但是这个计算方法本身就存在一些问题。

    Inception Score 对神经网络内部权重十分敏感。不同框架预训练的网络达到同样的分类精度,但由于其内部权重微小的不同,导致了 Inception Score 很大的变化,在 ImageNet 上,Inception V3 Torch 和 Inception V3 Keras 算出的 IS 相差 3.5%;
    通常计算 Inception Score 时,会生成 50000 个图片,然后把它分成 10 份,每份 5000 个,分别代入公式 (2) 计算 10 次 Inception Score,再计算均值和方差,作为最终的衡量指标(均值±方差)。但是 5000 个样本往往不足以得到准确的边缘分布p(y),尤其是像 ImageNet 这种包含 1000 个类的数据集;
    如果某一个物体的类别本身就比较模糊,在几种类别会得到相近的分数,或者这个物体类别在ImageNet中不存在,那么p(y|x)的概率密度就不再是一个尖锐的分布;如果生成模型在每类上都生成了 50 个图片,那么生成的图片的类别边缘分布是严格均匀分布的,按照 Inception Score 的假设,这种模型不存在 mode collapse,但是,如果各类中的50个图片,都是一模一样的,仍然是 mode collapse。Inception Score 无法检测这种情况。
    不能判别出网络是否过拟合。如果神经网络记住了所有的训练集图片,然后随机输出,那么它会得到一个很高的 Inception Score,但这明显不是我们希望的。

    原文链接:https://blog.csdn.net/qq_35586657/article/details/98478508

    总结

    Inception Score作为论文中最常出现的评价标准,在一定程度上可以反映出生成图片的质量以及多样性,但也存在一些问题:数值受样本选取的干扰较大,不适合在内部差异较大的数据集上使用,分类模型和生成模型应该在同一个数据集上训练,无法区分过拟合等等。

  • 相关阅读:
    FLINK基础(87): DS算子与窗口(1)简介
    Flink实例(三十九):状态管理(十)配置checkpoint
    FLINK基础(112): DS算子与窗口(23)多流转换算子(7)Broadcasting
    Flink实例(三十七):状态管理(八)自定义操作符状态(三)广播状态(Broadcast state)(一) KeyedBroadcastProcessFunction
    Flink实例(三十六):状态管理(七)自定义操作符状态(二)union list state
    关闭firecracker
    Creating Custom rootfs and kernel Images
    Build a single-app rootfs for Firecracker MicroVMs
    由浅入深CrosVM(一)—— 如何在Ubuntu中搭建CrosVM
    Making a Custom MicroVM for AWS Firecracker!
  • 原文地址:https://www.cnblogs.com/gaona666/p/12357125.html
Copyright © 2020-2023  润新知