今天和咱们共享一篇关于Stable Diffusion是怎么作业的文章《How does Stable Diffusion work?》。
感兴趣可以直接阅读英文网页。
我对原文进行了精简并修改了部分内容使咱们更简单了解,下面请看熟肉。
Stable Diffusion能做什么?
在最简单的方式中,Stable Diffusion是一种文本到图画的模型。给它一个文本提示,它将返回与文本匹配的图画。
分散模型 Diffusion model
Stable Diffusion归于一类称为「分散模型」的生成式深度学习模型。这意味着它们旨在生成类似于它们在练习中看到的新数据。在安稳分散的情况下,数据是图画。
为什么叫分散模型?因为它的数学方式看起来很像物理学中的分散,让咱们来看看这个主意。
假设我只用两种图画练习了一个分散模型:猫和狗。在下图中,左边的两个峰代表猫和狗图画组。
前向分散 Forward diffusion
「前向分散」进程向练习图画增加噪声,逐步将其变成不典型的噪声图画。前向进程会将任何猫或狗图画变成噪声图画。终究,你将无法分辩它们开始是狗仍是猫。就像一滴墨水落入一杯水中,墨滴在水中分散。几分钟后,它随机分布在整个水中,你不再可以判断它开始是落在中心仍是边际附近。
下面是进行前向分散的图画的示例。猫图画变成随机噪声。
反向分散 Reverse diffusion
现在到了令人兴奋的部分,假如咱们可以逆转分散呢?就像倒放视频一样,时刻后退,咱们将看到墨滴开始增加的方位。
从喧闹、无意义的图画开始,「反向分散」恢复猫或狗的图画。从技能上讲,每个分散进程都有两个部分:漂移和随机运动。反向分散会倾向猫或狗图画,但不会倾向于两者之间。这便是为什么成果可以是猫或狗。
模型怎么进行练习
反向分散的主意无疑是巧妙而优雅的。但价值百万美元的问题是:“怎么才能做到这一点?”。为了反向分散,咱们需求知道图画中增加了多少噪声。
答案是练习神经网络模型来猜测增加的噪声。它在安稳分散中被称为「噪声猜测器」(Noise predictor),是一个U-Net模型。练习进程如下:
-
选择一张练习图画,例如猫的照片。
-
生成随机噪声图画。
-
经过将噪声图画增加到一定数量的进程来损坏练习图画。
-
让噪声猜测器告知咱们增加了多少噪声。(经过调整其权重并向其显示正确答案来完结)。
练习后,咱们有了一个噪声猜测器,可以估量增加到图画中的噪声。
运用噪声猜测器
现在咱们有了噪声猜测器。怎么运用它?
咱们首要生成一个完全随机的图画,并要求噪声猜测器告知咱们噪声。然后,咱们从原始图画中减去这个估量的噪声。重复此进程几次,就可以得到一只猫或一只狗的图画。
安稳分散模型 Stable Diffusion model
现在我要告知你一些坏消息:咱们刚才评论的不是安稳分散的作业原理!原因是上述分散进程是在图画空间中进行的。它的计算速度十分十分慢。您将无法在任何单个GPU上运转,更不用说笔记本电脑上的糟糕GPU了。
图画空间是巨大的。想想看:具有三个颜色通道(红、绿、蓝)的512512
图画是一个786432
维的空间!像Google的Imagen和Open AI的DALL-E这样的分散模型都在像素空间中。他们运用了一些技巧来使模型更快,但仍然不行。
潜在分散模型 Latent Diffusion model
而「Stable Diffusion」便是用来解决这个问题。它是一种潜在分散模型,它不是在高维图画空间中操作,而是首要将图画压缩到「潜在空间」中。潜在空间小了48倍,因而它获得了处理更少数字的优点。这便是为什么它要快得多。
变分主动编码器 Variational Autoencoder
而压缩的这个进程便是运用「变分主动编码器」这个技能来进行的。变分主动编码器 (VAE) 神经网络有两部分:编码器和解码器。编码器将图画压缩为潜在空间中的较低维表明,解码器从潜在空间恢复图画。
Stable Diffusion的潜在空间为4x64x64
,比图画像素空间小48倍。「咱们谈到的一切前向和反向分散实际上都是在潜在空间中完结的」。
因而,在练习进程中,它不会生成噪声图画,而是在潜在空间(潜在噪声)中生成随机张量。它不是用噪声损坏图画,而是用潜在噪声损坏图画在潜在空间中的表明。正是这样的作法使得Stable Diffusion速度更快。
条件效果 Conditioning
即使这样还不行,文字提示在哪里进入图片?没有它,Stable Diffusion就不是文本到图画的模型。
这便是「条件效果」(Conditioning)的用武之地。条件效果的意图是引导噪声猜测器,以便猜测的噪声在从图画中减去后可以为咱们提供想要的成果。
下面概述了怎么处理文本提示并将其输入噪声猜测器。「分词器」(Tokenizer,Stable Diffusion v1.5运用CLIP
的分词器)首要将提示中的每个单词转换为一个称为token
的数字。然后,每个符号都会转换为一个称为embedding
的768个值向量。embedding
随后由文本转换器进行处理,并准备好供噪声猜测器运用。
但文本提示并不是调节安稳分散模型的仅有方法。文本提示和深度图画都用于调节深度到图画模型,ControlNet运用检测到的概括、人体姿态等来调节噪声猜测器,并完成对图画生成的出色操控。
这也是为什么Stable Diffusion不仅可以进行文生图,还可以图生图和部分重绘。以下便是Stable Diffusion的模型架构和文生图流程。
Stable Diffusion的模型架构 文生图流程
end~
看到这里你大概就弄懂了Stable Diffusion模型的运转进程了吧,假如觉得还不错的话,欢迎关注我。
也欢迎关注我的公棕号「ChaosstuffAI」,了解更多关于Stable Diffusion的常识与AIGC创作技巧!