笔记|扩散模型(一〇):Dreambooth 理论与实现|主题驱动生成
论文链接:DreamBooth:
Fine Tuning Text-to-Image Diffusion Models for Subject-Driven
Generation
项目主页:https://dreambooth.github.io/
非官方实现:huggingface/diffusers、XavierXiao/Dreambooth-Stable-Diffusion
时隔快两周继续更新一下 AIGC
系列的学习笔记,这篇文章算是比较火的一个工作,而且很多 AI
照相馆应用的背后也是这个算法。这一算法关注的任务是主题驱动生成,也就是给定某个特定物体(或者某个人或动物)的几张图像对模型进行微调,微调后就能生成该主题在各种场景、姿态下的图像。具体效果如下图所示,给出几张柯基的照片对模型进行微调,模型就能生成这只小狗的各种图像。
Dreambooth
Dreambooth
这个方法使用的依然是基础的文生图扩散模型,不过对这类模型进行了「个性化」。具体来说就是用给出的几张图像以及设计好的
prompt 对原始模型进行微调。微调的主要目的是把要生成的目标植入到输出
domain ...
笔记|扩散模型(九):Imagen 理论与实现
论文链接:Photorealistic Text-to-Image
Diffusion Models with Deep Language Understanding
非官方实现:lucidrains/imagen-pytorch
Imagen 是 Google Research 的文生图工作,这个工作并没有沿用 Stable
Diffusion 的架构,而是级联了一系列普通的 DDPM
模型。其主要的贡献有以下几个方面:
使用比较大的文本模型进行文本嵌入,可以获得比使用 CLIP
更好的文本理解能力;
在采样阶段引入了一种动态阈值的方法,可以利用更高的 guidance scale
来生成更真实、细节更丰富的图像(这里的阈值是控制 \(\mathbf{x}\) 的范围);
改良了 UNet,提出 Efficient
UNet,使模型更简单、收敛更快、内存消耗更少。
该模型的架构如下图所示,可以看到使用了一个条件生成的 diffusion
模型以及两个超分辨率模型,每个模型都以文本模型的 embedding
作为条件,先生成一个 64 分辨率的图像,然后逐步超分辨率到 1024 ...
笔记|扩散模型(八):DALL-E 2 (unCLIP) 理论与实现
论文链接:Hierarchical
Text-Conditional Image Generation with CLIP Latents
非官方实现:lucidrains/DALLE2-pytorch
DALL-E 2 是一个比较经典的文生图模型,虽然和 Stable Diffusion
的架构有些区别,但是也利用了 CLIP
的文本-图像对齐能力实现了用文本作为条件进行图像生成。由于 CLIP
是输入文本和图像获得相应的特征,而 DALL-E 2
是将输入的文本转化为特征再转换为图像,相当于把 CLIP
中的图像编码器反转了过来,所以这个方法也被称为
unCLIP。这个模型主要由三个部分组成:
CLIP 模型:负责将条件文本转换到文本-图像的统一特征空间中;
prior 模型:将文本特征转换为图像特征,用于后续的图像生成;
decoer 模型:将从 prior
获得的图像特征转换为具体的生成图像,相当于反转了 CLIP 中的图像
encoder。
模型的架构图如下图所示,虚线的上方是 CLIP 模型,下方是 prior 和
decoder 模型。
DALL-E 2 的训练 ...
笔记|扩散模型(七):Latent Diffusion Models(Stable Diffusion)理论与实现
论文链接:High-Resolution Image Synthesis
with Latent Diffusion Models
官方实现:CompVis/latent-diffusion、CompVis/stable-diffusion
这一篇文章的内容是 Latent Diffusion Models(LDM),也就是大名鼎鼎的
Stable
Diffusion。先前的扩散模型一直面临的比较大的问题是采样空间太大,学习的噪声维度和图像的维度是相同的。当进行高分辨率图像生成时,需要的计算资源会急剧增加,虽然
DDIM 等工作已经对此有所改善,但效果依然有限。Stable Diffusion
的方法非常巧妙,其把扩散过程转换到了低维度的隐空间中,解决了这个问题。
方法介绍
本方法的整体结构如下图所示,主要分为三部分:最左侧的红框对应于感知图像压缩,中间的绿框对应
Latent Diffusion
Models,右侧的白框表示生成条件,下面将分别介绍这三个部分。
感知图像压缩
LDM
把图像生成过程从原始的图像像素空间转换到了一个隐空间,具体来说,对于一个维度为
\(\mathb ...
笔记|扩散模型(六):DALL-E 理论与实现|自回归文生图
论文链接:Zero-Shot
Text-to-Image Generation
官方实现:openai/DALL-E
非官方实现:kuprel/min-dalle、lucidrains/DALLE-pytorch
虽然 DALL-E 并不是基于扩散模型的方法,但是因为它的后续工作 DALL-E 2
和 DALL-E 3 都是基于扩散模型的,所以这个方法也放到扩散模型系列里。
DALL-E 是 OpenAI
比较早期的文生图模型,和一些早期的多模态方法的做法类似,其主要的思想是将图像的
token 和文本的 token 当作同一个序列输入
Transformer,利用自回归生成能力进行图像生成。除了使用 Transformer
进行生成之外,由于图像的像素数量相比文本 token
来说过多,因此需要将图像也预先进行 tokenization,这里使用的模型是
VQ-VAE(也就是 dVAE);为了优先输出生成质量比较高的结果,这里使用 CLIP
对结果的质量进行了排序。总结来说,DALL-E 共包括三个部分:
Transformer:用来进行自回归生成;
VQ-VAE:将图像 t ...
笔记|扩散模型(五):Classifier-Free Guidance 理论与实现
论文链接:Classifier-Free Diffusion
Guidance
上一篇文章我们学习了 Classifier
Guidance,这种方法通过引入一个额外的分类器,使用梯度引导的方式成功地实现了条件生成。虽然
Classifier Guidance 可以直接复用训练好的 diffusion
models,不过这种方法的问题是很明显的,首先需要额外训练一个分类器,而且这个分类器不仅仅分类一般的图像,还需要分类加噪后的图像,这会给方法带来比较大的额外开销;其次分类器训练完成后类别就固定下来了,如果希望生成新的类别就需要重新训练分类器。这篇文章学习的
Classifier-Free Guidance 则可以比较好地解决这些问题。
Classifier-Free Guidance
在 Classifier Guidance 中,从条件概率 \(p(\mathbf{x}_t|y)\) 出发,利用贝叶斯公式和
score function
推导出了以下公式,在下面的公式中,等号右侧的第一项已知,第二项则需要引入分类器进行计算。
\[
\nabla_{\mathbf{x}_t}\lo ...
笔记|扩散模型(四):Classifier Guidance 理论与实现
论文链接:Diffusion
Models Beat GANs on Image Synthesis
在前边的几篇文章中我们已经学习了 DDPM
以及分别对其训练和采样过程进行改进的工作,不过这些方法都只能进行无条件生成,而无法对生成过程进行控制。我们这次学习的不再是无条件生成,而是通过一定方式对生成过程进行控制,比较常见的有两种:Classifier
Guidance 与 Classifier-Free Guidance,本文首先介绍第一种。
一些工作背景
实际上 Classifier Guidance 是上边给出的论文工作中的一部分,虽然
Improved DDPM 已经比较有效地提升了 DDPM
的生成效果,但在一些大数据集上的效果仍然不如当时主流的生成模型 GAN。因此
OpenAI 在 Improved DDPM
的基础上继续进行了一些改进,主要是一些工程上的改进:
在模型的尺寸基本不变的前提下,提升模型的深度与宽度之比,相当于使用更深的模型;
增加多头注意力中 head 的数量;
使用多分辨率 attention,即 32x32、16x16 和 8x8,而不是只在 1 ...
笔记|Score-based Generative Models(二):基于 SDE 的模型
上一篇文章中我们介绍了 score-based model
的基本概念,包括其如何对分布进行建模、如何从建模的分布中进行采样以及通过对分布进行扰动提高其建模精度的方式。在这篇文章中我们将介绍的是如何使用随机微分方程(也就是
SDE)进行 score-based 建模。
随机微分方程简介
首先我们先介绍一些随机微分方程的基本知识以便理解。
我们首先举一个常微分方程(ODE)的例子,例如下面的一个常微分方程: \[
\frac{\mathrm{d}\mathbf{x}}{\mathrm{d}t}=\mathbf{f}(\mathbf{x},t)\quad\mathrm{or}\quad\mathrm{d}\mathbf{x}=\mathbf{f}(\mathbf{x},t)\mathrm{d}t
\] 其中的 \(\mathbf{f}(\mathbf{x},t)\) 是一个关于 \(\mathbf{x}\) 和 \(t\) 的函数,其描述了 \(\mathrm{x}\)
随时间的变化趋势,如下面图中的左图所示。直观地说,\(\mathbf{f}(\mathbf{x},t)\)
对应于图中的 ...
笔记|Score-based Generative Models(一):基础理论
这篇文章应该属于 Diffusion Models
系列的一个番外篇,虽然基于分数的生成模型包括了一系列比较复杂的研究,不过之所以写这篇博客是为了给
score-based diffusion models
的学习做准备,所以应该不会面面俱到,主要还是介绍基础知识。
正式开始介绍之前首先解答一下这个问题:score-based
模型是什么东西,微分方程在这个模型里到底有什么用?我们知道生成模型基本都是从某个现有的分布中进行采样得到生成的样本,为此模型需要完成对分布的建模。根据建模方式的不同可以分为隐式建模(例如
GAN、diffusion models)和显式建模(例如 VAE、normalizing
flows)。和上述的模型相同,score-based
模型也是用一定方式对分布进行了建模。具体而言,这类模型建模的对象是概率分布函数
log 的梯度,也就是 score
function,而为了对这个建模对象进行学习,需要使用一种叫做
score matching 的技术,这也是 score-based
模型名字的来源。至于第二个问题,微分方程的作用本篇文章暂时不介绍,下一篇文章再进行 ...
笔记|扩散模型(三):Improved DDPM 理论与实现
论文链接:Improved
Denoising Diffusion Probabilistic Models
在前边两篇文章中我们学习了 DDPM 和 DDIM,这篇文章介绍的是 Improved
DDPM,是一个针对 DDPM 生成效果进行改进的工作。
虽然 DDPM 在生成任务上取得了不错的效果,但如果使用一些 metric 对 DDPM
进行评价,就会发现其虽然能在 FID 和 Inception Score
上获得不错的效果,但在负对数似然(Negative
Log-likelihood,NLL)这个指标上表现不够好。根据 VQ-VAE2 文章中的观点,NLL
上的表现体现的是模型捕捉数据整体分布的能力。而且有工作表明即使在 NLL
指标上仅有微小的提升,就会在生成效果和特征表征能力上有很大的提升。
Improved DDPM 主要是针对 DDPM
的训练过程进行改进,主要从两个方面进行改进:
不使用 DDPM 原有的固定方差,而是使用可学习的方差;
改进了加噪过程,使用余弦形式的 Scheduler,而不是线性
Scheduler。
可学习的方差
我们知道 DDPM ...