AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning
github:https://github.com/guoyww/animatediff/
论文:https://arxiv.org/abs/2307.04725
AnimateDiff 通过预训练的运动模块(motionmodule),直接将现有的个性化文本到图像 (T2I) 模型转换为相应的动画生成器,而无需进行特定于模型的调整。这是一个实用的框架,用于对个性化 T2I 模型进行动画处理。只需训练一次即可无缝集成到源自同一基础 T2I 的任何个性化 T2I 中。 经过训练后,运动模块可以插入个性化T2I模型中,形成个性化动画生成器。
MOTIVATION
文章的动机是要解决现有高质量个性化文本到图像(T2I)模型无法生成动画的问题。尽管现有的T2I模型和个性化技术(如DreamBooth和LoRA)可以以较低成本将想象力转化为高质量图像,但是将动态运动添加到这些个性化T2I模型中,使其生成动画仍然是一个挑战。
CONTRIBUTION
- 提出了 AnimateDiff,这是一个实用的pipeline,无需进行特定的微调即可实现任何个性化 T2Is 的动画生成能力;
- 验证 Transformer 架构足以对运动先验进行建模,这为视频生成提供了宝贵的见解;
- 提出了MotionLoRA,一种轻量级微调技术,使预训练的运动模块适应新的运动模式;
- 我们用代表性社区模型全面评估我们的方法,并将其与学术基线和商业工具(例如 Gen2 (2023) 和 Pika Labs (2023))进行比较。
PRELIMINARY
Stable Diffusion
Stable Diffusion是本文选择作为基础文本到图像(T2I)模型的开源模型。它因其拥有一个发达的社区和许多高质量的个性化T2I模型而受到青睐。以下是关于Stable Diffusion的要点:
- 工作原理:SD在预训练的自动编码器的潜在空间内执行扩散过程,使用编码器 E ( ⋅ ) E(\cdot) E(⋅)和解码器 D ( ⋅ ) D(\cdot) D(⋅)。
- 训练过程:在训练时,图像通过编码器转换为潜在表示 z 0 = E ( x 0 ) z_0 = E(x_0) z0=E(x0),然后通过前向扩散过程逐渐加入噪声,生成 z t z_t zt。这个过程由预定义的 α ˉ t \bar{\alpha}_t αˉt控制每一步的噪声强度。
- 数学表达:前向扩散的数学公式为:
z t = α ˉ t z 0 + 1 − α ˉ t ϵ , ϵ ∼ N ( 0 , I ) z_t = \sqrt{\bar{\alpha}_t} z_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, \quad \epsilon \sim \mathcal{N}(0, I) zt=αˉtz0+1−αˉtϵ,ϵ∼N(0,I) - 去噪网络:去噪网络 ϵ θ ( ⋅ ) \epsilon_\theta(\cdot) ϵθ(⋅)学习逆转扩散过程,通过预测添加的噪声,并通过均方误差(MSE)损失函数来优化。
- 损失函数:MSE损失函数定义为:
L = E E ( x 0 ) , y , ϵ ∼ N ( 0 , I ) , t [ ∥ ϵ − ϵ θ ( z t , t , τ θ ( y ) ) ∥ 2 2 ] \mathcal{L} = \mathbb{E}_{\mathcal{E}(x_0), y, \epsilon \sim \mathcal{N}(0, I), t} \left[ \| \epsilon - \epsilon_\theta(z_t, t, \tau_\theta(y)) \|_2^2 \right] L=EE(x0),y,ϵ∼N(0,I),t[∥ϵ−ϵθ(zt,t,τθ(y))∥22] - 网络结构:在SD中,去噪网络实现为一个UNet,包含四个分辨率级别的下采样/上采样块对以及一个中间块。每个网络块由ResNet、空间自注意力层和引入文本条件的交叉注意力层组成。
Low-Rank Adaptation (LoRA)
LoRA是一种加速大型模型微调的方法,最初用于语言模型的适应。以下是LoRA的关键点:
- 目的:LoRA旨在优化新引入的权重,而不是重新训练所有模型参数,以加快大型模型的微调过程。
- 原理:与传统的微调方法不同,LoRA不是重新训练模型的所有参数,而是引入新的参数——秩分解矩阵对,并且只优化这些新参数。LoRA限制了可训练参数的数量,同时保持原始权重不变,减少了灾难性遗忘的风险。
- 数学表达:引入LoRA后的模型权重更新为:
W ′ = W + Δ W = W + A B T \mathcal{W}' = \mathcal{W} + \Delta \mathcal{W} = \mathcal{W} + AB^T W′=W+ΔW=W+ABT- LoRA通过添加秩分解矩阵对A和B来实现,其中 A ∈ R m × r A \in \mathbb{R}^{m \times r} A∈Rm×r和 B ∈ R n × r B \in \mathbb{R}^{n \times r} B∈Rn×r.r是超参数,代表LoRA层的秩。
- 这些矩阵被视为预训练模型权重 W ∈ R m × n W \in \mathbb{R}^{m \times n} W∈Rm×n的残差,即通过 W ′ = W + A B T W' = W + AB^T W′=W+ABT更新模型权重。
- 只有新引入的矩阵A和B被优化,而原始的权重W保持不变(冻结)。
其中,A和B是秩分解矩阵对,r是超参数,表示LoRA层的秩。
AnimateDiff
AnimateDiff的核心是核心是从视频数据中学习可转移的运动先验,无需特定调整即可应用于个性化 T2Is。通过训练 AnimateDiff 的三个组件(即域适配器、运动模块和 MotionLoRA)来实现这一目标。
首先,训练域适配器domain adapter用于以减轻训练视频造成的负面影响。 其次,插入运动模块motion module并在视频上进行训练,以学习一般运动先验。 最后,利用MotionLoRA在一些参考视频上进行训练,以使预训练的运动模块适应新的运动模式。
Domain Adapter-使用域适配器减轻训练数据的负面影响
公开可用的视频训练数据集由于收集困难,其视觉质量通常低于图像数据集。单独处理视频帧时,可能会遇到一些质量上的问题,这导致训练基础文本到图像(T2I)模型的高质量图像数据集与用于学习运动先验的目标视频数据集之间存在显著的质量域差异。这种质量差异可能会限制直接在原始视频数据上训练时动画生成管道的质量。
- 视频数据集WebVid:主要由真实世界的视频录像组成,可能包含运动模糊、压缩伪影和水印。
- 图像数据集LAIONAesthetic:包含更高质量的内容,如艺术画作和专业摄影。
解决方案:领域适配器(Domain Adapter):
-
目的:为了避免运动模块学习到质量差异,同时保留基础T2I的知识,提出了一个独立的网络——Domain Adapter。
-
实现:在推理时不使用领域适配器,以减少上述域间差异造成的负面影响。
使用低秩适应(LoRA)技术实现领域适配器层,并将它们插入到基础T2I模型的自注意力/交叉注意力层中。 -
公式表示:以查询投影(query (Q) projection)为例,内部特征Z经过投影后,通过领域适配器层的变换可以表示为:
Q = W Q z + AdapterLayer ( z ) = W Q z + α ⋅ A B T z , Q = \mathcal{W}^Q z + \text{AdapterLayer}(z) = \mathcal{W}^Q z + \alpha \cdot AB^T z, \quad Q=WQz+AdapterLayer(z)=WQz+α⋅ABTz,-
α = 1 \alpha = 1 α=1是一个标量,可以在推理时调整到其他值(设置为0可以完全移除领域适配器的效果)。
-
W Q \mathcal{W}^Q WQ:查询(Query)的权重矩阵,用于将内部特征( z )投影到查询空间。
-
z z z:内部特征向量,它是从视频帧或图像中提取的原始特征表示。
-
AdapterLayer ( z ) \text{AdapterLayer}(z) AdapterLayer(z):Domain Adapter对特征z的作用。这一层是为了调整特征,使其适应不同数据集之间的分布差异。
-
A,B:这两个矩阵是LoRA(Low-Rank Adaptation)中的秩分解矩阵对。它们用于以低秩方式调整模型权重,从而减少训练参数的数量并避免灾难性遗忘。 A B T AB^T ABT代表了领域适配器层对特征z的调整量,通过低秩结构实现
-
-
优化目标:仅优化领域适配器的参数,使用从视频数据集中随机采样的静态帧,优化目标与 z t = α ˉ t z 0 + 1 − α ˉ t ϵ , ϵ ∼ N ( 0 , I ) z_t = \sqrt{\bar{\alpha}_t} z_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, \quad \epsilon \sim \mathcal{N}(0, I) zt=αˉtz0+1−αˉtϵ,ϵ∼N(0,I)相同。
damain adapter在训练阶段和推理阶段的应用
- 训练阶段(Training Phase):
- 目的:领域适配器在训练阶段的目的是调整模型,以适应视频数据集和图像数据集之间的视觉质量差异。由于视频数据集通常包含更多的噪声和较低的分辨率,领域适配器帮助模型学习如何从这些数据中提取有用的运动信息,同时忽略不相关的视觉伪影。
- 实现:通过在模型的自注意力或交叉注意力层中引入额外的参数(使用LoRA技术),领域适配器学习将视频帧的特征映射调整到与基础T2I模型训练时使用的特征空间。
- 推理阶段(Inference Phase):
- 灵活性:在推理阶段,领域适配器的使用是可选的,并且其贡献可以通过调整α值来控制。这种设计提供了灵活性,允许用户根据生成动画的特定需求来调整领域适配器的影响。
- 调整:如果用户希望生成的动画更加贴近原始T2I模型的风格,可以适当调整α值,使领域适配器对输出的影响减小。相反,如果用户希望动画更多地反映视频数据的特点,可以增加α值。
MOTION MODULE-使用运动模块学习运动先决条件
为了在预训练的 T2I 之上沿时间维度对运动动力学进行建模,必须 1) 膨胀(inflate) 2 维扩散模型以处理 3 维视频数据,2) 设计一个子模块(sub-module)以实现沿时间维度的有效信息交换。
Network Inflation
基础T2I模型中的预训练图像层能够捕捉高质量的内容先验知识(high-quality con-tent priors)。为了更好的利用这些知识,网络膨胀的一个更好的方法是让这些图像层(image layers)独立处理视频帧(video frames)。
网络膨胀的方法:
通过修改模型结构,使其能够接受5D视频张量 x ∈ R b × c × f × h × w x \in \mathbb{R}^{b \times c \times f \times h \times w} x∈Rb×c×f×h×w作为输入。作者将原模型中每个2D卷积及attention层转换到仅关注空间的伪3D层,将frame维度合并到batch维度。新引入的运动模块可在每个batch中跨帧执行,使得生成视频跨帧平滑,内容一致
- b:批处理轴(batch axis)
- c:通道数(channel)
- f:帧时间轴(frame-time axis),代表视频帧的序列
- h 和w:帧的高度和宽度(spatial dimensions)
当内部特征图(internal feature maps)通过图像层时,假设原始视频张量的尺寸是 [b,c,f,h,w],将视频张量重塑为[b×f,c,h,w],这样每一帧都成为独立的图像。应用图像层处理后,再次将张量重塑回原始的5D形状,以便进行下一步的时间维度处理。
sub-module design
在AnimateDiff框架中,模块设计部分的核心是以Transformer架构为基础并采用Transformer架构来创建一个专门处理时间维度的运动模块,这个模块被称为“temporal Transformer”,通过实验发现这种设计足以对运动先验进行建模。
-
temporal Transformer
-
temporal Transformer由多个自注意力块组成,这些块沿着时间轴排列,能够处理时间序列数据。
-
self-attention中增加正弦位置编码,使得网络关注当前帧时空位置
-
运动模块的输入是经过重塑的特征图,其中空间维度(height和width)被合并到批处理轴中,得到长度为frames的batch * height * width序列,表示为 { z 1 , . . . , z f ; z i ∈ R ( b × h × w ) × c } \{z_1, ..., z_f; \, z_i \in \mathbb{R}^{(b \times h \times w) \times c}\} {z1,...,zf;zi∈R(b×h×w)×c}。
- 原本的5D视频张量被转换为一系列沿时间轴排列的向量。
- 重构后的特征图沿时间轴划分,形成长度为f的向量序列。每个向量 z i z_i zi包含了整个视频帧的所有信息,并且每个向量都对应于动画中的一个特定帧。
-
然后向量将被投影并经过几个自注意力块
-
-
初始化
为了避免附加模块可能引入的任何有害影响,我们对时间 Transformer 的输出投影层进行零初始化,并添加残差连接,以便运动模块在训练开始时是恒等映射 。
通过 MOTIONLORA 适应新的运动模式
预训练的运动模块虽然能够捕捉一般性的运动先验,但在面对特定运动模式(如相机缩放、平移和翻滚等)时,需要进一步的调整。作为AnimateDiff的最后阶段,MotionLoRA提供了一种高效的微调方法,用于个性化运动效果。在运动模块的自注意力层中加入LoRA(Low-Rank Adaptation)层,这些层专门针对新运动模式的参考视频进行训练。
- MotionLoRA的训练过程:
- 数据增强:通过基于规则的数据增强方法获取具有不同镜头类型的参考视频,例如通过逐渐缩小(放大)或扩大(缩小)视频帧的裁剪区域来实现变焦效果。
- 训练效率:MotionLoRA能够使用少量(20到50个)参考视频和少量(约2000次)训练迭代达到良好的效果,同时仅需要大约30M的存储空间。
- MotionLoRA的优势:MotionLoRA的训练效率高,允许用户在有限的资源下快速调整模型以适应新的运动模式。由于LoRA的低秩特性,MotionLoRA还具有组合能力,即可以合并多个独立训练的MotionLoRA模型,在推理时实现复合运动效果。
ANIMATEDIFF IN PRACTICE
training
-
视频数据批次 x 1 : f 0 ∈ R b × c × f × h × w x_{1:f}^0 \in \mathbb{R}^{b \times c \times f \times h \times w} x1:f0∈Rb×c×f×h×w 首先通过预训练的自动编码器进行逐帧编码,转换成潜在代码 z 1 : f 0 z_{1:f}^0 z1:f0。
-
潜在代码随后根据前向扩散计划添加噪声,生成噪声化的潜在代码 z t 1 : f = α ˉ t z 0 1 : f + 1 − α ˉ t ϵ 1 : f z_t^{1:f} = \sqrt{\bar{\alpha}_t} z_0^{1:f} + \sqrt{1 - \bar{\alpha}_t} \epsilon^{1:f} zt1:f=αˉtz01:f+1−αˉtϵ1:f
-
膨胀模型输入噪声化的潜在代码和相应的文本提示,并预测需要添加的噪声。
-
运动模块的最终训练目标是通过最小化预测噪声和实际噪声之间的均方误差来实现的:
L = E E ( x 0 1 : f ) , y , ϵ 1 : f ∼ N ( 0 , I ) , t [ ∥ ϵ − ϵ θ ( z t 1 : f , t , τ θ ( y ) ) ∥ 2 2 ] \mathcal{L} = \mathbb{E}_{\mathcal{E}(x_0^{1:f}), y, \epsilon^{1:f} \sim \mathcal{N}(0, \mathit{I}), t} \left[ \| \epsilon - \epsilon_\theta(z_t^{1:f}, t, \tau_\theta(y)) \|_2^2 \right] L=EE(x01:f),y,ϵ1:f∼N(0,I),t[∥ϵ−ϵθ(zt1:f,t,τθ(y))∥22]值得注意的是,在训练damain adapter、运动模块和 MotionLoRA 时,可训练部分之外的参数保持冻结状态。
inference
- 模型膨胀(Inflation):个性化T2I模型首先进行膨胀,以适应视频数据的维度。这通常涉及调整模型以处理多帧视频数据而不是单张图片。
- 注入运动模块:膨胀后的模型接着被注入运动模块,这个模块负责生成通用动画。它使得模型能够产生一系列动态帧,而不仅仅是静态图像。
- 可选的MotionLoRA注入:用户还可以选择注入MotionLoRA,这是一个微调步骤,允许模型适应特定的运动风格或模式,从而生成具有个性化运动的动画。
- 领域适配器的调整:领域适配器在训练阶段用于桥接预训练数据和视频训练数据之间的视觉质量差异。在推理阶段,领域适配器不是被丢弃,而是可以继续保留在模型中,并通过调整α值来控制其对最终输出的影响。这种调整允许模型在生成动画时更好地适应视频数据的特性。
- α值的消融研究:通过实验进行消融研究,以确定α值的最佳设置。消融研究有助于理解领域适配器对动画生成质量的具体影响,以及如何平衡其贡献以避免潜在的负面影响。
- 反向扩散和解码:最终,通过执行反向扩散过程,模型可以逐步去除注入到潜在代码中的噪声,恢复出清晰的动画帧。这一步骤是前向扩散过程的逆操作,通常涉及迭代地预测并去除噪声,直到获得满意的动画帧。
实验结果
实验设置(Experimental Setup): 实验在Stable Diffusion V1.5模型上实现AnimateDiff,并使用WebVid10M数据集训练运动模块。从Civitai等模型共享平台收集了一系列多样化的个性化T2I模型,用于评估。