DiT是基于Transformer架构的扩散模型。用于各种图像(SD3、FLUX等)和视频(Sora等)视觉生成任务。
DiT证实了Transformer思想与扩散模型结合的有效性,并且还验证了Transformer架构在扩散模型上具备较强的Scaling能力,在稳步增大DiT模型参数目与加强数据质量时,DiT的生成性能稳步提升。
此中最大的DiT-XL/2模型在ImageNet 256x256的种别条件生成上达到了当时的SOTA【最先进的(State Of The Art)】(FID为2.27)性能。同时在SD3和FLUX.1中也阐明了较强的Scaling能力。
架构
左侧主要架构图:训练条件潜在DiT模型(conditional latent DiT models), 潜在输入和条件被分解成patch并结合条件信息通过几个DiT blocks处置惩罚。本质就是噪声图片减掉预测的噪声以实现渐渐复原。
DiT blocks前: 比如当输入是一张256x256x3的图片,得到32x32x4的Noised Latent,之后进行Patch和位置编码,结合当前的Timestep t、Label y作为输入。
DiT blocks后: 经过N个Dit Block(基于transformer)通过MLP进行输出,在 DiT 模型 的最后一个 Transformer 块(DiT block)之后,需要将生成的图像 token 序列解码为以下两项输出:噪声“Noise预测”以及对应的协方差矩阵,最后经过T个step采样,得到32x32x4的降噪后的latent。
右侧DiT Block实现方式:DiT blocks的细节,作者试验了标准transformer块的变体,这些变体通过自适应层归一化、交叉留意和额外输入token来加入条件(incorporate conditioning via adaptive layer norm, cross-attention and extra input tokens,这个coditioning相当于就是带条件的去噪),此中自适应层归一化结果最好。
DiT在这个图像Patch化的过程中,设计了patch size超参数,它直接决定了图像tokens的大小和数目,从而影响DiT模型的团体计算量。DiT论文中共设置了三种patch size,分别是 2, 4, 8。patch size 为 2*2 是最理想的。(结论来自:视频生成Sora的全面剖析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等)
Latent Diffusion Transformer结构中,输入的图像在经过VAE编码器处置惩罚后,生成一个Latent特征,Patchify的目的是将Latent特征转换成一系列 T 个 token(将Latent特征进行Patch化),每个 token 的维度为 d。Patchify 创建的 token 数目 T 由补丁大小超参数 p 决定。如下图所示,将 p 减半会使 T 增长四倍,因此至少使整个 transformer Gflops 增长四倍。具体流程如下图所示:
图4. DiT 的输入规格 。给定patch size是 p × p p \times p p×p,空间表现(来自 VAE 的加噪潜变量),其外形为 I × I × C I \times I \times C I×I×C,会被“划分成补丁”(patchified)为一个长度为 T = ( I / p ) 2 T = (I/p)^2 T=(I/p)2 的序列,埋伏维度为 d d d。较小的补丁大小 p p p 会导致序列长度更长,因此需要更多的计算量(以 Gflops 表现)。
位置编码
在执行 patchify 之后,我们对全部输入 token 应用标准的 ViT 基于频率的位置嵌入(正弦-余弦版本)。图像tokens后,还要加上Positional Embeddings进行位置标记,DiT中采取经典的非学习sin&cosine位置编码技术。
ViT(vision transformer)采取的是2D Frequency Embeddings(两个1D Frequency Embeddings进行concat操作),详情请参考:深度学习——3种常见的Transformer位置编码【sin/cos、基于频率的二维位置编码(2D Frequency Embeddings)、RoPE】
DiT Block模块详细信息
相反,AdaLN 仅通过动态生成缩放参数 γ ada \gamma_{\text{ada}} γada 和偏移参数 β ada \beta_{\text{ada}} βada,以条件信息 c c c 为输入,用于调解 Layer Normalization 的行为:
AdaLN ( x , c ) = γ ada ⋅ x − μ σ + ϵ + β ada \text{AdaLN}(x, c) = \gamma_{\text{ada}} \cdot \frac{x - \mu}{\sigma + \epsilon} + \beta_{\text{ada}} AdaLN(x,c)=γada⋅σ+ϵx−μ+βada
γ ada = f γ ( c ) \gamma_{\text{ada}} = f_\gamma(c) γada=fγ(c):由条件信息 c c c 通过神经网络(如 MLP)生成的缩放参数。
β ada = f β ( c ) \beta_{\text{ada}} = f_\beta(c) βada=fβ(c):由条件信息 c c c 通过神经网络生成的偏移参数。
阐明:此中 f ( c ) f(c) f(c) 是一个小型神经网络(通常是一个多层感知机,MLP),以条件信息(如时间步 t t t 和种别 c c c 的嵌入向量)为输入,输出对应的 γ , β \gamma, \beta γ,β。
生成自适应的缩放和偏移参数 利用提取的条件信息,生成自适应的缩放和偏移参数。假设输入条件为 c c c,经过一个神经网络模块(比如全连接层等)生成缩放参数和偏移参数如下:
γ ada = f γ ( c ) , β ada = f β ( c ) \gamma_{\text{ada}} = f_{\gamma}(c), \quad \beta_{\text{ada}} = f_{\beta}(c) γada=fγ(c),βada=fβ(c)
使用自适应参数 使用这些自适应参数对输入权重进行 Layer Normalization 处置惩罚:
AdaLN ( x , c ) = γ ada ⋅ x − μ σ + ϵ + β ada \text{AdaLN}(x, c) = \gamma_{\text{ada}} \cdot \frac{x - \mu}{\sigma + \epsilon} + \beta_{\text{ada}} AdaLN(x,c)=γada⋅σ+ϵx−μ+βada
生成自适应的缩放和偏移参数、缩放参数 α \alpha α:
利用提取的条件信息,生成自适应的缩放和偏移参数。假设输入条件为 c c c,经过一个神经网络模块(比如全连接层等)生成缩放参数和偏移参数如下:
γ ada = f γ ( c ) , β ada = f β ( c ) \gamma_{\text{ada}} = f_{\gamma}(c), \quad \beta_{\text{ada}} = f_{\beta}(c) γada=fγ(c),βada=fβ(c)
为残差路径增长一个新的维度缩放参数 α \alpha α,由条件信息动态生成:
α ada = f α ( c ) \alpha_{\text{ada}} = f_{\alpha}(c) αada=fα(c) 初始化为零:在训练开始时, α ada = 0 \alpha_{\text{ada}} = 0 αada=0,使得模块输出仅为主路径输出,实现恒等初始化。
使用自适应参数、缩放参数 α \alpha α:
在 AdaLN 的基础上,加入 α ada \alpha_{\text{ada}} αada 对残差路径进行缩放控制:
AdaLN-Zero ( x , c ) = α ada ⋅ ( γ ada ⋅ x − μ σ + ϵ + β ada ) \text{AdaLN-Zero}(x, c) = \alpha_{\text{ada}} \cdot \left(\gamma_{\text{ada}} \cdot \frac{x - \mu}{\sigma + \epsilon} + \beta_{\text{ada}}\right) AdaLN-Zero(x,c)=αada⋅(γada⋅σ+ϵx−μ+βada)
残差路径的输出被动态调节:通过 α ada \alpha_{\text{ada}} αada 的渐渐增长,残差路径的影响逐渐加强。
当 α ada = 0 \alpha_{\text{ada}} = 0 αada=0 时,整个模块行为等效于恒等函数。