【扩散模型】5、Diffusion models beat GAN | 使用类别引导图像生成

本文主要是介绍【扩散模型】5、Diffusion models beat GAN | 使用类别引导图像生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

论文:Diffusion models beat GAN on image Synthesis

代码:https://github.com/openai/guided-diffusion

出处:OPENAI | NIPS2021

时间:2021

贡献:

  • 在本文章之前,扩散模型生成的图片已经非常逼真了,但是 inception score(IS FID等)不如GAN,如何提供一些人为指导来帮助模型采样和学习,提高分数和采样速度就是本文的出发点
  • 作者引入了 classifier guidance 模式,将扩散模型变成了 class-conditional 任务,使用分类梯度来指导扩散模型的生成,平衡了多样性和保真性,降低了扩散模型的采样时间,同时能提高高分辨率情况下的采样效果

一、背景

在近几年来,生成式模型已经能生成类似人类的自然语音、声音、音乐,也能生成高质量的图像

GAN[19] 在当时来说是很多图像生成任务的 SOTA,其评判标准都是例如 FID、Inception Score、Precision 等简单标准

但这些标准很难完全捕捉到图像之间的差异,而且 GAN 也被证明捕捉到的差异性比很多 likelihood-based 方法能够捕捉到的更少一些,而且 GAN 比较难以训练,一旦没有仔细的设置参数和规则,就容易崩塌

扩散模型就是 likelihood-based 方法的一种,其通过逐步从图像信号中移除噪声来生成图片,其训练的目标函数可以被看做一个重参数化的变分下届,扩散模型在 CIFAR-10 上已经得到了 SOTA,但是在 LSUN 和 ImageNet 这些比较难的数据集上比 GAN 稍微落后一点。

作者认为,扩散模型和 GAN 之间的差距主要由于下面两个因素,也是基于这两个因素,作者对 diffusion model 进行了改进:

  • GAN 的模型结构已经被探索和改进了很多了
  • GAN 能更好的平衡多样性和保真度,产生高质量的样本,但不覆盖整个分布

在这里插入图片描述

二、方法

2.1 扩散模型回顾

扩散模型是通过从一个渐进加噪声的逆过程来采样的,也就是说,最开始的时候从噪声 x T x_T xT 中开始采样,然后逐步得到噪声更少的 x T − 1 x_{T-1} xT1 x T − 2 x_{T-2} xT2 … ,直到得到最终的采样结果 x 0 x_0 x0

扩散模型就是在学习如何从 x t x_t xt 得到上一时刻的 x t − 1 x_{t-1} xt1,扩散模型可以被建模为 ϵ θ ( x t , t ) \epsilon_{\theta}(x_t, t) ϵθ(xt,t),表示预测到的当前时刻的噪声,训练目标函数是 ∣ ∣ ϵ θ ( x t , t ) − ϵ ∣ ∣ 2 ||\epsilon_{\theta}(x_t, t) - \epsilon||^2 ∣∣ϵθ(xt,t)ϵ2 ϵ \epsilon ϵ 是真实噪声

2.2 简单的质量测评标准

1、Inception Score(IS)

Inception Score (IS) 是用来衡量一个模型在生成单个类别的样本时能否很好地捕获整个 ImageNet 类别分布

然而,该指标有一个缺点,它并不奖励覆盖整个分布的行为,也不会奖励在一个类别中捕获很多多样性的行为,如果模型记住全数据集一小部分,仍然会有高 IS

2、FID

为了比 IS 更好地捕获多样性,Heusel等人[23] 提出了 Fréchet Inception Distance (FID),他们认为 FID 与人类判断更一致。FID 提供了一个对两个图像分布在 Inception-V3 [62] 潜空间中距离的对称度量

Nash 等人[42] 提出了 sFID 作为使用空间特征而非标准汇集特征的 FID 版本。他们发现这种指标更好地捕获了空间关系, 奖励具有连贯高级结构的图像分布

作者使用 FID 作为评判指标,因为其能同时捕捉样本的多样性和保真性

作者还使用了 Precision 或 IS 来衡量保真性,使用 Recall 来衡量多样性或分布范围

2.3 模型架构改进

作者为了获得简单有效的模型架构,进行了多种不同的架构消融实验

因为扩散模型使用的是 U-Net,所以作者主要对 U-Net 的结构进行了改进

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

虽然增加模型深度能提高效果,但训练时长增加了,所以不做模型深度的改变

作者还对比了使用不同 head 的效果,最终使用了 64
在这里插入图片描述
在这里插入图片描述

2.4 Classifier Guidance

GAN 用于条件合成时,除了精心设计结构外,还会使用很多 class labels,所以作者也想使用分类器来提升扩散模型的效果

方法:作者会在带噪声的图像 x t x_t xt 上训练一个分类器,然后使用梯度来指导扩散模型的采样过程来朝着对应类别进行采样,作者这里使用的 ImageNet

本文方法不用额外训练扩散模型,直接在原有训练好的扩散模型上,通过外部的分类器来引导生成期望的图像。唯一需要改动的地方其实只有 sampling 过程中的高斯采样的均值,也即采样过程中,期望噪声图像的采样中心越靠近判别器引导的条件越好。

使用分类模型对生成的图片进行分类,得到预测分数与目标类别的交叉熵,将其对带噪图像求梯度用梯度引导下一步的生成采样。

在这里插入图片描述

三、效果

在这里插入图片描述

在这里插入图片描述

这篇关于【扩散模型】5、Diffusion models beat GAN | 使用类别引导图像生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/367719

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删