Latent Diffusion Model是怎么完成图像快速生成的?

1,327 阅读7分钟

潜在扩散模型(Latent Diffusion Model, LDM)是一种基于深度学习的生成模型,它是在传统的扩散模型的基础上进行了改进和扩展。

Latent Diffusion Model简介:

  • 扩散模型是一种生成模型,它通过向数据中引入噪声并在逆过程中逐步去除噪声来生成数据。这个过程模拟了数据从无序状态到有序状态的转变。如下图所示

image-20240821104826440.png

  • 在潜在扩散模型中,感知压缩是指在数据的潜在空间中进行操作,以减少数据的维度,同时尽量保留重要的信息。这通常通过自编码器(Autoencoder)来实现,自编码器的编码器部分用于压缩数据,解码器部分用于重建数据。
  • 尽管扩散模型允许通过对相关损失项进行欠采样来忽略感知上不相关的细节,但它们仍然需要在像素空间中进行昂贵的函数评估,这导致了对计算时间和能源的巨大需求。Latent Diffusion Model利用了一种自动编码模型,该模型学习的空间在感知上与图像空间等同,但大大降低了计算复杂性。这种方法有几个优点:(i)通过离开高维图像空间,得到了Diffusion Model,由于采样是在低维空间上进行的,因此计算效率更高的Diffusion Model。(ii)Latent Diffusion Model利用了Diffusion Model从其U-Net架构中继承的归纳偏差,这使得它们对于具有空间结构的数据特别有效,因此减轻了以前方法所要求的激进的、降低质量的压缩水平的需求。(iii)最后,Latent Diffusion Model获得了通用压缩模型,其潜在空间可用于训练多个生成模型,也可用于其他下游应用,例如单图像CLIP引导合成,扩展了模型的实用性。

Latent Diffusion Model原理:

由于Latent Diffusion Model是一种扩散模型,所以它的目的仍然是通过增加噪声之后逐步减少噪声直到生成预期图片。

image-20240820162154713.png

图1 Latent Diffusion Model网络架构图

照例放出网络架构图,可能刚看到网络架构图大家会觉得有点懵,不知道是怎么样的构建,没关系,让我们一起看看吧。🥂🥂🥂先从图中的元素开始介绍这张图,X代表原始图片,X̂则表示预期图片,ε表示编码器,D代表解码器,εθ是一个U-Net网络,Z为增噪前或去噪后的图像,Zt为增噪后及去噪前的图像。相信大家看到这里已经对这个架构图有了初步了解(如果没有,那就是我太没用了😂😂)。

Latent Diffusion Model训练流程:

训练过程:

step1:感知压缩模型训练:
  • 方式:autoencoder
  • 损失函数:KL 正则和 VQ 正则,尽管VQ正则化在FID指标上略高于KL正则化(FID是一种评估生成模型性能的指标,它通过比较生成图像与真实图像的分布差异来衡量模型的质量。FID值越低,表示生成图像的分布越接近真实图像的分布。),但VQ的视觉效果更佳 ;
  • 压缩率:对于2,4...2^5压缩率,每个压缩率实验训练一个自动编码器,使其能够将图像压缩到相应的潜在空间维度。例如,如果原始图像的分辨率是512x512x3(RGB三通道),使用压缩率8可能将图像压缩到64x64x3的潜在表示,实验发现压缩率在4到8之间时,模型在效率和感知真实度上达到了很好的平衡。
step2:扩散模型训练:
  • 方式:预测噪声并通过U-Net模型逐步去除噪声
  • 损失函数:MSE,它通过比较预测噪声与真实噪声的差异来衡量模型的质量。
  • 添加噪声方式:添加高斯分布噪声
  • 去除噪声方式:结合添加噪声步骤及贝叶斯分布预测出去噪后图像

--训练细节

------Diffusion Process:

首先,在扩散模型中,噪声的添加方式对于整个去噪过程至关重要,它直接影响到生成图像的质量。一些同学可能会认为递减的噪声添加有助于迅速将图像转化为噪声状态(类似于学习率的逐渐衰减)。但实际上,递增的噪声添加更为有效,对于递减地添加噪声,这会使去噪变得很难;如果在第T步仅添加少量噪声,那么对于之前步骤中已经累积了大量噪声的图像来说,影响将微乎其微。

这种递增的噪声添加策略基于数学中的马尔可夫链原理,模型能够在每一步中细致地学习如何逆转噪声的影响,这不仅有助于提高去噪的准确性,也使得最终生成的图像更加细腻和真实。类似于物理中的扩散过程,其中物质从高浓度区域向低浓度区域自然扩散。在数据处理中,这可以类比为从清晰的数据状态逐步过渡到高噪声状态。


接下来一起看看加噪的过程吧

αt=1βt\alpha_t = 1-\beta_t

βt是预先给定的值,它是一个随时刻不断增大的值,论文中它的范围为[0.0001,0.02]

1Xt=αtXt1+1αtZt(ZtN(0,1))式1:X_t = \sqrt{\alpha_t}X_{t-1} + \sqrt{1-\alpha_t}Z_t\qquad(Z_{t}∼N(0,1))

可以知道,第T步图像受到第T-1步图像以及添加噪声的影响,XtX_t表示t时刻的图像,Xt1X_{t-1}表示t−1时刻图像,Z表示添加的高斯噪声, αt\sqrt{\alpha_t} 表示第T步图像受到第T-1步图像的权重, 1αt\sqrt{1-\alpha_t} 表示第T步图像添加噪声的权重。从这里可以看出添加噪声的权重是逐渐增加的,而受到第T-1步图像的权重是逐渐减少的;这时候有同学又会问了,知道了 αt\alpha_t 是要这样设置,那么为什么还要加上根号呢?🤚🤚🤚聪明的同学可能就会想到了,它们的平方和等于1,并且在后续的噪声生成中有助于式子的化简(高斯分布的性质)

可能大家觉得,哎这样是不是就能进行逐步添加噪声了,但是这样子是不是太浪费时间了,只能串行运算,下面来看看怎么由初始状态直接推出第T步图像。✈️✈️✈️

2Xt1=αt1Xt2+1αt1Zt1(Zt1N(0,1))式2:X_{t-1}=\sqrt{\alpha_{t-1}} X_{t-2}+\sqrt{1-\alpha_{t-1}}Z_{t-1}\qquad(Z_{t-1}∼N(0,1))

把式2代进式1,得

Xt=αtαt1Xt2+(αt(1αt1)Zt1+1αtZt)X_t=\sqrt{\alpha_t\alpha_{t-1}}X_{t-2}+(\sqrt{\alpha_t(1-\alpha_{t-1})}Z_{t-1}+\sqrt{1-\alpha_t}Z_t)

这里的Z_{t-1}及Z_{t}均服从高斯分布,再有高斯分布性质可以推得

  • 若Z∼N(0,1),则1αtZN(0,(1αt)2)\sqrt{1-\alpha_t}Z∼N(0,(\sqrt{1-\alpha_t})^2)
  • 1αtZN(0,(1αt)2)\sqrt{1-\alpha_t}Z∼N(0,(\sqrt{1-\alpha_t})^2),
  • αt(1αt1)ZN(0,(αt(1αt1))2)\sqrt{\alpha_t(1-\alpha_{t-1})}Z∼N(0,(\sqrt{\alpha_t(1-\alpha_{t-1})})^2)
  • 1αtZt+αt(1αt1)Zt1N(0,((1αt)2+(αt(1αt1))2))\sqrt{1-\alpha_t}Z_t+\sqrt{\alpha_t(1-\alpha_{t-1})}Z_{t-1}∼N(0,((\sqrt{1-\alpha_t})^2+(\sqrt{\alpha_t(1-\alpha_{t-1})})^2))

进而可得

Xt=αtαt1Xt2+1αtαt1Z^X_t = \sqrt{\alpha_t\alpha_{t-1}}X_{t-2}+\sqrt{1-\alpha_t\alpha_{t-1}} \hat{Z}

最后写出通用公式

Xt=α^X0+1α^Z^(Z^N(0,1))X_t = \sqrt{\hat\alpha}X_{0}+\sqrt{1-\hat\alpha} \hat{Z}\qquad(\hat{Z}∼N(0,1))

最终获得的公式中α^\hat\alphai=1tαi\prod_{i = 1}^{t}\alpha_i,由此任意时刻的图像都可以用X0X_0的图像及一个高斯噪声表示了。


------Reverse Process:

前向过程为添加一个高斯分布的噪声,该噪声的分布是这样的ZN(μ,σ2)Z∼N(μ,σ^2),然而后向过程是不知道高斯分布的均值和方差的,这里想要做的就是通过给图片打上噪声(标签),模型进而去学习噪声的过程,学习噪声需要学习它的方差和均值σ2,μσ^2,μ

这里直接给出最后的公式

σt12=βt(1α^t1)1α^tσ_{t-1}^2=\frac{\beta_t(1-\hat\alpha_{t-1})}{1-\hat\alpha_t}
μt1=XtβtZ1α^tαtμ_{t-1}=\frac{X_t-\frac{\beta_tZ}{\sqrt{1-\hat\alpha_t}}}{\sqrt{\alpha_t}}

Z就是我们要学习的噪声,其实在扩散模型中一般使用一个判别器使它生成一个特定类型的图片,如果想要生成更为准确的图片呢?论文中使用的是U-Net进行学习,如果说输入文字进入U-Net的文字编码器,这里具体的方法是使用了一个crossattention注意力机制,具体可见图1,网络里面使用了Q、K、V,Q指代query,K指代key,V指代value,通过迭代T步完成输入,最后通过解码器能够生成想要的图像。

一起来看看生成样例吧

屏幕截图 2024-08-23 102723.png

图2 生成样例图

如图二所示,上面一行是由图像生成图像,通过一个语义分割图进而得到接近真实的图片,比如分割出山、河流、树木,模型就能以此来生成图片;而下面那行是通过文字生成图片。可以看到这里效果是比较好的,因为这些图片我们都没有见过,是靠模型去学习来进行生成的。

再来看看模型效果对比

image.png

图3 模型效果对比图

上图中的PSNR叫峰值信噪比,数值是越大越好,R-FID叫评估生成模型和真实数据分布之间差异的指标,数值是是越小越好,由此对比可以看到扩散模型在图像生成方面已经超越了GAN网络,并且能够生成更细粒度及逼真的图像。

对此,你应该对扩散模型有了完整的了解,一起期待一下下期的LDM应用吧。🎃🎃🎃