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。 更多有关反向扩散采样于采样器的信息,可以