Diffusion:通过扩散和逆扩散过程生成图像的生成式模型

在当今人工智能大火的时代,AIGC 可以帮助用户完成各种任务。作为 AIGC 主流模型的 DDPM,也时常在各种论文中被提起。DDPM 本质就是一种扩散模型,可以用来生成图片或者为图片去噪。

扩散模型定义了一个扩散的马尔科夫过程,每一步逐渐将随机噪声添加到数据中,然后通过学习逆扩散过程恢复数据以实现从噪声中构建所需的数据样本。

在这里插入图片描述

本文不再按照论文解读的方式逐段记录,并且略过其中繁杂的数学证明,只专注于介绍 diffusion 模型本身,主要基于 DDPM。本文参考 What are Diffusion Models?、扩散模型(Diffusion Model)——由浅入深的理解,更多参考资料如下:

  • 模型图解:十分钟读懂Diffusion:图解Diffusion扩散模型;
  • 模型总结:由浅入深了解Diffusion Model、AIGC爆火的背后——扩散模型DDPM浅析;
  • 公式推导:Diffusion扩散模型大白话讲解,看完还不懂?不可能!;
  • 源码解读:【深度学习模型】扩散模型(Diffusion Model)基本原理及代码讲解;
  • 领域现状:读了14篇论文,终于会拿捏Diffusion了、扩散模型(Diffusion Model)首篇综述-Diffusion Models: A Comprehensive Survey of Methods and Applications、扩散模型(Diffusion Model)最新综述!;

目录

  • 一. 背景
  • 二. Diffusion 模型
    • 1. 扩散过程
    • 2. 逆扩散过程
    • 3. 训练方法
  • 三. 图片生成
  • 四. 实验
  • 五. 总结

一. 背景

随着人工智能生成能力的不断进步,内容生产已经从用户生成内容 (UGC) 到专业生成内容 (PGC) ,再到人工智能生成内容 (AIGC, AI generated content)。从 AI 作画到 AI 视频等各种 AI 生成任务层出不穷,预示着 AIGC 时代已然拉开帷幕。

在这里插入图片描述

AIGC 主要依赖一些生成式模型,如 GAN、VAE、Flow-based model 等,但这些模型都有一些自身的局限性,难以稳定且高质量地完成 AIGC 的任务。现在 AIGC 的主流模型使用的基本都是 DDPM,这是一种经典的 扩散模型 (diffusion model)。扩散模型定义了一个扩散的马尔科夫过程,每一步逐渐将随机噪声添加到数据中,然后通过学习逆扩散过程恢复数据以实现从噪声中构建所需的数据样本。与 VAE 和流模型不同,扩散模型是通过固定程序学习的,并且隐变量都具有与原始数据相同的维度。

马尔科夫过程:指具有马尔科夫性质的随机过程,即下一个状态的发生仅依赖于当前状态,而与过去状态的序列无关。这一性质也被称为 “无记忆性” 或 “马尔科夫性”。具体来说,考虑一个随机过程,其状态在不同时间点可以取不同的值。如果这个过程满足马尔科夫性,那么给定当前时刻的状态,未来的状态只与当前状态有关,而与过去状态的历史路径无关。这种性质可以表示为:
P ( X n + 1 = x ∣ X n = x n , X n − 1 = x n − 1 , … , X 0 = x 0 ) = P ( X n + 1 = x ∣ X n = x n ) P(X_{n+1} = x | X_n = x_n, X_{n-1} = x_{n-1}, \ldots, X_0 = x_0) = P(X_{n+1} = x | X_n = x_n) P(Xn+1=xXn=xn,Xn1=xn1,,X0=x0)=P(Xn+1=xXn=xn)

其实生成式建模的扩散思想早在 2015 年就在 diffusion probabilistic models 1 中被提出,但直到 2019 年斯坦福大学发布的 noise-conditioned score network 2 和 2020 年 Google Brain 发布的 denoising diffusion probabilistic models 3 改进了模型方法,才引发了 diffusion 模型的热潮。目前,包括 OpenAI 的 GLIDE 和 DALL-E 2,海德堡大学的 Latent Diffusion 和 Google Brain 的 ImageGen,都基于 diffusion 模型。

二. Diffusion 模型

Diffusion 模型的灵感来自非平衡热力学,通过定义一个扩散步骤的马尔科夫链:缓慢地将具有高斯分布的随机噪声添加到数据中,原始图片随着噪声的不断加入最后变为一个纯噪声图片;然后学习优化逆扩散过程,最终实现从噪声中构建所需的数据样本,反向过程可以用来生成图片。
在这里插入图片描述

如图所示,diffusion 模型包括前向和反向两个过程,无论是前向过程还是反向过程都是一个参数化的马尔科夫链 (Markov chain):

  • 前向过程 (forward process):又称为 扩散过程,图中 x 0 → x T x_0 \rightarrow x_T x0xT 的过程,表示 对图片逐渐加噪
  • 反向过程 (reverse process):又称为 逆扩散过程,图中 x T → x 0 x_T \rightarrow x_0 xTx0 的过程,表示 对图片去噪复原,可以用来生成图像;

1. 扩散过程

如上文所说,扩散过程 x 0 → x T x_0 \rightarrow x_T x0xT 对图片逐渐加噪。 x 0 x_0 x0 是从真实数据集中采样得到的一张图片,对 x 0 x_0 x0 逐渐添加具有高斯分布的噪声,图片逐会变得模糊,当 T T T 足够大时, x T x_T xT 为标准正态分布。由于每次添加的噪声是已知的,即 q ( x t + 1 ∣ x t ) q (x_{t+1} \mid x_t) q(xt+1xt) 是已知的,因此可以根据马尔科夫过程的性质,递归得到 q ( x T ∣ x t ) q (x_{T} \mid x_t) q(xTxt)
在这里插入图片描述

此处不再赘述公式推导的过程,详见 What are Diffusion Models?、扩散模型(Diffusion Model)——由浅入深的理解、由浅入深了解Diffusion Model、AIGC爆火的背后——扩散模型DDPM浅析、Diffusion扩散模型大白话讲解,看完还不懂?不可能! 等。

2. 逆扩散过程

如上文所说,逆扩散过程 x T → x 0 x_T \rightarrow x_0 xTx0 对图片去噪复原来生成图像。由于扩散过程的 T T T 取足够大时, x T x_T xT 为标准正态分布,因此 要想生成图片可以直接从标准正态分布的图像逆扩散回去就可以得到想要的图像。于是问题的关键就是学习逆扩散过程。

逆扩散不像前向过程每一步是固定的,逆扩散很难从后一张图像中去噪得到前一张图像,即 q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt) 是未知的。因此只能用 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 来近似代替 q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt),于是 逆扩散的学习过程就成了训练 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 网络,文中称为 U-Net。
在这里插入图片描述

虽然 q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt) 是未知的,但 q ( x t − 1 ∣ x 0 x t ) q (x_{t-1} \mid x_0x_t) q(xt1x0xt) 是可知的。因此我们可以用 q ( x t − 1 ∣ x 0 x t ) q (x_{t-1} \mid x_0x_t) q(xt1x0xt) 来指导 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 进行训练。此处不赘述公式推导的过程。

3. 训练方法

Diffusion 的损失函数进行了大量的数学推导,此处概述为一句话:对 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 的监督就是最小化 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) q ( x t − 1 ∣ x 0 x t ) q (x_{t-1} \mid x_0x_t) q(xt1x0xt) 的 KL 散度。
在这里插入图片描述

三. 图片生成

训练完 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 后,就可以通过逆扩散过程生成图像:
在这里插入图片描述

四. 实验

详见 https://arxiv.org/pdf/2006.11239.pdf 。

网上有很多 DDPM 的实现代码,包括论文中基于 tensorflow 的实现,还有基于 pytorch 的实现,感兴趣的可以自行复现。

五. 总结

Diffusion 其实就是一个扩散和逆扩散的过程:先给一张图片逐步加噪声直到变成纯粹的噪声,然后再对噪声进行去噪得到真实的图片。所谓的扩散模型就是让神经网络学习这个去除噪声的方法。Diffusion 和其他模型最大的区别是它的隐空间特征数和原图是同尺寸大小的,当然后面也有基于压缩的 latent diffusion model 4

现在大火的最 GLIDE5、DALLE26、Imagen7,以及一系列的 Image Editing 方法,也都是基于 diffusion。


  1. Sohl-Dickstein J, Weiss E, Maheswaranathan N, et al. Deep unsupervised learning using nonequilibrium thermodynamics[C]//International conference on machine learning. PMLR, 2015: 2256-2265. ↩︎

  2. Song Y, Ermon S. Generative modeling by estimating gradients of the data distribution[J]. Advances in neural information processing systems, 2019, 32. ↩︎

  3. Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models[J]. Advances in neural information processing systems, 2020, 33: 6840-6851. ↩︎

  4. Rombach, Robin, et al. “High-Resolution Image Synthesis with Latent Diffusion Models.” arXiv preprint arXiv:2112.10752 (2021). ↩︎

  5. Nichol, Alex, et al. “Glide: Towards photorealistic image generation and editing with text-guided diffusion models.” arXiv preprint arXiv:2112.10741 (2021). ↩︎

  6. Ramesh, Aditya, et al. “Hierarchical text-conditional image generation with clip latents.” arXiv preprint arXiv:2204.06125 (2022). ↩︎

  7. Saharia, Chitwan, et al. “Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding.” arXiv preprint arXiv:2205.11487 (2022). ↩︎

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

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

相关文章

视频监控平台EasyCVR多场景应用,AI视频分析技术助力行业升级转型

传统的视频监控系统建设,经常存在各方面的因素制约,造成管理机制不健全、统筹规划不到位、联网共享不规范,形成“信息孤岛”、“数据烟囱”。在监控系统的建设中缺乏统一规划,标准不统一、视频图像信息利用率低等问题日益突出。随…

手动将jar包导入本地Maven仓库

1、进入存放jar包的目录,可以先放进仓库底下 2、cmd回车 3、执行命令,看到BUILD SUCCESS就是成功了 -DgroupId、-DartifactId、-Dversion、-Dfile记得换成自己对应的 mvn install:install-file -DgroupIdcom.github.03 -DartifactIdonvif -Dversion1.0.7…

微信小程序自定义tabber凸起

一、实现效果 二、下载地址 下载地址 源码有错自己修改一下就行

网站优化SEO文章采集组合方法

为了在激烈的网络竞争中脱颖而出,SEO专业人士不断寻求创新的方法和技术。其中,SEO文章采集后重组是一项备受关注的技术,通过巧妙地整合和重新组织已有的信息,以提升网站在搜索引擎中的排名和曝光度。 SEO文章采集是这一技术的第一…

Vue+Element-ui实例_在form中动态校验tag标签

1.开发需求 在日常开发中,我们会遇到form表单的动态添加和校验,当我们需要在动态添加的内容中再次动态使用输入框的时候,就会变得很繁琐,我在网上找了很多案例,没有符合自己需求的内容,只好闲暇时间自己搞…

Vue3依赖注入

适用场景 尤其针对一个变量需要从顶层组件开始透传,途径很多个子组件最后在第n代子组件使用的时候。对于这些途经的子组件而言,它们不但不使用而且完全不关心该变量具体是什么,只是作为一个传递工具罢了。这种情况下,使用依赖注入…

论文复现代码《基于自适应哈夫曼编码的密文可逆信息隐藏算法》调试版

前言 本文展示论文《基于自适应哈夫曼编码的密文可逆信息隐藏算法》的复现代码。代码块的结构如下: 其中,每个代码块都包含了测试该代码块的功能的主函数代码,使用时可放心运行,前提是你按照这个包结构把文件命名改好&#xff0c…

重载、重写、重定义的辨析

C重载、重写、重定义 重载、重写、重定义对比一、重载(overload)二、重写 / 覆盖(override)三、重定义 / 隐藏(redefining) * 为什么在虚函数中不能使用 static 关键字?动态绑定(Dyn…

YOLOv5轻量化改进之MobileNetv3

目录 一、原理 二、代码 三、应用到YOLOv5 一、原理 我们提出了基于互补搜索技术和新颖架构设计相结合的下一代mobilenet。MobileNetV3通过硬件网络架构搜索(NAS)和NetAdapt算法的结合来调整到移动电话cpu,然后通过新的架构进步进行改进。本文开始探索自动搜索算法和网络设计…

map文件解析

Map文件内容分为以下五段: 1)Section Cross References:模块、段(入口)交叉引用;(ASR编译生成的map文件没有输出该段信息) 2)Removing Unused input sections from the image:移除未使用的模块&#xff1…

App测试中iOS和Android的差异

1、系统版本: iOS和Android系统版本的更新速度、使用人数比例以及功能的不同都可能导致应用程序在不同操作系统版本上的表现和兼容性存在区别。 例如,在iOS平台上,很多用户会更快地升级到最新版本的iOS系统,而在Android平台上&a…

智慧灯杆网关:引领城市智慧照明的未来

智慧灯杆网关,作为城市智慧照明系统的核心组件,正逐渐成为各大城市发展的关键所在。它的出现使得城市照明管理更加智能、高效,为未来城市的可持续发展奠定了坚实的基础。 智慧灯杆网关是一种集网络通信、数据处理、远程控制等功能于一体的设备…

一款适用于船载、化工园区、工厂的防水LoRa网关推荐

工业网关的实践应用场景非常广泛,比如:工业现场PLC、变频器、机器人等设备的远程维护;工程机械的远程维护和管理;车间设备与工艺系统的远程维护和管理;小区二次供水水泵的远程监测及控制;油气田和油井等现场…

Elk+Filebeat+Kafka实现日志收集

ElkFilebeatKafka实现日志收集(本机nginx) 部署Zookeeper 1.实验组件 #准备3台服务器做Zookeeper集群 20.0.0.10 20.0.0.20 20.0.0.30 2.安装前准备 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0#安装JDK yum install -y java-1.8.0-o…

springboot启动开启热部署

springboot启动开启热部署 手动方式 或者点idea上面的build->build project 自动方式 勾上Build project automatically 然后ctrl alt shift / 选择Registr 勾上就好了 新版idea可以在这里选 热部署范围设置 这是spring-boot-devtools起的作用,所以还…

VMware虚拟机安装和使用教程(附最新安装包+以ubuntu为例子讲解)

目录 一、VMware Workstation 17 Pro 简介 二、新功能与改进 三、安装教程 3.1、下载安装包 3.2、运行安装包 四、创建虚拟机 五、启动虚拟机 六、总结与展望 一、VMware Workstation 17 Pro 简介 VMware Workstation 17 Pro是VMware公司为专业用户打造的一款虚拟化软件…

echarts x轴y轴添加单位

function evaluationDistributionBar(data,id) { //data.series[0].data [1,31,1,1]//data.series[1].data [1,1,1,1]if(!data || data.series.length 0) returnfor(let i in data.series){//给柱状图动态修改颜色if(data.series[i].name 男){data.series[i].itemStyle {c…

分享5款靠谱好用,无广告不流氓的好软件

​ 话不多说,直入正题,全都是靠谱好用,无广告不流氓的好软件,可以先点赞收藏,以后慢慢用。 1.动态壁纸软件——Lively Wallpaper ​ Lively Wallpaper是一款可以将视频、GIF、网页、游戏等内容作为桌面壁纸的软件&am…

XC1136 功率传输(PD) Sink控制器IC PD诱骗器芯片 输出可调 可支持多个

XC1136是一款功率传输(PD) Sink控制器IC。XC1136可以从符合Type-CPD协议的电源中请求最大或指定电压。输入电压范围:3V~28V支持USBType-C规范版本1.3支持USB PD2.0和PD3.0通讯协议,最多支持七个电源对象 该XC1136内置拉低电阻CC1和CC2引脚。当XC1136连接到T…

Java —— ArrayList与顺序表

目录 1. 线性表 2. 顺序表 接口的实现 3. ArrayList简介 3.1 ArrayList介绍 3.2 ArrayList的构造方法 4. ArrayList的扩容机制 5. ArrayList的常见操作 6. ArrayList的遍历 7. 例题 8. ArrayList的具体使用 8.1 简单的洗牌算法 8.2 杨辉三角 9. ArrayList的问题及思考 1. 线性表…