💙个人主页: GoAI |💚 公众号: GoAI的学习小屋 | 💛交流群: 704932595 |💜个人简介 : 掘金签约作者、百度飞桨PPDE、领航团团长、开源特训营导师、CSDN、阿里云社区人工智能领域博客专家、新星计划计算机视觉方向导师等,专注大数据与人工智能知识分享。
💻文章目录
《深度浅出AIGC(二):扩散模型原理》(本篇)
深度浅出AIGC(二):扩散模型原理
💻本篇导读:本系列主要介绍AIGC方向文章,包括stable diffusion扩散模型介绍、文生图、图生视频等方向理论与基础实战,分享AIGC开源工具的使用,该系列适合方便小白学习,本篇为第二篇《 深度浅出AIGC(二):扩散模型原理》。
Stable Diffusion 总结
以最简单的形式来说,Stable Diffusion是一个文本到图像的生成模型。给它一个文本指令作为输入,它将返回给你一张与输入指令匹配的图像。
扩散模型(Diffusion Model)
稳定扩散模型(Stable Diffusion)属于深度学习模型中的一个大类,即扩散模型。它们属于生成式模型,这意味着它们是被设计用于根据学习内容来生成相似的新的数据的。对于稳定扩散模型而言,新的数据即为图像数据。
为什么称之为扩散模型?因为模型中使用的数学看起来与物理学中的扩散公式非常相似。我们来了解一下这个模型的理念。
假设我们只使用猫和狗这两类图像来训练这个稳定扩散模型。如下图所示,图中左侧曲线的两个峰值代表了猫与狗这两组图像。
前向扩散过程将图片变成噪声图
前向扩散(Forward diffusion )
所谓前向扩散(forward diffusion)过程就是向训练图像中不断地添加噪声,从而使其逐渐变为一张毫无意义的纯噪声图。在我们的例子中,前向扩散过程会将猫与狗的图片转变为噪声图。最终你将无法从得到的噪声图中分别出原来的图究竟是猫还是狗(这点很重要)。
这就好比往一杯水中滴入一滴墨水。墨滴将在水中扩散,在几分钟之后,它将随机均匀的遍布于整杯水中,你将再也无法从这杯水中看出原来的墨滴究竟是从杯子的中心还是边缘滴入的了。
下图演示了一张图像经由前向扩散逐渐变为纯噪声图的过程。
ng)
一张猫图的前向扩散过程
逆向扩散(Reverse diffusion)
现在来到神奇的部分了。如果我们能够逆转扩散的过程会怎样呢?就像影片倒带一样,在时间线上逆向移动,那我们最终将会看到墨滴最初是从哪里滴落的了。
逆向扩散过程将图片从噪声图中还原
从一张完全无意义的噪声图,逆向扩散过程使其还原为一张猫【或】狗的图像,这就是逆向扩散的核心理念。
从技术上来说,每个扩散过程都有两个分量:(1)漂移或引导的方向;(2)随机的方向。逆向扩散会将结果导向猫或者狗的图像,但并不会是二者之间的图像。这也是为什么我上面说,逆向扩散的结果将会是猫或者狗。
训练是是如何完成的
逆向扩散的理念是如此的高明与优雅,但是真正有价值的问题是,怎么来实现它呢?
为了将扩散过程逆转,我们需要知道到底有多少噪声被添加到了图像中。而这个问题的答案,将会由一个经过训练的神经网络模型来预测解答。在Stable Diffusion模型中,这个模块被称为噪声预测器(noise predictor)。训练的过程如下:
- 选择一张训练图片,比如一张狗或猫的图像
- 生成一个随机的噪声图
- 将这张噪声图像原始训练图片中添加特定次数,使图像变得嘈杂
- 以正确答案为基准,通过调试参数,训练噪声预测器最终能够识别出究竟有多少次噪声被添加到了这张图片中。【译者注:即一个标准的有判定的神经网络训练过程】
噪声是逐步添加到图像中的,噪声预测器将预估每一步中累计被添加噪声的总和
在训练完成后,我们将得到一个能够估计出有多少噪声被添加到了一张图像中的噪声预测器。
逆向扩散(Reverse diffusion)
现在我们有了一个噪声预测器,我们将怎样使用它呢?
我们将首先生成一张完全随机的图像,并让噪声预测器告诉我们这张图像中被添加了哪些噪声。随后我们就可以将噪声预测器给出的噪声图像从原始图像中剔除出去【译注:即反向的图像叠加操作】。重复以上步骤几次,我们即可以得到一张猫或是狗的图像了。
逆向扩散通过将预测的每一步的噪声逐渐从图中减去,最终得以还原图像
你可能注意到了,按上面的描述,我们所实现的逆向扩散过程没法控制最终结果是一个猫还是狗的图像。在后面的"调节"章节中我们会着重来论述这一点。就目前我们所介绍的内容来说,图像的生成是无条件的(unconditioned)
本篇总结: 本篇《深度浅出AIGC(二):扩散模型原理》主要总结扩散模型原理,包括前向扩散、后向扩散及训练如何完成,后续将继续介绍AIGC相关内容。
参考资料:
- 《扩散模型从原理到实战》
- stable-diffusion-art