Stable Diffusion原理是什么?
摘要:Stable Diffusion原理 此文为译文,原文见: https:stable-diffusion-art.comhow-stable-diffusion-work Stable Diffusion是一个深度学习模型,我们会深
Stable Diffusion原理
此文为译文,原文见:
https://stable-diffusion-art.com/how-stable-diffusion-work/
Stable Diffusion是一个深度学习模型,我们会深入解析SD的工作原理。
1. Stable Diffusion能做什么
直白地说,SD是一个text-to-image模型,通过给定text prompt(文本提示词),它可以返回一个匹配文本的图片。
2. Diffusion 模型
Stable Diffusion属于深度学习模型里的一个类别,称为diffusion models(扩散模型)。这类模型时生成式模型,也就是说它们用于生成新的数据,这类新数据类似于它们训练时的数据。对于SD来说,这类新数据便是图片。
为什么叫diffusion model?因为它的数学公式看起来非常像物理上的扩散现象。下面我们具体介绍它的原理。
假设我们训练了一个diffusion model,训练时只给了2类图片:猫与狗。如下图所示,左边便是送入训练的猫与狗的图片。
2.1. 前向扩散
前向扩散将图片转为噪点(图片基于此文图片进行修改 this article)
前向扩散的过程是给训练图片添加噪点的过程,并逐渐将图片转为一个反常的噪点图。也就是会将任何猫或狗的图片转为一张噪点图,并最终无法辨认噪点图对应的初始图片是猫还是狗(这点非常重要)。
这个过程就像是滴入了一滴墨水到一杯水里,墨水在水里diffuses(扩散)。在几分钟后,墨水会随机分散并融入水中。且无法判断它最初是从水杯的中心滴入,还是从边缘滴入。
下面是一张图经历前向扩散的过程。猫的图片转为了一张随机噪点图。
2.2. 反向扩散
然后再看反向扩散部分。我们预期的表现是:输入一张噪点图(毫无意义的图),反向扩散(reverse diffusion)可以将这张噪点图恢复为一张猫或狗的图片。这就是反向扩散的主要思想。
从技术角度来说,每个扩散过程分为2部:
漂移或定向运动(例如,针对这个案例来说,噪点图要么偏向狗的方向,要么定向于猫的方向)
随机移动
反向扩散会朝着猫或狗的图片方向进行漂移,但绝对不会停留在中间状态。这也是为什么结果智能是猫或狗的图片。
3. 训练过程
从反向扩散的角度来说,我们需要知道有多少“噪点”加入到了某张图片里。回答此问题的方式便是:训练一个神经网络来预测添加的噪点。这个在SD里称为噪点预测器(noise predicator)。其本质是一个U-Net模型。
训练流程为:
选择一张训练图(例如一张猫的图片)
生成随机的噪点图
给这张图继续增加多轮噪点
训练noise predictor,预测加入了多少噪点。通过神经网络训练权重,并展示其正确答案
更详细的原理可以参考:
https://www.bilibili.com/video/BV1bm4y1A7v7/
按顺序每步都增加噪点,noise predictor预测每步增加的噪点
在训练后,便可得到一个noise predictor,可以预测一张噪点图中,加入到图片的噪点信息。
3.1. 反向扩散
现在我们有了noise predictor(噪点预测器),应该如何使用?
我们首先生成一张完全随机的图片,并让noise predictor告诉我们噪点是什么。然后从原图中移除噪点。并重复此过程多次,最终遍得到一张猫或狗的图片。
可以看到在这个生成猫或狗的图片的过程中,我们没有加入任何人为控制。这个“人为控制”是我们后续会讨论到的条件“conditioning”。当前来说,图片的生成是unconditioned。
更多有关反向扩散采样于采样器的信息,可以
