前言
很明显,OpenAI的首个视频生成模型sora极大程度的提高了大家对文生图、文生视频的热情,也极大的扩展了大家对AIGC的想象力
第一部分(选读) 一致性模型Consistency Model
注,本文第一部分最早写在23年11月份的这篇文章里《AI绘画神器DALLE 3的解码器:一步生成的扩散模型之Consistency Models》,后因与本文要介绍的LCM关系密切,且也是文生图比较新的进展,故移到本文
1.1 什么是Consistency Models
1.1.1 Consistency Models的背景
关于我为何关注到这个一致性模型,说来话长啊,历程如下
我司LLM项目团队于23年11月份在给一些B端客户做文生图的应用时,对比了各种同类工具,发现DALLE 3确实强,加之也要在论文100课上讲DALLE三代的三篇论文,故此文的2.3节中重点写了下DALLE 3的训练细节:AI绘画原理解析:从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion 在精读DALLE 3的论文时,发现其解码器用到了Consistency Models 当然,后来OpenAI首届开发者大会还正式发布了这个模型,让我对它越发好奇 Consistency Models的第一作者宋飏也证实了该模型是DALLE 3的解码器 宋飏不算扩散圈的新人,因为早在2019年,斯坦福一在读博士宋飏和其导师通过此文《Generative Modeling by Estimating Gradients of the Data Distribution》提出了一种新方法来构建生成模型:即不需要估计数据的概率分布(数据概率的分布类似高维曲面),相反,它估计的是分布的梯度(分布的梯度可以看成是高维曲面的斜率) 至此,已确定必须得研究下这个「AI绘画神器DALLE 3的解码器:一步生成的扩散模型之Consistency Models」了1.1.2 什么是Consistency Models:何以颠覆原来的扩散模型
根据本博客内之前的文章可知,扩散模型广泛应用于DALLE、stable diffusion等文生图的模型中,但一直以来扩散模型的一个缺点就是采样速度较慢,通常需要100-1000的评估步骤才能抽取一个不错的样本
23年5月,OpenAI的Yang Song、Prafulla Dhariwal、Mark Chen、Ilya Sutskever等人提出了Consistency Models(GitHub地址),相比扩散模型,其使用1个步骤就能获得不错的样本,整体效率至少提升100倍同时也极大地降低了算力成本,其中一作是华人宋飏(其本毕清华,博毕斯坦福)
其在连续时间扩散模型的概率流(PF)常微分方程(ODE)的基础上,其轨迹平滑过渡,将数据分布转化为可处理的噪声分布 通过该一致性模型模型,可将任何时间步长的任何点映射到轨迹的起点比如给定一个可将“数据”转换为“噪声”概率流(PF) ODE,可将ODE轨迹上的任何点「例如,下图中的,和),映射到它的原点(例如,生成建模的)」。这些映射的模型被称为一致性模型,因为它们的输出被训练为在同一轨迹上的点(有着一致性)
Given a Probability Flow (PF) ODE that smoothlyconverts data to noise, we learn to map any point (e.g., xt,xt1 , and xT ) on the ODE trajectory to its origin (e.g., x0)for generative modeling. Models of these mappings arecalled consistency models, as their outputs are trained to beconsistent for points on the same trajectory
相比扩散模型,它主要有两大优势:
其一,无需对抗训练(adversarial training),就能直接生成高质量的图像样本 其二,相比扩散模型可能需要几百甚至上千次迭代,一致性模型只需要一两步就能搞定多种图像任务——包括上色、去噪、超分等,都可以在几步之内搞定,而不需要对这些任务进行明确训练(当然,如果进行少样本学习的话,生成效果也会更好)原理上,一致性模型直接把随机的噪声映射到复杂图像上,输出都是同一轨迹上的同一点,所以实现了一步生成
1.1.3 Consistency Models的两种训练方法
一致性模型有两种训练方法
一种是通过蒸馏预训练扩散模型进行训练(Consistency models canbe trained either by distilling pretrained diffusion models)即先利用数值ODE求解器和预训练的扩散模型来生成PF ODE轨迹上的相邻点对(The first methodrelies on using numerical ODE solvers and a pre-trained diffusion model to generate pairs of adjacent points on a PF ODE trajectory)
之后通过最小化这些相邻点对的之间的差异,我们可以有效地将扩散模型提炼为一致性模型(这允许通过一次网络评估生成高质量的样本)
By minimizing the difference between model outputs for these pairs, we can effectively distill a diffusion model into a consistency model, which allows generating high-quality samples with one network evaluation 另外一种,也可以完全作为独立的生成模型进行训练
该方法完全消除了对预训练扩散模型的需要,允许我们单独训练一致性模型。这种方法将一致性模型定位为一个独立的生成模型家族
重要的是,这两种方法都不需要对抗性训练,并且它们都对架构施加了较小的约束,允许使用灵活的神经网络对一致性模型进行参数化
实验结果表明,一致性模型在一步和少步采样方面优于现有的蒸馏技术,如渐进式蒸馏,且当作为独立的生成模型进行训练时,一致性模型可以与现有的一步非对抗生成模型在标准基准测试汇总媲美,如CIFAR-10、ImageNet 64×64和LSUN 256×256
2.1 Consistency Models的推导
2.1.1 对扩散模型推导的回顾
首先回顾一下diffusion的算法原理
假设我们有数据分布 , 扩散模型通过如下的随机微分方程(SDE)对数据分布进行Let pdata(x) denote the data distribution. Diffusion models start by diffusing pdata(x) with a stochastic differential equation (SDE)
其中,,是一个固定的常数,是漂移系数,是扩散系数,是维纳过程的增量 为了通过该式得到一个常微分方程(ODE),需要消除随机项,在某些扩散模型中,比如Score-Based Generative Models,可以使用概率密度函数来代替漂移项,进而定义一个无随机项的轨迹,称为ODE轨迹 一致性模型的作者宋飏等人推导出,上述 SDE 存在一个ODE形式的解轨迹(ODE trajectory)
其中是 的得分函数,而这个得分函数是diffusion model 的直接或者间接学习目标 采用 EDM 中的 setting,设置、,训练一个得分模型
可将上述 ODE 转为
得到 ode 的具体形式后,利用现有的数值 ODE solver,如 Euler, Heun, Lms 等,即可解出 x(.)
当然,考虑到数值精确性,我们往往不会直接求出原图即 ,而是计算出一个,持续这个过程来求出
// 待更
2.2.2 Consistency Models 的推导与源码解读
// 待更
第二部分 Latent Consistency Models(LCM)
2.1 LCM与通用加速器LCM-LoRA
受到上文的Consistency Models的启发「其采用了一种一致性映射技术,巧妙地将普通微分方程(ODE)轨迹上的点映射到它们的起源,从而实现了快速的一步生成」,清华大学交叉信息研究院一团队(包括骆思勉和谭亦钦等人)于2023年11月推出Latent Consistency Models(潜一致性模型,简称LCM)
其通过将引导的逆扩散过程视为增广概率流ODE(PF-ODE)的解决方案,LCMs能够熟练地预测潜在空间中这些ODE的解(By viewing the guided reverse diffusion process as the resolution of an augmented Probability Flow ODE (PF-ODE), LCMs adeptly predict the solution of such ODEs in latent space),该方法显著减少了迭代步骤的需求
LCMs是从预训练的潜在扩散模型(LDMs)中提炼出来的(其paper:https://huggingface.co/papers/2311.05556、其项目主页:https://latent-consistency-models.github.io/),仅需要约32个A100 GPU训练小时 且考虑到对于专门的数据集,如动漫、照片逼真或幻想图像,还得使用潜在一致性微调LCF对LCM进行微调(或使用潜在一致性蒸馏LCD将预训练的LDM蒸馏为LCM),故为避免这种额外的步骤阻碍LCMs在不同数据集上的快速部署,该团队还提出了LCM-LoRA使得可以在自定义数据集上实现快速、无需训练的推理,比如可以直接将该LoRA(即通过LCM蒸馏获得的LoRA参数)插入各种稳定扩散模型中,包括SD-V1.5(Rombach等,2022年),SSD-1B(Segmind,2023年)和SDXL(Podell等,2023年)等
和需要多步迭代传统的扩散模型(如Stable Diffusion)不同,LCM仅用1 - 4步即可达到传统模型30步左右的效果,LCM将文生图生成速度提升了5-10倍,世界自此迈入实时生成式AI的时代
2.2 LCM-LORA
潜在一致性模型LCM使用一阶引导蒸馏方法进行训练,利用预训练自编码器的潜在空间将引导扩散模型蒸馏成LCM。该过程涉及解决增强概率流动ODE(PF-ODE,确保生成的样本遵循导致高质量图像的轨迹),以下是LCD的伪代码
由于潜在一致性模型LCM的蒸馏过程是在预训练扩散模型的参数之上进行的,我们可以将潜在一致性蒸馏视为扩散模型的微调过程。因此,能够使用LoRA
LoRA通过应用低秩分解来更新预训练的权重矩阵
给定一个权重矩阵,更新表示为,其中,,且秩 在训练过程中, 保持不变,只对A和B应用梯度更新,对于输入,修改后的前向传播过程为在这个方程中, 代表输出向量,和的输出在乘以输入 后相加。 通过将完整的参数矩阵分解为两个低秩矩阵的乘积,LoRA显著减少了可训练参数的数量,从而降低了内存使用量
2.3 LCM与其他类似项目的对比
模型名称
介绍
生成速度
训练难度
SD生态兼容性
DeepFloyd IF
高质量、可生成文字,但架构复杂
更慢
更慢
不兼容
Kandinsky 2.2
比SDXL发布更早且质量同样高;兼容ControlNet
类似
类似
不兼容模型和LoRA,兼容ControlNet等部分插件
Wuerstchen V2
质量和SDXL类似
2x - 2.5x
更容易
不兼容
SSD-1B
由Segmind蒸馏自SDXL,质量略微下降
1.6x
更容易
部分兼容
PixArt-α
华为和高校合作研发,高质量
类似
SD1.5十分之一
兼容ControlNet等部分插件
LCM (SDXL, SD1.5)
训练自DreamShaper、SDXL,高质量、速度快
5x -10x
更容易
部分兼容
LCM-LoRA
体积小易用,插入即加速;牺牲部分质量
5x -10x
更容易
兼容全部SD大模型、LoRA、ControlNet,大量插件
截止至2023/11/22,已支持LCM的开源项目:
Stable Diffusion发行版,包括WebUI(原生支持LCM-LoRA,LCM插件支持LCM-SDXL)、ComfyUI、Fooocus(LCM-LoRA)、DrawThings 小模型:LCM-LoRA兼容其他LoRA,ControlNet AnimateDiff WebUI插件第三部分 Stable Diffusion XL Turbo
3.1 SDXL Turbo:给定prompt 实时响应成图
Stability AI 推出了新一代图像合成模型 Stable Diffusion XL Turbo(其论文地址),使得只用在文本框中输入你的想法,SDXL Turbo 就能够迅速响应,生成对应内容。一边输入,一边生成,内容增加、减少,丝毫不影响它的速度
还可以根据已有的图像,更加精细地完成创作。手中只需要拿一张白纸,告诉 SDXL Turbo 你想要一只白猫,字还没打完,小白猫就已经在你的手中了
SDXL Turbo 模型的速度达到了近乎「实时」的程度,于是有人直接连着游戏,获得了 2fps 的风格迁移画面:
据官方博客介绍,在 A100 上,SDXL Turbo 可在 207 毫秒内生成 512x512 图像(即时编码 + 单个去噪步骤 + 解码,fp16),其中单个 UNet 前向评估占用了 67 毫秒,如此,我们可以判断,文生图已经进入「实时」时代
3.2 SDXL关键技术:对抗扩散蒸馏
3.2.1 两个训练目标:对抗损失和蒸馏损失
在SDXL之前
一致性模型(Consistency Models)通过对ODE轨迹施加一致性正则化(by enforcing a consistency regularization on the ODE trajector)来解决即便迭代采样步骤减少到4-8步,依然能保持较好的性能,且在少样本设置下展示了强大的像素模型性能 而LCMs专注于在提炼潜在扩散模型并在4个采样步骤中便取得了不错的效果 包括LCM-LoRA则引入了一种低秩适应[22]训练方法,以高效学习LCM模块,可以插入到SD和SDXL [50, 54]的不同检查点中(LCMs focus on distilling latent diffusion models and achieve impressive performance at 4 sampling steps. Recently, LCM-LoRA [40] introduced a low-rank adaptation [22] training for efficiently learning LCM modules, which can be plugged into different checkpoints for SD and SDXL [50, 54]) InstaFlow [36]提出使用修正流[35]来促进更好的蒸馏过程(InstaFlow [36]propose to use Rectified Flows [35] to facilitate a better distillation proces)但以上这些方法都有共同的缺陷:在4个步骤中合成的样本通常看起来模糊,并且存在明显的伪影
考虑到GANs也可以作为独立的单步模型进行文本到图像合成的训练 [25,59],且采样速度不错,当然,性能落后于基于扩散的模型。那何不在不破坏平衡的情况下,扩展GAN并整合神经网络架构呢?
而SDXL则引入了一种名为对抗扩散蒸馏(Adversarial Diffusion Distillation,ADD)的技术,可以在仅1-4步内高效采样大规模基础图像扩散模型,并保持高图像质量(a novel training approach that efficiently samples large-scale foundational image diffusion models in just 1–4 steps while maintaining high image quality) 其使用得分蒸馏来利用大规模现成的图像扩散模型作为教师信号,结合对抗性损失,以确保即使在一到两个采样步骤内也能保持高图像保真度(We use score distillation to leverage large-scale off-the-shelf image diffusion models as a teacher signal in combination with an adversarial loss to ensure high image fidelity even in the low-step regime of one or two sampling steps)具体而言,研究者引入了两个训练目标的组合:
对抗损失,对抗损失迫使模型在每次前向传递时直接生成位于真实图像流形上的样本,避免了其他蒸馏方法中常见的模糊和其他伪影 分数蒸馏采样SDS 相对应的蒸馏损失,蒸馏损失使用另一个预训练(且固定)的扩散模型作为教师(比如可以使用预训练的扩散模型权重初始化模型),有效利用预训练diffusion model的丰富知识,从而显著改善对抗性损失的训练,类似通过CLIP改善文本对齐最后,不使用仅解码器的架构来进行GAN训练,而是采用标准的扩散模型框架
3.2.2 训练的具体过程
ADD-student从预训练的UNet-DM中初始化权重 ,具有可训练权重的鉴别器,以及具有冻结权重的DM teacher(The ADD-student is initialized from a pretrained UNet-DM with weights θ, a discriminator with trainable weights ϕ, and a DM teacher with frozen weights ψ)
在训练过程中
ADD-student从噪声数据 生成样本。 噪声数据点是通过正向扩散过程从真实图像数据集 生成的。 在我们的实验中,我们使用与学生DM相同的系数和,并从选择的学生时间步长集合中均匀采样 生成的样本和真实图像被传递给鉴别器Discriminator,鉴别器的目标是区分它们 为了从DM teacher那里获得知识,我们将学生样本通过教师的前向过程扩散到(we diffuse student samples ˆxθ with the teacher’s forward process toˆxθ,t),并使用教师的去噪预测作为蒸馏损失的重建目标(use the teacher’s denoising prediction ˆxψ (ˆxθ,t, t)as a reconstruction target for the distillation loss Ldistill)因此,总体目标是
// 待更
第四部分 SD最新版Stable Diffusion3
考虑到stable diffusion的原理在此文《AI绘画原理解析:从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion》中已经讲的很清楚了,故本文主要讲下最新版本的SD3(其对应的paper为《Scaling Rectified Flow Transformers for High-Resolution Image Synthesis》)
由于固定的文本表示直接输入模型并不理想(e.g., via cross-attention (Vaswani et al.,2017; Rombach et al., 2022))
Stability AI在U-ViT、DiT(这两架构的介绍见此文的第2.3节)的基础上并提出了一种新的架构,该架构包含可学习的streams,用于图像和文本token,从而实现了它们之间的双向信息流动(which enables a two-way flow of information between them) 且将此与改进的校正流公式(rectified flow formulation)相结合4.1 Flow Matching:提高采样器性能
对应的论文为《Flow Matching for Generative Modeling》
// 待更
4.2 模型结构:
对于文本条件下的图像采样,模型必须同时考虑文本和图像两种模态
类似LDM (Rombach et al., 2022),用于在预训练自编码器的潜空间中训练文本到图像模型。类似于将图像编码为潜空间表示,我们还遵循之前的方法(Saharia et al., 2022b; Balaji et al., 2022),使用预训练的冻结文本模型对文本条件c 进行编码Our general setup follows LDM (Rombach et al., 2022) for training text-to-image models in the latent space of a pretrained autoencoder. Similar to the encoding of images to
latent representations, we also follow previous approaches (Saharia et al., 2022b; Balaji et al., 2022) and encode the text conditioning c using pretrained, frozen text models. Details can be found in Appendix B.2 DiT仅考虑类条件图像生成,并使用调制机制将网络与扩散过程的时间步长和类标签相关联(DiT only considers class conditional image generation and uses a modulation mechanism to condition the network on both the timestep of the diffusion process and the class label)
类似地,我们使用时间步长 和 的嵌入作为调制机制的输入。 然而,由于汇集的文本表示仅保留关于文本输入的粗粒度信息(Podell等人,2023),网络还需要来自序列表示的信
Similarly, we use embeddings of the timestep t and cvec as inputs to the modulation mechanism. However, as the pooled text representation retains only coarse-grained infor- mation about the text input (Podell et al., 2023), the network also requires information from the sequence representation cctxt.
因此,我们构建一个由文本和图像输入的嵌入组成的序列。具体而言,我们将“位置编码和平坦化的 2 × 2像素表示的patch编码 ”添加到长度为的patch编码序列中
We construct a sequence consisting of embeddings of the text and image inputs. Specifically, we add positional encodings and flatten 2 × 2 patches of the latent pixel rep-resentation x∈ Rh×w×c to a patch encoding sequence of length 1 2 · h · 12 · w.
在将此patch编码和文本编码嵌入到相同的维度之后,连接这两个序列
After embedding this patch encoding and the text encoding cctxt to a common dimensionality concatenate the two sequences
4.3.1 借鉴DALLE 3的重字幕技术:提高文本-图像数据集的质量
由于DALLE 3已经证明了人类对图像本身的标题或描述通常忽略图片的很多细节(包括图中的背景、特定的场景、出现的文字等),而如果用视觉语言模型为图像数据集打上更详细的注释,则可以更好的训练text2image模型
故,SD3使用视觉语言模型CogVLM为他们的图像数据集创建合成的注释(synthetic annotations),不过考虑到合成标题可能导致文本到图像模型忘记VLM知识语料库中不存在的某些概念,故他们使用50%的原始标题和50%的合成标题(且做了实验,证明这种一半原始标题 一半合成标题的效果确实明显好于100%都是原始标题的情况)
4.3.2 在DiT的基础上,提出MM-DiT
遵循DiT并应用一系列调制注意力和MLP(We then follow DiT and apply a sequence of modulated attention and MLPs)
对于 MM-DiT,如上图左侧a所示,我们比较具有两组权重和三组权重的模型,其中后者分别处理CLIP、T5 token。 请注意,DiT(使用文本和图像标记的串联)可以被解释为MM-DiT的一个特例,其中只有一个所有模态共享的权重集 由于文本和图像嵌入在概念上非常不同,SD3为两种模态使用两套独立的权重,如上图右侧b所示,这相当于为每种模态拥有两个独立的transformer,但在注意力操作中连接两种模态的序列,以便两种表示可以在各自的空间中工作,同时考虑另一种表示Since text and image embeddings are conceptually quite different, we use two separate sets of weights for the two modalities. As shown in Figure 2b, this is equivalent to having two independent transformers for each modality, but joining the sequences of the two modalities for the attention operation, such that both representations can work in their own space yet take the other one into account
// 待更
第五部分 SDXL-Lightning
// 待更
参考文献与推荐阅读
图像生成发展起源:从VAE、扩散模型DDPM、DETR到ViT、Swin transformer AI绘画原理解析:从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion 几篇新闻稿4.13,OpenAI新生成模型开源炸场!比Diffusion更快更强,清华校友一作
11.9,OpenAI上线新功能太强了,服务器瞬间被挤爆
11.11,OpenAI救了Stable Diffusion!开源Dall·E3同款解码器,来自Ilya宋飏等 Consistency Models
Yang Song, Prafulla Dhariwal, Mark Chen, Ilya Sutskever 一步生成的扩散模型:Consistency Models SDXL Turbo、LCM相继发布,AI画图进入实时生成时代:字打多快,出图就有多快 Stable Diffusion 3震撼发布,采用Sora同源技术,文字终于不乱码了 Scalable High-Resolution Pixel-Space Image Synthesis with Hourglass Diffusion Transformers,提出了HDiT