基础

基本原理

扩散模型

扩散模型是一个迭代式的方法,通过一步一步地对图片进行“降噪”来得到最终图片。流程如下 Pasted image 20240218173917.png 每次denoise的过程如下: Pasted image 20240218181116.png 李宏毅认为,之所以不直接预测出不带noise的图片,是因为这样的方法比较难。直接生产噪声比较简单。 这个noise predicter的训练集是可以生成的,生成方法如下: Pasted image 20240218181826.png

文生图

加入文字后的扩散模型,对应变成了如下几个过程: Pasted image 20240218182213.png Pasted image 20240218182252.png Pasted image 20240218182355.png 仅仅是加入了文字指示。

落地的文生图模型的一般方法

Pasted image 20240218192527.png例如stable diffusion就如下: Pasted image 20240218192706.png DALL-E(至少是初代)也是这样: Pasted image 20240218192808.png

各阶段使用的模型

生成图像与Ground Truth之间的差别量化

Pasted image 20240218195619.png

文字与图片的差异

Pasted image 20240218195958.png

Decoder

在进行完步骤2时,我们会得到中间结果,中间结果可能是一张结果图像的缩略图,也可能是一个Latent Representation,这时就需要用一个Decoder将其进行处理,得到最后的图像。

  • 当中间结果是缩略图的时候,只需要训练一个upscale的模型就好了。 Pasted image 20240218200258.png
  • 当中间结果是隐藏表示时,那你还需要训练一个Auto Encoder。 Pasted image 20240218201614.png 对于这种情况,训练扩散模型时也要进行对应的改动。下图是与之前模型的对比。 Pasted image 20240218202423.png

具体原理

建议查看[此篇文章](扩散模型 (Diffusion Model) 简要介绍与源码分析 (qq.com)),非常详细。

扩散模型

与VAE的对比

Pasted image 20240218203439.png

训练

前向过程

前向过程会将原图一步一步添加越来越弱的噪声,直到将图片变为完全噪声图。 我们考虑这个噪声添加过程一共分为T步,第t步时,第t步的加噪声后的图仅与上一步结果有关,对于都成立,因此这是一个马尔可夫过程。因此有 Pasted image 20240303232531.png 其中是一个递增的值,是一个预先设定好的已知的值。 中,表示正态分布,是第t步噪声图,中的表示是要采样,也就是说的值是服从这样一个正态分布的;逗号两边的分别是均值和方差,均值为,其实等价于,相当于将一个标准正态分布与原图进行系数为的混合。 但是如果要产生噪声,那么就需要对正态分布进行随机采样,如果直接对进行随机采样,那么这个随机采样的操作其实是不可导的,所以我们需要通过重参数技巧 (reparameterization trick)进行解决。我们使用重参数技巧,将转换为。 然后我们令,则有如下的推导 Pasted image 20240304005554.png (3-1)和(3-2)的推导是由于独立高斯分布的可见性。把考虑为整体服从,对应地将另一项也考虑为另一个高斯分布,即可代入以下公式互进行化简。 Pasted image 20240304005822.png 这也就是说,其实只需要一步就可以求出第t步的噪声图。

反向过程

反向过程是根据输入的带噪声的图像,预测出其中的噪声,然后再去除这个噪声即可得到不带噪声的图。本质上是获取逆向分布。 这个分布是无法直接获得的,但是可以使用深度学习来学习到以下函数进行拟合。模型参数为

Pasted image 20240304012928.png (5)很好理解,也是一个马尔可夫过程,所以分布是连乘的。 而(6)是我们要求的目标函数。 在知道的情况下,可以通过贝叶斯公式得到。 推导如下,先使用一次贝叶斯公式,然后之类的项可以通过之前前向过程中的公式进行代换。 Pasted image 20240304014213.png 通过分离指数部分,可以求出方差和均值公式(8)(9)。 Pasted image 20240304014818.png 可以得出如下的分布 Pasted image 20240304014122.png 此外,前向过程中我们已经知道了Pasted image 20240304015119.png 代入(9)中有 Pasted image 20240304015142.png 是个简单的代入过程。此时我们的已经不依赖于了,也就是说不需要提前知道才能求出。 回到之前的待拟合的函数(6)中,我们希望训练来预估。在神经网络中,我们会给网络输入这个值,所以这是一个已知量,此等式中的唯一未知量就只有了,所以需要训练一个函数以拟合。 用来替代,有 Pasted image 20240304020156.png 现在有了拟合的均值,(8)式中得到的方差公式中也没有未知数,也就是说方差是完全已知的。有了方差和拟合均值,正态分布也就可以进行拟合了。

损失函数

我们知道第t步的噪声 模型的损失函数即为下图第5步的公式,也就是真实添加的噪声与预测噪声的距离。 Pasted image 20240218205532.png 上图标错了,t越大α_t越小噪声越大。 神经网络+损失函数。至此我们完成了整个扩散模型。 Pasted image 20240304222359.png

推理

推理其实就是没啥好说的了,就直接采样一个标准正态分布作为,然后一步一步地根据之前训练的噪声预测函数进行降噪,直到得到最终的Pasted image 20240218215425.png