10分钟读懂Diffusion:图解Diffusion扩散模型

数据派THU 

本文通过图解的方式让大家快速了解 Diffusion 原理。

[ 导读 ]想必大家都听说过——图像领域大火的深度生成模型Diffusion Model,为了让大家快速了解 Diffusion 原理,这篇文章我们通过图解的方式。希望对你有所帮助,让你在学习和应用AIGC技术的道路上更进一步!

图片

1  Diffusion文字生成图片——整体结构

1.1 整个生成过程 

我们知道在使用 Diffusion 的时候,是通过文字生成图片,但是上一篇文章中讲的 Diffusion 模型输入只有随机高斯噪声和 time step。那么文字是怎么转换成 Diffusion 的输入的呢?加入文字后 Diffusion 又有哪些改变?下图可以找到答案。

图片

▲ 文字生成图片全过程

实际上 Diffusion 是使用 Text Encoder 生成文字对应的 embedding(Text Encoder 使用 CLIP 模型),然后和随机噪声 embedding,time step embedding 一起作为 Diffusion 的输入,最后生成理想的图片。我们看一下完整的图:

图片

▲ token embedding、随机噪声embedding、time embedding一起输入diffusion

上图我们看到了 Diffusion 的输入为 token embedding 和随机 embedding,time embedding 没有画出来。中间的 Image Information Creator 是由多个 UNet 模型组成,更详细的图如下:

图片

▲ 更详细的结构

可以看到中间的 Image Information Creator 是由多个 UNet 组合而成的,关于 UNet 的结构我们放在后面来讲。现在我们了解了加入文字 embedding 后 Diffusion 的结构,那么文字的 embedding 是如何生成的?接下来我们介绍下如何使用 CLIP 模型生成文字 embedding。 

1.2 使用CLIP模型生成输入文字embedding 

CLIP 在图像及其描述的数据集上进行训练。想象一个看起来像这样的数据集,包含 4 亿张图片及其说明:

图片

▲ 图像及其文字说明

实际上 CLIP 是根据从网络上抓取的图像及其文字说明进行训练的。CLIP 是图像编码器和文本编码器的组合,它的训练过程可以简化为给图片加上文字说明。首先分别使用图像和文本编码器对它们进行编码。

图片

然后使用余弦相似度刻画是否匹配。最开始训练时,相似度会很低。

图片

然后计算 loss,更新模型参数,得到新的图片 embedding 和文字 embedding。

图片

通过在训练集上训练模型,最终得到文字的 embedding 和图片的 embedding。有关 CLIP 模型的细节,可以参考对应的论文:

https://arxiv.org/pdf/2103.00020.pdf

1.3 UNet网络中如何使用文字embedding

前面已经介绍了如何生成输入文字 embedding,那么 UNet 网络又是如何使用的?实际上是在 UNet 的每个 ResNet 之间添加一个 Attention,而 Attention 一端的输入便是文字 embedding。如下图所示:

图片

更详细的图如下:

图片

2  扩散模型Diffusion

前面介绍了 Diffusion 是如何根据输入文字生成图片的,让大家有个大概的了解,接下来会详细介绍扩散模型 Diffusion 是如何训练的,又是如何生成图片的。 

2.1 扩散模型Duffison的训练过程

图片

▲ 扩散模型Diffusion

Diffusion 模型的训练可以分为两个部分: 

1. 前向扩散过程(Forward Diffusion Process)→图片中添加噪声;

2. 反向扩散过程(Reverse Diffusion Process)→去除图片中的噪声。

2.2 前向扩散过程

图片

前向扩散过程是不断往输入图片中添加高斯噪声。 

2.3 反向扩散过程

图片

反向扩散过程是将噪声不断还原为原始图片。

2.4 训练过程

图片

在每一轮的训练过程中,包含以下内容: 

1. 每一个训练样本选择一个随机时间步长 t。

2. 将 time step t 对应的高斯噪声应用到图片中。

3. 将 time step 转化为对应 embedding。

下面是每一轮详细的训练过程:

图片

2.5 从高斯噪声中生成原始图片(反向扩散过程)

图片

上图的 Sample a Gaussian 表示生成随机高斯噪声,Iteratively denoise the image 表示反向扩散过程,如何一步步从高斯噪声变成输出图片。可以看到最终生成的 Denoised image 非常清晰。

补充1:UNet模型结构

前面已经介绍了 Diffusion 的整个过程,这里补充以下 UNet 的模型结构,如下图所示。

图片

这里面 Downsampe、Middle block、Upsample 中都包含了 ResNet 残差网络。

补充2:Diffusion模型的缺点及改进版——Stable Diffusion

前面我们在介绍整个文字生成图片的架构中,图里面用的都是 Stable Diffusion,后面介绍又主要介绍的是 Diffusion。其实 Stable Diffusion 是 Diffusion 的改进版。 

Diffusion 的缺点是在反向扩散过程中需要把完整尺寸的图片输入到 U-Net,这使得当图片尺寸以及 time step t 足够大时,Diffusion 会非常的慢。Stable Diffusion 就是为了解决这一问题而提出的。后面有时间再介绍下 Stable Diffusion 是如何改进的。

补充3:UNet网络同时输入文字embedding

在第 2 节介绍 Diffusion 原理的时候,为了方便,都是没有把输入文字 embedding 加进来,只用了 time embedding 和随机高斯噪声,怎么把文字 embedding 也加进来可以参考前面的 1.3 节。

补充4:DDPM为什么要引入时间步长t

引入时间步长 t 是为了模拟一个随时间逐渐增强的扰动过程。每个时间步长 t 代表一个扰动过程,从初始状态开始,通过多次应用噪声来逐渐改变图像的分布。因此,较小的 t 代表较弱的噪声扰动,而较大的 t 代表更强的噪声扰动。 

这里还有一个原因,DDPM 中的 UNet 都是共享参数的,那如何根据不同的输入生成不同的输出,最后从一个完全的一个随机噪声变成一个有意义的图片,这还是一个非常难的问题。我们希望这个 UNet 模型在刚开始的反向过程之中,它可以先生成一些物体的大体轮廓,随着扩散模型一点一点往前走,然后到最后快生成逼真图像的时候,这时候希望它学习到高频的一些特征信息。由于 UNet 都是共享参数,这时候就需要 time embedding 去提醒这个模型,我们现在走到哪一步了,现在输出是想要粗糙一点的,还是细致一点的。 

所以加入时间步长 t 对生成和采样过程都有帮助。

补充5:为什么训练过程中每一次引入的是随机时间步长 t

我们知道模型在训练过程中 loss 会逐渐降低,越到后面 loss 的变化幅度越小。如果时间步长 是递增的,那么必然会使得模型过多的关注较早的时间步长(因为早期 loss 大),而忽略了较晚的时间步长信息。

©作者 | 绝密伏击

单位 | 奇虎360高级算法专家

参考文献:

https://medium.com/@steinsfu/stable-diffusion-clearly-explained-ed008044e07e

http://jalammar.github.io/illustrated-stable-diffusion/

https://pub.towardsai.net/getting-started-with-stable-diffusion-f343639e4931

https://zhuanlan.zhihu.com/p/597924053

https://zhuanlan.zhihu.com/p/590840909?

https://arxiv.org/abs/2103.00020

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

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

相关文章

3D Gaussian Splatting for Real-Time Radiance Field Rendering(慢慢啃,还是挺复杂的)

三个关键要素 从相机配准的过程中得到的稀疏点云开始,使用3D Gaussian表示场景; 3D Gaussian: 是连续体积辐射场能够防止不必要的空空间优化。对 3D Gaussion进行交叉优化和密度控制: 优化各向异性血方差对场景精确表示。使用快速可视感知渲染算法来进行快速的训练…

CVE-2024-27199 JetBrains TeamCity 身份验证绕过漏洞2

漏洞简介 TeamCity Web 服务器中发现了第二个身份验证绕过漏洞。这种身份验证旁路允许在没有身份验证的情况下访问有限数量的经过身份验证的端点。未经身份验证的攻击者可以利用此漏洞修改服务器上有限数量的系统设置,并泄露服务器上有限数量的敏感信息。 项目官网…

当HR问你:“什么事会让你有成就感”你该怎么回答?【文章底部添加进大学生就业交流群】

当HR问你“什么事会让你有成就感”时,你可以通过以下方式回答: 强调目标实现: 表达你在达成挑战性目标时感到的满足感。举例说明你在过去的工作或项目中如何设定并成功实现了目标。 强调对团队成功的贡献: 谈论你与团队合作取得成…

Caffeine--实现进程缓存

本地进程缓存特点 缓存在日常开发中起着至关重要的作用, 由于存储在内存中, 数据的读取速度非常快,能大量减少对数据库的访问,减少数据库的压力. 缓存分为两类: 分布式缓存, 例如Redis: 优点: 存储容量大, 可靠性更好, 可以在集群间共享缺点: 访问缓存存在网络开销场景: 缓存数…

c++: 引用能否替代指针? 详解引用与指针的区别.

文章目录 前言1. 引用和指针的最大区别:引用不能改变指向2. 引用和指针在底层上面是一样的3. 引用和指针在sizeof面前大小不同4. 有多级指针,没有多级引用5.引用是引用的实体,指针会向后偏移同一个类型的大小 总结 前言 新来的小伙伴如果不知道引用是什么?可以看我的上一篇文…

el-table-column嵌套el-form-item不能进行校验问题解决

项目为vue3elementPlus开发的项目 业务要求:table表格展示数据,其中有一行是ip地址可展示可修改,此处要求增加自定义校验规则 先看一下效果: 此处先描述一下,问题出在了哪里,我将el-table的data,使用一个…

日常004:对文件、目录拥有rwx权限后可以做什么?

日常004:对文件、目录拥有rwx权限后可以做什么? ‍ 1.rwx权限针对文件的内容,而非文件本身。 2.文件夹是特殊的文件,它的内容就是ls -a​的所有文件和文件夹 r 读取目录w 添加、删除、重命名文件x 进入目录 ‍ 删除文件使用的是所…

connection SQLException, url:jdbc ,errorCode 0, state 08S01

connection SQLException, url: jdbc:mysql://localhost:3306/itcast_health?useUnicodetrue&characterEncodingutf-8, errorCode 0, state 08S01 添加:&useSSLfalse 添加前 添加后: 查询数据库正常

7.5寸WIFI电子桌牌 PW75R_DM

产品型号 PW75R_DM 尺寸(mm) 190*152*45mm 显示技术 电子墨水屏双面显示 显示区域(mm) 163.2(H) * 97.92(V) 分辨率(像素) 800*480 外观颜色 银灰色 显示颜色 黑/白/红 视觉角度 180 工作温度 0 - 40℃ 电池容量 2000mAh 供电方式 锂电池供电(…

张驰咨询 - 推动新质生产力,新材料行业定制管理咨询解决方案

在这个快速变革的时代,张驰咨询携手各行业领军企业,共同打造新质生产力的未来。我们深入理解每个行业的发展现状及特点,洞察企业面临的痛点,用精准咨询方案,为新能源汽车、光伏产业、机器人、高端装备以及新材料和电子…

链表中的经典问题——回文链表

回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 题解一: 要判断一个单链表是否为回文链表,可以使用双指针和逆序链表的方法。具体步骤如下&…

AIGC笔记--Maya提取和修改FBX动作文件

目录 1--Maya数据解析 2--FBX SDK导出6D数据 3--6D数据映射和Maya可视化 完整项目代码:Data-Processing/FBX_SDK_Maya 1--Maya数据解析 在软件Maya中直接拖入FBX文件,可以播放和查看人体各个骨骼关节点的数据: 对于上图来说,…

基于yolov5的草莓成熟度检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于yolov5的草莓成熟度检测系统,系统既能够实现图像检测,也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili (一)简介 基于yolov5的草莓成熟度系统是在pytorch框架下实现的,这是一个完整的项目…

【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

C#,T检验(T -Test)的算法与源代码

1 T-Test 学生t检验(英语:Students t-test)是指虚无假设成立时的任一检定统计有学生t-分布的统计假说检定,属于母数统计。学生t检验常作为检验一群来自正态分配母体的独立样本之期望值的是否为某一实数,或是二群来自正态分配母体的独立样本之期望值的差是否为某一实数。举…

C语言从入门到熟悉------第二阶段

printf的用法 printf的格式有四种: (1)printf("字符串\n"); 其中\n表示换行的意思。其中n是“new line”的缩写,即“新的一行”。此外需要注意的是,printf中的双引号和后面的分号必须是在英文输入法下。双引…

六西格玛倡导者培训怎么选?这份攻略送给你

作为企业的中坚力量,成为一名合格的六西格玛倡导者,不仅是对个人能力的极大提升,更是对企业持续发展的重要保障。那么,如何选择适合自己的六西格玛倡导者培训课程呢?天行健Six Sigma咨询公司有建议如下: 一…

Java开发从入门到精通(一):Java的项目案例

Java大数据开发和安全开发 Java 案例练习案例一:买飞机票案例二:开发验证码案例三:评委打分案例四:数字加密案例五:数组拷贝案例六: 抢红包案例七:找素数案例八:模拟双色球[拓展案例] Java 案例练习 案例一:买飞机票 分析: 方法是需要接收数据?需要接收机票原价、当前月份、舱…

学习大数据,所需要Java基础(9)

文章目录 网络编程实现简答客户端和服务器端的交互编写客户端编写服务端 文件上传文件上传客户端以及服务器端实现文件上传服务器端实现(多线程)文件上传服务器端(连接池版本)关闭资源工具类 BS架构服务器案例案例分析BS结构服务器…

​《中华活页文选(传统文化教学与研究)》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答: ​问:《中华活页文选(传统文化教学与研究)》是什么级别的期刊? 答:国家级;主管单位:中国出版传媒股份有限公司;主办单位:中华书局有限公司 问:《中华活页文…