[2307.04725] AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning (arxiv.org)
https://github.com/guoyww/AnimateDiff
这篇是做Animate较早的文章,可以认为属于微调领域下的Text2Video,主要贡献在于一个plug-and-play motion module(实际上是一个temporal layer)。由于其独立于别的模块,所以可以直接加载权重并且 plug and play,兼容性很好。

Key Parts
- 微调domain adapter,和视频对齐。why? 所用视频素材来源于真实世界,而图片包含多种来源,比如画作,动漫等,并且视频素材质量远低于图片质量。这一块主要为后面做铺垫。
- 加入Motion module,用于动作建模。
- MotionLoRA,是一种微调方式,用于产生特定的动作样式(camera zooming, panning and rolling)。
具体实现
- 所谓domain adapter实际上用了LoRA,加在Attention的线性层中。用视频抽帧来训练。
- 网络扩充(2D→3D):
- 输入[B,F,C,H,W]→reshape → [BF,HW,C] → spatial attention
- [BF,HW,C] →reshape→ [BHW,F,C] → temporal attention
- 输出 [B,F,C,H,W]
- Motion Layer 是一种Transformer架构
- 细节上: 下图2的Position Enc实际上是对帧的Position Enc,不是像素位置信息
- 下图2的包含了残差连接,以及最后一层线性层权重初始化为0,这一思想大量运用在不同微调模型策略中,比如ControlNet,LoRA,IP adapter等等,目的是避免损坏原有参数。

- 图示的所有MSE应该都是对噪声的MSE,上图有一点迷惑性。另外这里还省略了text prompt对cross attention的key和value。
TRAINING and INFERENCE
- 训练即以上的三个阶段。相较于2D的图像生成,扩充的frame维度一般会和Batch合并,用作frame-wise的encode或者spatial attention。
- 推理阶段,可以设置参数alpha,用来调整domain adapter的权重。一般不能直接舍弃alpha。