一、背景及流程介绍
stable diffusion由latent diffusion model发展而来。首先介绍下latent diffusion model,如图1。关于这两个模型最重要的一点就是模型包括两个过程:正向过程和反向过程。只需记住:正向加加加噪声,反向减减减噪声!!!
1、简单介绍:
latent diffusion model 由三部分组成:像素空间(Pixel Space)、潜空间(Latent Space)和条件(Conditioning)。大体过程如下,图片x在像素空间中通过变分自编码器(VAE)的encoder进入潜空间中,得到z。z在潜空间内先经过正向加噪过程得到z_T,之后z_T与条件进行交叉注意力(cross attention),一起输入到U-Net中进行去噪过程。经过去噪过程后得到的z输入到VAE的decoder中,生成重建图像x~。
2、详细介绍:
(1) 像素空间中使用了变分自编码器(VAE)。VAE包括encoder(图中ε)和decoder(图中D),其作用是对图片降低维度,即减小尺寸降低计算量。图片x通过VAE的encoder进行降维操作,得到向量z,换句话讲通过encoder,实现了像素空间到潜空间的转换。
(2) 潜空间中分为正向过程和反向过程,如图2。正向过程是一个不断添加噪声的过程,通俗来讲就是每次往z上加一点噪声,但是加很多回,即z_0 -> z_1 -> z_2 ......->z_T的过程,最终得到一个纯高斯噪声z_T。反向过程是进行去除噪声的过程,即z_T -> z_T-1 ...... z_1 -> z_0的过程。去除噪声采用的U_Net模型,z_T和conditioning通过交叉注意力(cross attention)共同输入到模型中,通过模型作用还原原始不带噪声的图片。
这里U_Net输入有三个,分别是z_T、条件conditioning和time embedding。time step embedding可以看作时间步数t的嵌入。条件conditioning,我们可以举个例子比如使用CLIP text encoder得到文本条件text,通常我们叫文本条件的内容为prompt。比如我们的原始图片是一张小女孩戴着帽子,在latent diffusion中,可以设置prompt:去除小女孩戴的帽子,最终生成的图片将会变成小女孩不戴帽子。交叉注意力多用于transformer,在这里可以粗略理解成将文本等条件与输入进行对齐,相当于将图片和文本这种多模态的数据共同作用到模型上。
(3) 不断降噪生成原始不带噪声的图片z后,通过VAE的decoder得到了重建图片x~,实现了潜空间到像素空间的转化。毕竟你都把人家转到潜空间了,总要转回来吧。
图1 Latent Diffusion Models结构
图2正向和反向过程
二、stable diffusion和latent diffusion的区别:
(1)训练数据:Latent Diffusion使用的是laion-400M数据进行训练,而Stable Diffusion使用的是laion-2B-en数据集进行训练,后者使用了更多的训练数据1。
(2)Text Encoder:Latent Diffusion采用一个随机初始化的transformer来编码text,而Stable Diffusion采用一个预训练好的clip text encoder来编码text,预训练的text model往往要优于从零开始训练的模型1。
(3)训练尺寸:Latent Diffusion只是在256x256分辨率上训练,而Stable Diffusion先在256x256分辨率上预训练,然后再在512x512分辨率上finetune1。
(4)模型架构:Latent Diffusion是在图像经过VAE编码器压缩后的图像进行diffusion处理,然后再通过解码器,对压缩后的latent编码还原为图像3。而Stable Diffusion在训练过程中直接向数据添加噪声,逐渐增加噪声水平以匹配数据分布的复杂度4。
PS:欢迎各位大佬指出错误~~
参考:
stable diffusion和latent diffusion的区别:stable diffusion相比于latent diffusion有哪些改进?