扩散模型初探:原理及应用-程序员宅基地

 Datawhale干货 

作者:张燚钧,单位:中国移动云能力中心

联系方式:[email protected]

审校:黄元帅

最近,谷歌研究团队提出了 Imagic 模型,其具备基于文本对图像进行编辑的能力,效果堪比 PS。这种融合文本和图像的多模态模型在近几年发展迅猛,DALLE、DALLE-2、Imagen 等多模态模型层出不穷。

如图1所示,目前这些多模态模型生成图像的成像效果已经非常清晰、逼真。一些游戏厂商已经尝试使用文本生成图像技术生成二次元图像,插画师这一职业甚至在未来会被AI部分取代。“扩散模型”(Diffusion model)为这些多模态模型中图像生成能力作出了主要贡献。本文将从最传统的生成模型自动编码机开始,对扩散模型的原理进行梳理,并且参考几个多模态模型探索扩散模型和预训练大模型的融合方法。

167cb161b5e83686cee86a52f2607d41.png

▲ 图1 基于扩散模型的文本-图像生成模型效果展示

98ef2a87550fb9424059300dbab273f5.png

扩散模型原理

自动编码机(Auto Encoder,AE)是早期较为简单的生成模型,通过一个编码器将输入 编码成隐变量 ,再通过一个解码器将 解码成重构样本 。一般来说,优化目标是最小化 与 之间的误差。通过这个自动编码的过程,可以得到一个输入样本 的特征 ,也就是隐变量。

285f849f4a64a62ed69d710aef62f521.png

▲ 图2 自动编码机

通过神经网络可以学习到每个输入样本的特征,并根据此特征将输入还原出来。但是,这种固定特征,然后还原的实现方式导致 AE 容易过拟合。当模型遇到没有出现过的新样本时,有时得不到有意义的生成结果。

变分自动编码机(Variational Auto Encoder,VAE)则是在 AE 的基础上,对隐变量 施加限制。使得 符合一个标准正态分布[1]。这样的好处是,当隐变量 是趋向于一个分布时,对隐变量进行采样,其生成的结果可以是类似于输入样本,但是不完全一样的数据。这样避免了 AE 容易过拟合的问题。VAE 通常用于数据生成,一个典型的应用场景就是通过修改隐变量,生成整体与原样本相似,但是局部特征不同的新人脸数据。

928901b1d4b02e1573479ff44a4d57f4.png

▲ 图3 变分自动编码机

具体来说,是通过变分推断这一数学方法将 和 后验概率设置为标准高斯分布,同时约束生成的样本尽量与输入样本相似。这样通过神经网络可以学习出解码器,也就是 。通过这样的约束训练之后,可以使得隐变量 符合标准高斯分布。当我们需要生成新的样本时,可以通过采样隐变量 让变分自动编码机生成多样同时可用的样本。

整个学习过程中,变分自动编码机都在进行“生成相似度”和“生成多样性”之间的一个 trade off。当隐变量 的高斯分布方差变小趋向为 0 时,模型接近 AE。此时模型的生成样本与输入样本相似度较高,但是模型的样本生成采样范围很小,生成新的可用样本的能力不足。

对抗生成网络(Generative Adversarial NetworksGAN)与 VAE 和 AE 的“编码器-解码器”结构不同。如图4中所示,GAN没有encoder这一模块(图中被阴影遮盖)。GAN 没有 encoder 这一模块。GAN 直接通过生成网络(这里可以理解为 decoder)和一个判别网络(discriminator)的对抗博弈,使得生成网络具有较强的样本生成能力。GAN 可以从随机噪声生成样本,这里可以把随机噪声按照 VAE 中的隐变量理解。

ff7ae6cf7b899bf1499aaec86c1eb4e5.png

▲ 图4 对抗生成网络

而新出现的扩散模型(Denoising Diffusion Probabilistic Model,DDPM),其实在整体原理上与 VAE 更加接近 [2-7]。 是输入样本,比如是一张原始图片,通过  步前向过程(Forward process)采样变换,最后生成了噪声图像 ,这里可以理解为隐变量 。这个过程是通过马尔科夫链实现的。

b99271447c60aa25377e27c625c14370.png

▲ 图5 扩散模型

在随机过程中,有这样一个定理。一个模型的状态转移如果符合马尔科夫链的状态转移矩阵时,当状态转移到一定次数时,模型状态最终收敛于一个平稳分布。这个过程也可以理解为溶质在溶液中溶解的过程,随着溶解过程的进行,溶质(噪声)最终会整体分布到溶液(样本)中。这个过程可以类比理解为 VAE 中的 encoder。而逆向过程(Reverse process)可以理解为 decoder。通过  步来还原到原始样本。

以上几种生成网络,都涉及了大量的数学推导过程。这里为了方便读者理解,只对模型整体结构功能进行解释。

afc3157b207cde91799cadb17b7b2903.png

应用:扩散模型与预训练模型结合

下面通过几个目前性能优秀的生成模型的例子,理解一下扩散模型与如何与其他预训练模型结合,实现模型优秀的生成能力的。

DALLE-1 模型

ac390a2f2d8e2d06ebe5bb3cf88360a1.png

▲ 图6 DALLE-1模型图

DALLE-1[8] 模型结构如图所示,首先图像在第一阶段通过 dVAE(离散变分自动编码机)训练得到图像的 image tokens。文本 caption 通过文本编码器得到 text tokens。Text tokens 和 image tokens 会一起拼接起来用作 Transformer 的训练。这里 Transformer 的作用是将 text tokens 回归到 image tokens。当完成这样的训练之后,实现了从文本特征到图像特征的对应。

在生成阶段,caption 通过编码器得到 text tokens,然后通过 transformer 得到 image tokens,最后 image tokens 再通过第一阶段训练好的 image decoder 部分生成图像。因为图像是通过采样生成,这里还使用了 CLIP 模型对生成的图像进行排序,选择与文本特征相似度最高的图像作为最终的生成对象。

DALLE-2 模型

f127a55e3da9ea6780e6257301a9d2a2.png

▲ 图7 DALLE-2模型图

DALLE-2[9]模型结构如图 6 所示。其中的 text encoder 和 image encoder 就是用 CLIP 中的相应模块。在训练阶段通过训练 prior 模块,将 text tokens 和  image tokens 对应起来。同时训练 GLIDE 扩散模型,这一步的目的是使得训练后的 GLIDE 模型可以生成保持原始图像特征,而具体内容不同的图像,达到生成图像的多样性。

当生成图像时,模型整体类似在 CLIP 模型中增加了 prior 模块,实现了文本特征到图像特征的对应。然后通过替换 image decoder 为 GLIDE 模型,最终实现了文本到图像的生成。

Imagen

12816981c7718f1a29cba9dc6154b457.png

▲ 图8 Imagen模型结构图

Imagen [10] 生成模型还没有公布代码和模型,从论文中的模型结构来看,似乎除了文本编码器之外,是由一个文本-图像扩散模型来实现图像生成和两个超分辨率扩散模型来提升图像质量。

Imagic

9995efae11d5c2b1f4cd6da58fc37635.png

▲ 图9 Imagic原理图

最新的 Imagic 模型 [11]号称可以实现通过文本对图像进行 PS 级别的修改内容生成。目前没有公布模型和代码。从原理图来看,似乎是通过在文本-图像扩散模型的基础上,通过对文本嵌入的改变和优化来实现生成内容的改变。如果把扩散模型替换成简单的 encoder 和 decoder,有点类似于在 VAE 模型上做不同人脸的生成。只不过是扩散模型的生成能力和特征空间要远超过 VAE。

Stable diffusion

Stable diffusion [12]是由 Stability AI 公司开发并且开源的一个生成模型。图 10 是它的结构图。其实理解了扩散模型之后,对 Stable diffusion 模型的理解就非常容易了。

d4e6ed9237daed2147f102eb3b5561ba.png

▲ 图10 Stable diffusion结构图

朴素的 DDPM 扩散模型,每一步都在对图像作“加噪”、“去噪”操作。而在 Stable diffusion 模型中,可以理解为是对图像进行编码后的 image tokens 作加噪去噪。而在去噪(生成)的过程中,加入了文本特征信息用来引导图像生成(也就是图中的右边 Conditioning 部分)。这部分的功能也很好理解,跟过去在 VAE 中的条件 VAE 和 GAN 中的条件 GAN 原理是一样的,通过加入辅助信息,生成需要的图像。

f17c08d1d6577197aeb8f0c33d1ff936.png

总结

如果略去比较复杂的数学推导部分,我们可以发现其实扩散模型以及目前这些基于扩散模型的生成模型,其整体结构的原理并不复杂。扩散模型为我们提供了一个通过大规模训练具备的极其丰富的特征空间、由此获得强大生成能力的模型(如图11所示)。

d8b89060817ea0dfd43cf5aaeed49a3b.png

▲ 图11 随着模型参数量增大,生成图像的质量和语义相似度越来越高

同样受益于近年来大规模预训练NLP模型如BERT,多模态模型如CLIP等,研究人员可以在较为完备的图像特征空间中,将语义特征与图像特征对齐,从而实现多样、定制化的图像生成。目前基于扩散模型的生成模型还存在诸如面部细节、手部细节生成出错(图12),以及对一些文本在具体语境下的理解出错等问题[13]。未来,生成模型更加细粒度的定制化以及自然图像的精细生成仍是这个领域研究者们可以继续攀越的高峰。

32eda777588b718b03e749b465a43d1a.png

▲ 图12 尝试用stable diffusion开源版本生成的图像

outside_default.png

参考文献

outside_default.png

[1]   苏剑林. 变分自编码器VAE:原来是这么一回事https://zhuanlan.zhihu.com/p/34998569.

[2]   HeptaAI. 如何通俗理解扩散模型?https://zhuanlan.zhihu.com/p/563543020.

[3]   苏剑林. 生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼https://zhuanlan.zhihu.com/p/535042237.

[4]   YANG L, ZHANG Z, SONG Y, et al. Diffusion Models: A Comprehensive Survey of Methods and Applications[Z]. arXiv, 2022(2022–10–23). DOI:10.48550/arXiv.2209.00796.

[5]   ULHAQ A, AKHTAR N, POGREBNA G. Efficient Diffusion Models for Vision: A Survey[J]. arXiv, 2022(2022–10–20). DOI:10.48550/arXiv.2210.09292.

[6]   CAO H, TAN C, GAO Z, et al. A Survey on Generative Diffusion Model[J]. arXiv, 2022(2022–10–19). DOI:10.48550/arXiv.2209.02646.

[7]   CROITORU F-A, HONDRU V, IONESCU R T, et al. Diffusion Models in Vision: A Survey[J]. arXiv, 2022(2022–10–06). DOI:10.48550/arXiv.2209.04747.

[8]   RAMESH A, PAVLOV M, GOH G, et al. Zero-Shot Text-to-Image Generation[J]. arXiv, 2021(2021–02–26). DOI:10.48550/arXiv.2102.12092.

[9]   RAMESH A, DHARIWAL P, NICHOL A, et al. Hierarchical Text-Conditional Image Generation with CLIP Latents[J]. arXiv, 2022(2022–04–12). DOI:10.48550/arXiv.2204.06125.

[10] SAHARIA C, CHAN W, SAXENA S, et al. Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding[J]. arXiv, 2022(2022–05–23). DOI:10.48550/arXiv.2205.11487.

[11] KAWAR B, ZADA S, LANG O, et al. Imagic: Text-Based Real Image Editing with Diffusion Models[Z]. arXiv, 2022(2022–10–17). DOI:10.48550/arXiv.2210.09276.

[12] ROMBACH R, BLATTMANN A, LORENZ D, et al. High-Resolution Image Synthesis with Latent Diffusion Models[Z]. arXiv, 2022(2022–04–13). DOI:10.48550/arXiv.2112.10752.

[13] 地球人研究报告. 为什么AI画不了美少女吃面?https://www.huxiu.com/article/696641.html.

60787573c29e64474bcf441383ba66f7.png

整理不易,三连

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Datawhale/article/details/127662227

智能推荐

class和struct的区别-程序员宅基地

文章浏览阅读101次。4.class可以有⽆参的构造函数,struct不可以,必须是有参的构造函数,⽽且在有参的构造函数必须初始。2.Struct适⽤于作为经常使⽤的⼀些数据组合成的新类型,表示诸如点、矩形等主要⽤来存储数据的轻量。1.Class⽐较适合⼤的和复杂的数据,表现抽象和多级别的对象层次时。2.class允许继承、被继承,struct不允许,只能继承接⼝。3.Struct有性能优势,Class有⾯向对象的扩展优势。3.class可以初始化变量,struct不可以。1.class是引⽤类型,struct是值类型。

android使用json后闪退,应用闪退问题:从json信息的解析开始就会闪退-程序员宅基地

文章浏览阅读586次。想实现的功能是点击顶部按钮之后按关键字进行搜索,已经可以从服务器收到反馈的json信息,但从json信息的解析开始就会闪退,加载listview也不知道行不行public abstract class loadlistview{public ListView plv;public String js;public int listlength;public int listvisit;public..._rton转json为什么会闪退

如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet-程序员宅基地

文章浏览阅读219次。如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet

系统项目报表导出功能开发_积木报表 多线程-程序员宅基地

文章浏览阅读521次。系统项目报表导出 导出任务队列表 + 定时扫描 + 多线程_积木报表 多线程

ajax 如何从服务器上获取数据?_ajax 获取http数据-程序员宅基地

文章浏览阅读1.1k次,点赞9次,收藏9次。使用AJAX技术的好处之一是它能够提供更好的用户体验,因为它允许在不重新加载整个页面的情况下更新网页的某一部分。另外,AJAX还使得开发人员能够创建更复杂、更动态的Web应用程序,因为它们可以在后台与服务器进行通信,而不需要打断用户的浏览体验。在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于在不重新加载整个页面的情况下,从服务器获取数据并更新网页的某一部分。使用AJAX,你可以创建异步请求,从而提供更快的响应和更好的用户体验。_ajax 获取http数据

Linux图形终端与字符终端-程序员宅基地

文章浏览阅读2.8k次。登录退出、修改密码、关机重启_字符终端

随便推点

Python与Arduino绘制超声波雷达扫描_超声波扫描建模 python库-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏51次。前段时间看到一位发烧友制作的超声波雷达扫描神器,用到了Arduino和Processing,可惜啊,我不会Processing更看不懂人家的程序,咋办呢?嘿嘿,所以我就换了个思路解决,因为我会一点Python啊,那就动手吧!在做这个案例之前先要搞明白一个问题:怎么将Arduino通过超声波检测到的距离反馈到Python端?这个嘛,我首先想到了串行通信接口。没错!就是串口。只要Arduino将数据发送给COM口,然后Python能从COM口读取到这个数据就可以啦!我先写了一个测试程序试了一下,OK!搞定_超声波扫描建模 python库

凯撒加密方法介绍及实例说明-程序员宅基地

文章浏览阅读4.2k次。端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。2.使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。_凯撒加密

工控协议--cip--协议解析基本记录_cip协议embedded_service_error-程序员宅基地

文章浏览阅读5.7k次。CIP报文解析常用到的几个字段:普通类型服务类型:[0x00], CIP对象:[0x02 Message Router], ioi segments:[XX]PCCC(带cmd和func)服务类型:[0x00], CIP对象:[0x02 Message Router], cmd:[0x101], fnc:[0x101]..._cip协议embedded_service_error

如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类_vs添加mfc库-程序员宅基地

文章浏览阅读2.4k次,点赞9次,收藏13次。有时候我们在MFC项目开发过程中,需要用到一些微软已经提供的功能,如VC++使用EXCEL功能,这时候我们就能直接通过VS2019到如EXCEL.EXE方式,生成对应的OLE头文件,然后直接使用功能,那么,我们上篇文章中介绍了vs2017及以前的版本如何来添加。但由于微软某些方面考虑,这种方式已被放弃。从上图中可以看出,这一功能,在从vs2017版本15.9开始,后续版本已经删除了此功能。那么我们如果仍需要此功能,我们如何在新版本中添加呢。_vs添加mfc库

frame_size (1536) was not respected for a non-last frame_frame_size (1024) was not respected for a non-last-程序员宅基地

文章浏览阅读785次。用ac3编码,执行编码函数时报错入如下:[ac3 @ 0x7fed7800f200] frame_size (1536) was not respected for anon-last frame (avcodec_encode_audio2)用ac3编码时每次送入编码器的音频采样数应该是1536个采样,不然就会报上述错误。这个数字并非刻意固定,而是跟ac3内部的编码算法原理相关。全网找不到,国内音视频之路还有很长的路,音视频人一起加油吧~......_frame_size (1024) was not respected for a non-last frame

Android移动应用开发入门_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量-程序员宅基地

文章浏览阅读230次,点赞2次,收藏2次。创建Android应用程序一个项目里面可以有很多模块,而每一个模块就对应了一个应用程序。项目结构介绍_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量

推荐文章

热门文章

相关标签