10分钟读懂Diffusion:图解Diffusion扩散模型
10分钟读懂Diffusion:图解Diffusion扩散模型
Diffusion模型是当前图像生成领域的重要技术之一,其通过逐步添加和去除噪声来生成逼真的图像。本文将通过图解方式,帮助读者快速理解Diffusion模型的工作原理,包括文字生成图片的整体结构、CLIP模型生成文字embedding的过程、UNet网络的使用,以及Diffusion模型的训练过程等。
Diffusion文字生成图片——整体结构
1.1 整个生成过程
在使用Diffusion模型生成图片时,需要将文字转换为模型可处理的输入形式。具体来说,Diffusion模型会使用Text Encoder生成文字对应的embedding(通常使用CLIP模型),然后将这个embedding与随机噪声embedding和time step embedding一起作为Diffusion模型的输入,最终生成理想的图片。
上图展示了完整的Diffusion生成过程:token embedding、随机噪声embedding、time embedding一起输入diffusion。
更详细的结构图如下:
可以看到中间的Image Information Creator是由多个UNet模型组合而成的。
1.2 使用CLIP模型生成输入文字embedding
CLIP模型是在图像及其描述的数据集上进行训练的。其训练过程可以简化为:首先分别使用图像和文本编码器对它们进行编码,然后使用余弦相似度来衡量是否匹配。通过在训练集上训练模型,最终得到文字的embedding和图片的embedding。
1.3 UNet网络中如何使用文字embedding
在UNet网络中,会在每个ResNet之间添加一个Attention模块,而Attention模块的一端输入便是文字embedding。
扩散模型Diffusion
2.1 扩散模型Diffusion的训练过程
Diffusion模型的训练可以分为两个部分:
- 前向扩散过程(Forward Diffusion Process):不断往输入图片中添加高斯噪声。
- 反向扩散过程(Reverse Diffusion Process):将噪声不断还原为原始图片。
2.2 前向扩散过程
前向扩散过程是不断往输入图片中添加高斯噪声。
2.3 反向扩散过程
反向扩散过程是将噪声不断还原为原始图片。
2.4 训练过程
在每一轮的训练过程中,包含以下内容:
- 每一个训练样本选择一个随机时间步长t。
- 将time step t对应的高斯噪声应用到图片中。
- 将time step转化为对应embedding。
下面是每一轮详细的训练过程:
2.5 从高斯噪声中生成原始图片(反向扩散过程)
上图展示了从高斯噪声到最终清晰图片的反向扩散过程。
补充说明
补充1:UNet模型结构
UNet模型结构包含Downsample、Middle block和Upsample三个部分,其中每个部分都包含了ResNet残差网络。
补充2:Diffusion模型的缺点及改进版——Stable Diffusion
Diffusion模型的缺点是在反向扩散过程中需要把完整尺寸的图片输入到U-Net,这使得当图片尺寸以及time step t足够大时,Diffusion会变得非常慢。Stable Diffusion就是为了解决这一问题而提出的改进版本。
补充3:UNet网络同时输入文字embedding
在第2节介绍Diffusion原理的时候,为了方便,都是没有把输入文字embedding加进来,只用了time embedding和随机高斯噪声,怎么把文字embedding也加进来可以参考前面的1.3节。
补充4:DDPM为什么要引入时间步长t
引入时间步长t是为了模拟一个随时间逐渐增强的扰动过程。每个时间步长t代表一个扰动过程,从初始状态开始,通过多次应用噪声来逐渐改变图像的分布。因此,较小的t代表较弱的噪声扰动,而较大的t代表更强的噪声扰动。
补充5:为什么训练过程中每一次引入的是随机时间步长t
在训练过程中,如果时间步长是递增的,那么必然会使得模型过多的关注较早的时间步长(因为早期loss大),而忽略了较晚的时间步长信息。因此,采用随机时间步长可以更均衡地优化模型在不同时间步长的表现。