Stable Diffusion 是一个图像生成方法,由 Stability AI and Runway 在LDM[1] 的基础上提出。在GitHub有很多他的实现和应用[2][3][4] ,其中[2] 是最早的实现版本,[3] 是V2版本,由 Stability AI 完成。
flowchart TD
subgraph Input-noisy
Random-seed --> latent-Gaussian-noise
end
subgraph Input-prompt
prompt --> TextEncoder --> TextEmbaddings
end
latent-Gaussian-noise -->Unet{Unet-with-MultiAttention}
TextEmbaddings-->Unet
Unet --> predict-noisy --sampling-steps-->Unet
predict-noisy --> Decoder --> Image
在一开始,StableDiffusion会通过一个随机数种子生成一张在隐空间下的随机噪声,同时通过一个文本编码器对输入的prompt进行编码,生成一个文本向量。随机噪声和文本向量会一块送入Unet,经过DDPM的步骤得到一张隐空间下的图片,通过一个解码器得到完整的图片。这里的Unet做出了改进,中间加入了交叉注意力机制。
反向扩散过程中输入的文本向量和隐空间下的噪声图片需要经过 \(t\)轮的Unet网络,每一轮预测一个噪声,噪声图减去这个噪声,得到的图片继续送入Unet进行下一轮