Stable Diffusion 是一种从文本生成 AI 图像的潜空间扩散模型,它不是在高维图像空间中操作,而是首先将图像压缩到潜在空间(latent space
)中。
我们将深入了解它的工作机制。知道工作机制有什么用?除了其本身就是个非常值得了解的内容外,理解它的内部运作也将会使你成为一个更好的AI绘画艺术家。你将可以合理地运用这个工具来得到更加精确的图像。
文生图(text-2-image
)和图生图(image-2-image
)有什么不同?什么是CFG值?什么是降噪强度(denoising strength
)?你将在本文中找到答案
Stable Diffusion能做什么
简单地说,Stable Diffusion是一种文本到图像的模型。给它一个文本提示,它将返回与文本匹配的AI图像。
Stable diffusion将文本指令转化为图像
扩散模型(Diffusion Model)
稳定扩散模型(Stable Diffusion)属于深度学习模型中的一个大类,即扩散模型。它们是生成式模型,这意味着它们旨在生成类似于它们在训练中看到的新数据,在 Stable Diffusion中,新数据是新图像。
为什么叫扩散模型?因为它的数学看起来很像物理学中的扩散。我们来了解一下这个模型的理念。
前向扩散(Forward diffusion )
假设我训练了一个只有两种图像的扩散模型:猫和狗。在下图中,左边的两个峰值(红色箭头标注)代表猫和狗的图像组。
前向扩散过程将图片变成噪声图
所谓前向扩散(forward diffusion)过程就是向训练图像中不断地添加噪声,从而使其逐渐变为一张毫无意义的纯噪声图。在我们的例子中,正向过程将任何猫或狗图像转换为噪声图像。最终,你将无法分辨它们最初是狗还是猫。(这很重要)
这就像一滴墨水滴进一杯水里。墨滴在水中扩散。几分钟后,它会随机分布在整个水中。你再也无法分辨它最初是落在中心还是边缘附近。
下面是图像进行前向扩散的示例,猫的形象变成了随机噪音。
一张猫图的前向扩散过程
逆向扩散(Reverse diffusion)
现在是令人兴奋的部分。如果我们能逆转扩散呢?就像向后播放视频一样,时光倒流。我们将找到最初添加墨滴的位置。
逆向扩散过程将图片从噪声图中还原
从充满噪音、无意义的图像开始,逆向扩散可以恢复猫或狗的图像。这是你想扩散的核心概念。
从技术上讲,每个扩散过程都有两个部分:(1)漂移drift
和(2)随机运动random motion
。逆向扩散会最终结果会导向(drift torwards)猫或者狗,但并不会是二者之间的图像。
训练是如何完成的?
逆向扩散的理念无疑是聪明而优雅的,但是真正有价值的问题是“怎么实现它?”
为了逆转扩散,我们需要知道图像中增加了多少噪声。答案是,将会由一个经过训练的神经网络模型来预测添加的噪声。在Stable Diffusion模型中,这个模块被称为噪声预测器(noise predictor),它是U-Net架构的卷积神经网络模型。其训练过程如下:
-
选择一张训练图像,比如一张猫的照片
-
生成随机噪声图像
-
将噪音图像添加到训练图像中
-
通过不断与正确结果对比,并自动调整参数,最终让噪声预测器识别出添加了多少噪声
噪声是逐步添加到图像中的,噪声预测器将预估每一步中累计被添加噪声的总和
经过训练后,我们有一个噪声预测器,能够估计添加到图像中的噪声。
逆向扩散(Reverse diffusion)
现在我们有了一个噪声预测器,我们将如何使用它呢?
我们首先生成一个完全随机的图像,并要求噪声预测器告诉我们噪声。然后,我们从原始图像中减去这个估计的噪声。重复此过程几次,将获得猫或狗的图像。
逆向扩散的工作原理是从图像中连续减去预测的噪声
你可能注意到了,按上面的描述,我们所实现的逆向扩散过程没法控制最终结果是一只猫还是一只狗的图像。在后面的conditioning(添加限定条件)章节中我们会着重来论述这一点。就目前我们所介绍的内容来说,图像的生成是不受限定的(unconditioned)
稳定扩散模型(Stable Diffusion Model)
坏消息是:我们刚才谈论的不是Stable Diffusion的工作原理!原因是,以上所描述的扩散过程都是在图像(像素)空间(image space)进行的。它的计算量是非常巨大的,因而生成的速度会非常慢。而且你不可能在任何一个单一的GPU中跑通这个过程,更别说那些笔记本电脑上的差GPU了。
图像空间是巨大的。想想看:一个 512×512 的图像有3个颜色通道(红色、绿色和蓝色)空间为3x512x512=786,432,意味着为了生成