上图粉色的模块是Stable Diffusion与别的Diffusion模型最大的区别之一,也是SD性能提拔的着急之一。起首,必要明白一点:图片信息生成器不直接生成图片,而是生成较低维度的图片信息,即所谓的隐空间信息(latent space information)。在下图中,这个隐空间信息被表示为粉色的 4x3 的方格,随后将这个隐空间信息输入到下图中黄色的解码器中,就可以乐成生成图片了。Stable Diffusion主要引用的论文“latent diffusion”中的latent一词也来自于隐变量中的“latent”。
一般的Diffusion模型直接生成图片,而不会有先生成隐变量的过程,因此普通的Diffusion在这一步上必要生成更多的信息,负荷也更大。因此之前的Diffusion模型在速率和资源利用上都不如Stable Diffusion。技术上来说,这个图片隐变量是如何生成的呢?实际上,这是由一个Unet和一个Schedule算法共同完成的。Schedule算法控制生成的进度,而Unet则负责一步一步地实行生成的过程。在Stable Diffusion中,整个Unet的生成迭代过程大约必要重复 50~100 次,隐变量的质量也在这个迭代的过程中不停地改善。下图中粉色的Image Information Creator左下角的循环标志也象征着这个迭代的过程。
2、图片解码器
图片解码器,从图片信息生成器(Image Information Creator)中吸取图片信息的隐变量,然后将其升维放大(upscale),还原成一张完整的图片。图片解码器只在末了的阶段起作用,也是我们能得到一张真实图片的终极过程。
如今让更具体地了解一下这个系统中输入输出的向量形状,这样对Stable Diffusion的工作原理应该能有更直观的熟悉:
Diffusion模型的名称翻译成中文就是扩散模型,扩散的过程发生在Image Information Creator模块中,起首,利用随机函数生成一个与隐变量巨细类似的纯噪声(下图中左下角透明的4x4区域)。一旦有了初始的纯噪声(下图中左下角透明的4x4区域)和语义向量(下图中左上角蓝色的3x5区域),Unet就会结合语义向量,不停地去除纯噪声隐变量中的噪声。大约重复50~100次左右就完全去除了噪声,而且不停向隐变量中注入语义信息,这样我们就得到了一个带有语义的隐变量(下图中粉色的4x4区域)。同时,我们还有一个scheduler,用来控制Unet去噪的强度,统筹整个去噪的过程。Scheduler可以在去噪的差别阶段动态调整去噪强度,也可以在某些特别使命中匀速去除噪声,这都取决于我们最初的计划。