李宏毅-扩散模型-学习笔记
原视频链接:https://www.bilibili.com/video/BV14c411J7f2
原论文链接:https://arxiv.org/abs/2006.11239
1. DDPM
- 什么是扩散模型(Diffusion Model)?
- 扩散模型是一类生成模型,通过模拟数据逐渐被噪声破坏的过程来学习数据分布。扩散模型的核心思想是定义一个正向扩散过程,将数据逐渐添加噪声,直到变成纯噪声;然后定义一个反向扩散过程,学习如何从纯噪声逐步去除噪声,最终恢复出原始数据。通过训练一个神经网络来拟合反向扩散过程,扩散模型能够生成高质量的样本。
- 扩散模型的基本原理是什么?
- 扩散模型的输入是一张从某种分布(如高斯分布)采样的纯噪声图像,该图像的尺寸与想要生成的目标图像一致。模型包含多个Denoise块,每个块接受两个输入:一个含有噪声的图像,以及该图像的噪声严重程度(或当前时间步),靠近输入的时间步较大,而靠近输出的时间步较小。图像在经过这些Denoise块时,噪声逐渐被去除,最终输出一张清晰的图像。每个Denoise块的核心是一个用来预测的神经网络,负责根据当前输入图像和时间步信息预测噪声的分布,然后从输入的图像中减去预测的噪声,就得到一个更清晰的图像。以上是扩散模型的反向扩散过程,类似于模型的预测/生成过程。
- 而扩散模型的训练过程,即正向扩散过程,是通过逐步向原始图像添加噪声来生成训练数据的。具体来说,给定一个原始图像,模型会在多个时间步上逐渐添加噪声,直到图像变成纯噪声。每个时间步对应一个特定的噪声水平,这个添加的噪声就作为训练标签,模型通过最小化预测的噪声与实际添加的噪声之间的差异,学习到如何有效地去除噪声,从而在生成阶段能够从纯噪声开始逐步生成高质量的图像。
- 如何根据文字描述生成图像?
- 简单来说,与第2点介绍的模型原理相比,在生成阶段,只需要在每个Denoise块(实际上是其内部的预测神经网络)的输入中加上一个额外的条件输入(Conditioning Input),这个输入就是文本描述的特征向量(这个特征向量可以通过一个预训练的文本编码器(如BERT或CLIP)从文本描述中提取出来);而在训练阶段,样本的features变为加入噪声后的图片,时间步与文本向量,label是加入的噪声, 模型同样需要在每个Denoise块的输入中加入这个条件输入,以便模型能够学习到如何根据文本描述预测噪声。通过这种方式,扩散模型能够根据文本描述生成与之相关的图像。
2. Stable Diffusion
- Stable Diffusion是什么?
- Stable Diffusion是一种基于扩散模型的文本到图像生成方法,旨在通过引入稳定的训练过程和高效的架构设计来生成高质量的图像。Stable Diffusion通过改进传统扩散模型的训练策略和网络结构,使得模型在生成过程中更加稳定,并且能够更好地捕捉文本描述与图像之间的关系,从而生成更符合文本描述的图像。
FID(Fréchet Inception Distance)是评估生成模型性能的一种常用指标,主要用于衡量生成图像与真实图像之间的相似度。FID通过计算生成图像和真实图像在某个特征空间(通常是Inception网络的某一层输出)的均值和协方差来评估两者之间的距离。具体来说,FID计算生成图像和真实图像的特征分布之间的Fréchet距离,数值越小表示生成图像与真实图像越相似。因此,FID是评估生成模型质量的重要指标之一,尤其是在文本到图像生成任务中。
CLIP(Contrastive Language-Image Pre-training)是一种预训练模型,旨在通过对比学习的方式同时处理文本和图像数据。CLIP通过在大规模的文本-图像对上进行训练,使得模型能够学习到文本和图像之间的语义关系。CLIP的核心思想是将文本和图像映射到同一个特征空间中,使得相关的文本和图像在该空间中距离较近,而不相关的文本和图像距离较远。CLIP在许多任务中表现出色,尤其是在零样本学习(zero-shot learning)和跨模态检索(cross-modal retrieval)等领域,成为了文本到图像生成任务中的重要工具之一。
Stable Diffusion的基本原理是什么?
Stable Diffusion的整体架构为:一个文字(或其他形式的输入)编码器,该编码器将输出转换为特征向量;一个生成模型,该模型接受噪声图像和输入文字的特征向量作为输入,输出一个压缩的特征图,且通常是一个基于U-Net Predictor的扩散模型;一个解码器,该解码器将生成模型输出的特征图转换为最终的图像。这三个部分共同构成了Stable Diffusion的生成流程,并且是独立训练的。

编码器:Stable Diffusion通常使用一个预训练的文本编码器(如CLIP)来将输入的文本描述转换为特征向量。这个特征向量捕捉了文本描述中的语义信息,为生成模型提供了条件输入。
解码器:Stable Diffusion的解码器通常是一个基于U-Net架构的神经网络,负责将生成模型输出的压缩特征图转换为最终的图像。对于解码器的训练,分两种情况:如果生成模型生成的是目标图片的压缩图(内容与目标图片一致,只是尺寸更小),则直接提供原图与压缩后的图片分别作为标签和特征就可以训练解码器;如果生成模型生成的是特征图(只是目标图像的某种latent representation,与目标图像看起来“不像”),则需要先训练一个单独的编码器,将目标图像编码成特征图,然后再使用这个编码器的输出作为解码器的训练标签。

- 生成模型:Stable Diffusion的生成模型通常是一个基于U-Net架构的扩散模型,负责从输入的噪声图像和文本特征向量中生成一个压缩图/特征图。如果输出是压缩图,那么生成模型的训练标签就是目标图像的压缩版本,训练过程同DDPM;如果输出是特征图,那么生成模型的训练标签就是目标图像经过编码器处理后的特征图,通过在每一步给这个特征图加入噪声,让模型学习如何预测噪声,生成模型能够逐步生成与文本描述相关的图像特征,最终通过解码器转换为图像。无论生成模型的输出是压缩图还是特征图,训练过程和生成过程都与DDPM类似,只是在输入中加入了文本特征向量作为条件输入,并且输出分别是压缩图或特征图。