概述
扩散模型:和其他生成模型一样,实现从噪声(采样自简单的分布)生成目标数据样本。
扩散模型包含两个过程:前向扩散过程和反向生成过程
-
前向扩散过程是对一张图像逐渐添加高斯噪音直至变成随机噪音;
-
反向生成过程是去噪音过程,我们将从一个随机噪音开始逐渐去噪音直至生成一张图像,这也是我们要求解或者训练的部分。
去噪过程一般采用UNet或者ViT,使用t步的结果和条件输入预测t-1步增加的噪声,然后使用DDPM可以得到t-1步的分布,经过多步迭代就可以从随机噪声还原到有实际意义的信号。如果使用原始DDPM速度会慢很多,所以很多工作如DDIM、FastDPM等工作实现了解码加速。
DPM
Diffusion Probabilistic Models
《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》2015
首次提出 完成了整体框架和数学推导式子
扩散模型是借鉴了物理学上的扩散过程;
在生成模型上,分为正向和逆向的过程。
-
正向过程是向信号中逐渐每步加少量噪声,当步数足够大时可以认为信号符合一个高斯分布。
-
所以逆向过程就是从随机噪声出发逐渐的去噪,最终还原成原有的信号。
DDPM
《Denoising Diffusion Probabilistic Models》2020
《去噪扩散概率模型》
真正应用于cv,nlp的任务,首次将它在高分辨率图像生成上调试,与UNet网络高度契合,让众人看到了Diffusion在视觉方面的潜力。
DDPM 主要分为两个过程:
- forward 加噪过程(从右往左):加噪过程是指向数据集中的真实图像逐步加入高斯噪声, 加噪过程满足一定的数学规律,不需要学习
- reverse 去噪过程(从左往右):去噪过程是指对加了噪声的图片逐步去噪,从而还原出真实图像。去噪过程则采用神经网络模型来学习。这样一来,神经网络模型就可以从一堆杂乱无章的噪声图片中生成真实图片了。
前向加噪
扩散过程时逐步加噪的过程, 符合马尔科夫假设, 每一步的噪声都是高斯噪声,正向扩散过程属于无参模型(不需要进行学习)
**
前向加噪可以使用公式一次计算到位
代码实现
反向去噪
从高斯噪声中采样,学习一个模型估计真实的条件概率分布(从上一状态到下一状态的条件概率模型)
也可以直接计算任意状态的分布,因此可以直接采样,然后和真实图像计算均方误差
用一个 U-Net 结构来对t
时刻的噪声进行预测
UNet
UNet可以实现输出和输入一样维度,所以天然适合扩散模型。
2015 传统深度学习时代的早期,U-Net: Convolutional Networks for Biomedical Image Segmentation(U-Net)正式发表,图像分割领域迎来了它的“ResNet”。
Encoder-Decoder结构
训练阶段
训练U-Net 对 t 时刻的噪声进行预测。
训练数据:采样 x0, t 作为,先计算 xt,
输入:xt , time_step
输出:噪声z分布
推理阶段
IDDPM
《Improved Denoising Diffusion Probabilistic Models》
比原始DDPM一个重要的变化是不再采用固定的方差,而是采用网络来预测方差。在DDPM中,生成过程的分布采用一个参数化的高斯分布来建模。
Classifier Guidance
《Diffusion Models Beat GANs on Image Synthesis》2020
openAI在2020年发表的一篇文章。文章从模型结构入手,通过扩大模型容量,在图像生成任务上击败了当时的SOTA Big GAN。
此外还提出了Classifier guidance
,用于控制扩散模型生成指定类型的图像
分类器指导的思想与其进行噪声预测时的想法类似,主要是修改高斯分布的均值参数来指导图像按类别生成,有一个超参数s表示指导的程度,算法如下:
提出了一种Classifier Guidance的带条件图像生成方法,大大拓展了Diffusion Models的使用场景。
一是需要额外训练一个噪声版本的图像分类器。二是该分类器的质量会影响按类别生成的效果。三
GLIDE
《Classifier-Free Diffusion Guidance》2021
Classifier-Free Guidance的核心是通过一个隐式分类器来替代显示分类器,而无需直接计算显式分类器及其梯度。
《Hierarchical Text-Conditional Image Generation with CLIP Latents》
《GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models》
LDM
《High-resolution image synthesis with latent diffusion models》 2022
《使用隐式扩散模型进行高分辨率图像合成》
以前的扩散模型(diffusion models (DMs) )基于像素级别的,其需要上百个GPU day 进行训练。
LDM(latent diffusion model) 潜空间扩散模型是基于latent, 在减少计算复杂度和保留细节、提升保真度中接近了最佳。
LDMs是两阶段模型(two-stage):
-
采用一个
autoencoder
来将图像压缩为低维度的latent
,可减少计算复杂度; -
然后输入扩散模型, 扩散模型用来生成
latent
,然后再采用autoencoder来重建出图像。
详细过程如下图所示:
-
第一部分就是下面左半部分(红色),对图片进行压缩,将图片压缩为隐变量表示(latent),这样可以减少计算复杂度;
-
第二部分还是扩散模型(diffusion与denoising),中间绿色部分。此外引入了cross-attention机制,下图右半部分,方便文本或者图片草稿图等对扩散模型进行施加影响,从而生成我们想要的图片,比如根据文本生成我们想要的图片。
模型结构
VAE
自编码模型对原图片进行处理,忽略掉图片中的高频信息,只保留重要、基础的一些特征。
这种方法带来的的好处是能够大幅降低训练和采样阶段的计算复杂度,让文图生成等任务能够在消费级GPU上,在10秒级别时间生成图片,大大降低了落地门槛。
扩散模型U-Net
解释为一个时序去噪自编码器
训练阶段
训练本质上是一个两阶段训练的过程
-
第一阶段需要训练一个自编码器。
在通用自编码阶段我们只需要训练一次,因此可以将其重复用于多个 DM 的训练,或探索可能完全不同的任务
在第一阶段训练自编码器时,为了避免潜在表示空间出现高度的异化,作者使用了两种正则化方法,一种是
KL-reg
,另一种是VQ-reg
,因此在官方发布的一阶段预训练模型中,会看到KL和VQ两种实现。
KL-reg:在一个标准正态分布中引入一个KL惩戒因子,类似于VAE
VQ-reg:在解码器 D 中加入一个向量量化层,类似于VQGAN
- 第二阶段才需要训练扩散模型本身。
在Stable Diffusion中主要采用AutoencoderKL
这种实现。
推理阶段
模型使用VAE
将图片encoder
到隐空间,生成结果同样也是通过VAE
解码成原始大小的图片。