[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,兼容性很好。

Untitled

Key Parts

  1. 微调domain adapter,和视频对齐。why? 所用视频素材来源于真实世界,而图片包含多种来源,比如画作,动漫等,并且视频素材质量远低于图片质量。这一块主要为后面做铺垫。
  2. 加入Motion module,用于动作建模。
  3. MotionLoRA,是一种微调方式,用于产生特定的动作样式(camera zooming, panning and rolling)。

具体实现

  1. 所谓domain adapter实际上用了LoRA,加在Attention的线性层中。用视频抽帧来训练。
  2. 网络扩充(2D→3D):
    1. 输入[B,F,C,H,W]→reshape → [BF,HW,C] → spatial attention
    2. [BF,HW,C] →reshape→ [BHW,F,C] → temporal attention
    3. 输出 [B,F,C,H,W]
  3. Motion Layer 是一种Transformer架构
    1. 细节上: 下图2的Position Enc实际上是对帧的Position Enc,不是像素位置信息
    2. 下图2的包含了残差连接,以及最后一层线性层权重初始化为0,这一思想大量运用在不同微调模型策略中,比如ControlNet,LoRA,IP adapter等等,目的是避免损坏原有参数。

Untitled

  1. 图示的所有MSE应该都是对噪声的MSE,上图有一点迷惑性。另外这里还省略了text prompt对cross attention的key和value。

TRAINING and INFERENCE

  1. 训练即以上的三个阶段。相较于2D的图像生成,扩充的frame维度一般会和Batch合并,用作frame-wise的encode或者spatial attention。
  2. 推理阶段,可以设置参数alpha,用来调整domain adapter的权重。一般不能直接舍弃alpha。