GAN生成器好坏之评价方法

news2024/12/23 10:02:33

        我们产生出来的生成器它好或者是不好。要 评估一个生成器的好坏,最直觉的做法也许是找人来看生成器产生出来的图片到底像不像真 实的图片。所以其实很长一段时间,尤其是人们刚开始研究生成式技术的时候,很长一段时间 没有好的评估方法。那时候要评估生成器的好坏,都是人眼看,直接在论文最后放几张图片,然后说这个生成器产生出来的图片是不是比较好。所以我们可以发现比较早年GAN的论文, 它没有数字结果,整篇论文里面没有准确度等等的数字结果,它只有一些图片,然后说这个生 成器产生出来的图片是不是比较好,接着就结束了。这样显然是不行的,并且有很多的问题, 比如说不客观、不稳定等等诸多的问题。所以有没有比较客观而且自动的方法来度量一个生 成器的好坏呢?

        针对特定的一些任务,是有办法设计一些特定方法的。比如说我们要产生一些动画人物 的头像,那我们可以设计一个专门用于动画人物面部的识别系统,然后看看我们的生成器产 生出来的图片里面,有没有可以被识别的动画人物的人脸。如果有的话,那就代表说这个生成 器产生出来的图片是比较好的。但是这个方法只能针对特定的任务,如果我们要产生的东西 不是动画人物的头像,而是别的东西,那这个方法就不行了。那如果是更一般的案例,比如它 不一定是产生动画人物的,它专门产生猫、专门产生狗、专门产生斑马等等,那我们怎么知道 它做得好不好呢?

        其实有一个方法,是训练一个图像的分类系统,然后把GAN产生出来的图片输入到这 个图像的分类系统里面,看它产生什么样的结果,如图1所示。这个图像分类系统的输入 是一张图片,输出是一个概率分布,这个概率分布代表说这张图片是猫的概率、狗的概率、斑 马的概率等等。如果这个概率分布越集中,就代表现在产生的图片可能越好。如果生成出来的 图片是一个四不像,图像识别系统就会非常地困惑,它产生出来的这个概率分布就会是非常 平均地分布。

图1 评估GAN生成图像的质量

        这个是靠图像识别系统来判断产生出来的图片好坏,这是一个可能的做法,但是光用这 个做法是不够的。光用这个做法会被一个叫做模式崩塌(modecollapse)的问题骗过去。模 式崩塌是指在训练GAN的过程中遇到的一个状况,假设如图2蓝色的星星是真正的数据 的分布,红色的星星是GAN的模型的分布。我们会发现生成式的模型它输出来的图片来来 去去就是那几张,可能单一张拿出来你觉得好像还做得不错,但让它多产生几张就露出马脚, 产生出来就只有那几张图片而已,这就是模式崩塌的问题。

图2  模式崩塌问题

        发生模式崩塌的原因,从直觉上理解可以想成这个地方就是判别器的一个盲点,当生成 器学会产生这种图片以后,它就永远都可以骗过判别器,判别器没办法看出来图片是假的。那 对于如何避免模式坍塌,其实到今天其实还没有一个非常好的解答,不过有方法是模型在生 成器训练的时候,一直将训练的节点存下来,在模式坍塌之前把训练停下来,就只训练到模式 崩塌前,然后就把之前的模型拿出来用。不过模型崩塌这种问题,我们至少是知道有这个问 题,是可以看得出的,生成器总是产生这张脸的时候,你不会说你的生成器是个好的生成器。 但是有一些问题是你不知道的并且更难侦测到的,即你不知道生成器产生出来的图片是不是 真的有多样性.

        这个问题叫做模式丢失,指GAN能很好地生成训练集中的数据,但难以生成非训练集的数据,“缺乏想象力”。你的产生出来的数据,只有真实数据的一部分,单纯看产生出来的数据, 你可能会觉得还不错,而且分布的这个多样性也够,但你不知道真实数据的多样性的分布其 实是更大的。事实上今天这些非常好的GAN,BGAN、ProgressGAN等等可以产生非常真实 人脸这些GAN,多多少少还是有模式丢失的问题。如果你看多了GAN产生出来的人脸,你 会发现虽然非常真实但好像来来去去就是那么几张脸而已,并且有一个非常独特的特征是你 看多了以后就觉得,这个脸好像是被生成出来的。今天也许模式丢失都还没有获得本质上的 解决。

        虽然存在以上模式坍塌、模式丢失等等的问题,但是我们需要去度量生成器产生出来的 图片到底多样性够不够。有一个做法是借助我们之前介绍过的图像分类,把一系列图片都丢 到图像分类器里,看它被判断成哪一个类别,如图3所示。每张图片都会给我们一个分布, 我们将所有的分布平均起来,接下来看看平均的分布长什么样子。如果平均的分布非常集中, 就代表现在多样性不够,如果平均的分布非常平坦,就代表现在多样性够了。具体来讲,如 果什么图片输入到图像分类系统中的输出都是第二种类别,那代表说每一张图片也许都很像, 也就代表输出的多样性是不够的,那如果另外一个案例不同张图片丢进去,它的输出分布都 不一样,那就代表说多样性是够的。并且平均完以后发现结果是非常平坦的,那这个时候代表 多样性是足够的。

图3 GAN 生成结果多样性问题

        当我们用这个图像分类器来做评估的时候,对于结果的多样性和质量好像是有点互斥的。 因为我们刚才在讲质量的时候说,分布越集中代表质量越高,多样性的分布越平均。但是如 果分布越平均,那质量就会越低,因为分布越平均,代表图片都不太像,所以质量就会越低。 这里要强调一下质量和多样性的评估范围不一样,质量是只看一张图片,一张图片丢到分类 器的时候,分布有没有非常地集中。而多样性看的是一堆图片分布的平均,一堆图片中图像分 类器输出的越平均,那就代表现在的多样性越大。

        过去有一个非常常被使用的分数,叫做Inception 分数。其顾名思义就是用Inception 网 络来做评估,用Inception 网络度量质量和多样性。如果质量高并且多样性又大,那Inception 分数就会比较大。目前研究人员通常会采取另外一个评估方式,叫FréchetInceptiondistance (FID)。具体来讲,先把生成器产生出来的人脸图片,丢到InceptionNet 里面,让 Inception 网络输出它的类别。这里我们需要的不是最终的类别,而是进入Softmax之前的隐藏层的输出向量,这个向量的维度是上千维的,代表这个图片,如图4所示。图中所有红色点代表 把真正的图片丢到Inception 网络以后,拿出来的向量。这个向量其实非常高维度,甚至是上 千维的,我们就把它降维后画在二维的平面上。蓝色点是GAN的生成器产生出来的图片,它 丢到Inception 网络以后进入 Softmax 之前的向量。接下来,我们假设真实的图片和生成的 图片都服从高斯分布,然后去计算这两个分布之间的Fréchet的距离。两个分布间的距离越小 越好,距离越小越代表这两组图片越接近,也就是产生出来的品质越高。这里还有几个细节问 题,首先,假设为高斯分布没问题吗?另外一个问题是如果要准确的得到网络的分布,那需要 产生大量的采样样本才能做到,这需要一点运算量,也是做FID不可避免的问题。 

图4 FID 的计算过程 

        FID 算是目前比较常用的一种度量方式,那有一篇文章叫做“AreGANs Created Equal? A Large-Scale Study”,这个 Google 完成的论文里面尝试了不同的 GAN。每一个 GAN 的训 练的分类,训练的损失都有点不太一样,并且每一种GAN,它都用不同的随机种子,去跑过很 多次以后,取结果的平均值等等。从文章的结果来看所有的GAN都差不多,那所以与GAN 有关的研究都是白忙一场吗?事实上也未必是如此,这篇文章做实验的时候不同的GAN用的 网络架构都是同一个,只是疯狂调参而已,调随机种子和学习率而已。网络架构还是同一个, 所以是不是有某些网络架构,某些种类的GAN会不会在不同的网络架构上表现得比较稳定。 这些都有待研究 .

        此外,还有一个状况。假设GAN产生出来的图片,跟真实的图片长得一模一样,那此时 FID 会是零,因为两个分布是一模一样的。如果你不知道真实数据长什么样子,光看这个生 成器的输出可能会觉得太棒了,那FID算出来一定是非常小的,但是如果它产生出来的图片 都跟数据库里面的训练数据的一模一样的话,那干脆直接从训练数据集里面采样一些图像出 来不是更好,也就不需要训练生成器了。我们训练生成器其实是希望它产生新的图片,也就是 训练集里面没有的人脸。

        对于这种问题,就不是普通的度量标准可以侦测的。那怎么解决呢?其实有一些方法,例 如可以用一个分类器,这个分类器是用来判断这张图片是不是真实的,是不是来自于你的训 练集的。这个分类器的输入是一张图片,输出是一个概率,这个概率代表说这张图片是不是来 自于你的训练集。如果这个概率是1,那就代表说这张图片是来自于你的训练集,如果这个概 率是0,那就代表说这张图片不是来自于你的训练集。但是另外一个问题,假设生成器学到的 是把所有训练数据里面的图片都左右反转呢,那它也是什么事都没有做。但是你的分类器会 觉得说,这张图片是来自于你的训练集,因为它是来自于你的训练集的图片,只不过是左右反转而已。进行分类时或者进行相似度的比较时,又比不出来。所以GAN的评估是非常地困难 的,还甚至如何评估一个生成器做得好不好都是一个可以研究的题目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

群晖NAS安装(一)

主要教程参考 https://zhuanlan.zhihu.com/p/515187738?utm_id0&wd&eqide69f50bb0000263900000006645b5680 系统是DS3617xs DSM6.1.3 一 准备工作 旧16G U盘一个 软件: diskgenius 分区工具 win32diskimager 写入工具 chipeasy或者chipgenius 识别工具 二 安装 分区…

log4j2 与 log4j使用时的几点小区别 - log4j2上手说明

虽然log4j2 目前还是beta版,不过OneCoder已经忍不住要尝试一下。跟使用log4j 比起来,上手上主要的区别有。 1、依赖的jar包。使用slf4jlog4j2 时,依赖的jar包如下:( gradle配置,Maven对照修改即可) dependencies{ com…

SAP与湃睿PLM系统集成案例

一、项目背景 浙江某家用电机有限公司, 该公司的产品涵盖洗衣机、‌空调、‌冰箱及厨房用具等家电电机的制造,‌具备年产4600万台电机的生产能力,‌是中国最大的家电电机生产基地之一。 为确保工艺路线信息在设计与生产执行层面的无缝传递&#xff0…

python多进程

文章目录 1、前言2、示例3、参考 1、前言 python中使用多进程,可以加快代码的运行速度,更高效地进行相关工作。 2、示例 使用蒙特卡洛方法计算 π \pi π来进行使用多进程前后代码运行速率的对比; import random import multiprocessing as…

信也科技基于 Apache SeaTunnel金融场景的应用实践探索

前言 作者:朱俊,信也科技,数据开发专家 离线开发一直是数据仓库建设中重要的一个环节。信也科技之前基于Azkaban构建了离线任务调度与开发平台,承载了公司90%以上的离线任务调度需求,以及玄策变量平台的每日变量跑批产…

爵士编曲:如何编写爵士鼓

音源选取 使用ssd鼓写爵士乐,使用其中的豪华爵士音源,然后选其中的第一个或第二个都可以。 或者用add鼓studio drummer中的爵士鼓也可以 ​Cubase图示 用swing的律动把叮叮镲写上 然后第三拍加上踩镲

【截图服务 +打包】pkg打包 puppeteer

目录 最后结论 遇到的问题与解决 版本匹配问题 参考文档 最后结论 pkg -t win --public ./screenshots.js --output ./dist/screen.exe 服务启动: postman调用 : 遇到的问题与解决 版本匹配问题 pkg 这里说的是v3.5,实际装的是5.8.1,…

【ArcGIS Pro实操第二期】最小成本路径(Least-cost path)原理及实操案例

ArcGIS Pro实操第一期:最小成本路径原理及实操案例 概述(Creating the least-cost path)1.1 原理介绍1.2 实现步骤1.3 应用案例 2 GIS实操2.1 工具箱简介2.1.1 成本路径(Cost path)2.1.2 成本距离(Cost dis…

Cesium 展示——格式化时间控件信息

文章目录 需求分析需求 如图,我们在 Cesium 初始化后如图一展示,展示的是UTC的时间,而且是英文,如何将该控件进行格式化一下,展示当前的北京时间呢?分析 初始化 Cesiumconst fetchData = () => {

【LabVIEW学习篇 - 20】:人机界面交互设计04

文章目录 声音播放自定义控件自定义控件创建过程演示 选项卡、子面板、分隔栏 声音播放 有时系统检测到某些事件发生时,需要通过声音去传递信息,因此播放声音也是一种重要的交互方式,如系统检测到异常报警时,需要放报警声音来通知…

flutter Image

Flutter中,Image是一个用于显示图片的控件,可以显示网络图片、本地图片以及Asset中的图片。Image控件支持多种常见的图片格式,例如PNG、JPEG、GIF等。 const Image({super.key,required this.image,this.frameBuilder,this.loadingBuilder,th…

用“黑科技”书写“黑神话” | 基于RK3576核心板的三维扫描仪应用方案

《黑神话:悟空》作为国内首款3A游戏大作,上线仅10天全球发行量就已超过1700万份,不论您是否是游戏玩家,相信您都能在各种新闻、宣传和活动中感受到这款游戏的热度。在游戏的众多亮点中,“细腻的场景设计与对名胜古迹的…

3个永不过时的妙招,恢复苹果手机视频不是问题

苹果手机的视频功能较为出色,使用苹果手机拍摄的视频更加真实、清晰,因此许多人会选择使用苹果手机来记录生活点滴。但是,如果我们不小心删除了苹果手机视频,有什么方法可以让这些“生活的回忆”重现呢?别担心&#xf…

拆解一个不靠烧广告的宠物站的流水成长流史丨出海笔记

最近后台收到会员的私信,说宠物投放广告ROI很低。秉承互助分享精神,我们也加入寻找突破口,看看别人的宠物网站是怎么做的。 之前出海笔记分享过 找竞对不能只找头部卖家,所以我们这次选取的是一个接地气的宠物网站alldogboots进行…

torchvision数据集使用

文章目录 一、下载torchvision中的数据集文件二、断点知识点三、数据集形式建立四、展示数据集中的图片 一、下载torchvision中的数据集文件 这段代码是使用PyTorch的torchvision库来加载CIFAR-10数据集。 import torchvision train_set torchvision.datasets.CIFAR10(root&…

EasyExcel 文件导出:表头与内容样式简单设置

文章目录 EasyExcel 文件导出 - 最终效果使用的 EasyExcel的版本设置表头样式和内容样式设置自动列宽 EasyExcel 文件导出 - 最终效果 具体的效果可通过修改代码来自行调整。经过调整后的样式与默认样式相比,美观程度大幅提升。 下面是默认的样式。丑的一批。 使用…

FreeRTOS学习笔记(一)初认RTOS

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、RTOS的引入二、Free RTOS的基本内容2.1 FreeRTOS的特点2.2 Free RTOS编程风格2.3 Free RTOS的配置文件 前言 笔者在去年曾经开始过rtos的学习(虽…

模型中间部分的卷积可视化

整体代码如下: def forward(self, x):x self.conv1(x)x1 xout_img3 x1.squeeze()print(out_img3.shape)print("经过第一个卷积之后的输出:",x.shape) import yaml from omegaconf import OmegaConf from pathlib import Path from PIL imp…

景联文科技:提供高质量多模态数据标注,推动智能化转型

随着人工智能技术的快速发展,多模态数据标注成为推动智能系统更深层次理解和应用的关键技术之一。 作为行业领先的多模态数据标注服务商,景联文科技凭借其在技术、流程和人才方面的综合优势,推出了全面的多模态标注解决方案,助力…

C语言详细笔记--构造数据类型(共用体)

目录 一、共用体类型声明 二、共用体变量的定义 三、共用体变量的初始化 四、共用体变量的引用 一、共用体类型声明 共用体类型是一种多个不同类型数据共享存储空间的构造类型,即共用体变量的所以成员占用同一个存储空间,一般声明格式如下&#xff…