Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation
Character Animation是指从静态图片, 通过驱动信号, 生成人物视频. diffusion成为视觉生成的主流, 但是很难时间上维持任务详细信息的一致性. 为了保持人物IP, 引入ReferenceNet; 为了可控性和连续性, 使用pose guider控制人物动作并使用temporal modeling保持平滑的帧间过渡.
介绍
(没抓住论证逻辑, 总结的很烂, 好像是在讲历史)
Character Animation应用广泛, 基于GAN的方法, 局部变形, 细节模糊, 语义不一致, 时间不稳定(temporal instability)
基于diffusion的方法, 举了两个例子, DreamPose 要求在输入样本上微调; DisCo很难保持人物IP和帧间抖动.
当前关于Character Animation的方法专注于特定的任务和benchmarks, 生成能力有限. text-video和视频编辑任务生成视频质量显著提升, 几个研究把text-video推向image-video, 但是仍然没法处理人物IP和帧间抖动.
Animate Anyone继承了SD, 修改去噪Unet以适应多帧输入. 使用对称Unet结构的ReferenceNet捕获参考图像的空间细节, 并把ReferenceNet中的特征通过spatial-attention集成到去噪Unet(下面有张图很好理解). 为了确保姿势的可控性, 设计了一个轻量的pose guider, 把姿势控制信号集成到去噪过程. 为了时间稳定性, 引入了Temporal-Attention.
在5K大小的数据集上训练, 1)维护了空间和时间的一致性, 2) 没有抖动或闪烁, 3) 能把任何角色图片转变为视频, 不局限于特定领域. 在三个benchmark上测试, 取得最好的结果.
方法
预备知识:Stable Diffusion
SD从Latent Diffusion Model(LDM)发展而来, 为了减小计算复杂度, 有一个编码器一个解码器表示图片. 训练过程的损失函数和普通Diffusion差不多.
在普通SD中, CLIP ViT-L/14文本编码器用于表示文本提示词用于text-image生成, 去噪Unet包含4个上采样, 4个下采样, 一个中间层. 一层中一个典型的block包含二维卷积, 自注意力块和交叉注意力块, 交叉注意力在文本嵌入和相关的网络特征中进行.
推理阶段就DDPM和DDIM, 最后通过解码器重建.
网络结构
去噪Unet继承自SD, 还另外包含了1)ReferenceNet:提取参考图像特征, 空间注意力层融合; 2)Pose Guider: 轻量级网络, 将姿态信息融入去噪过程; 3)Temporal Layer: 时间注意力层, 确保时间连续性.
ReferenceNet. 先分析了text-video只需要捕获语义信息, 但是image-video需要捕获更低级的信息, 当前的方法使用CLIP, 由于CLIP在低分辨率(224x224)图片上训练且数据实际转换为text编码, 这两个因素导致丢失了大量详细的信息.
因此它们设计了ReferenceNet, ReferenceNet框架和去噪网络框架相同, 不包含时间层, 空间注意力层替换成了自注意力层, 如上图, 特征, 参考图像, 先将复制t次, 然后和在w维度连接. 接着通过空间注意力, 只取左边的作为输出, 如途中虚线框所示. 这种设计有两种优点,1)能够使用原始SD中预训练的模型能力, 2)由于相同的结构和共享原始权重, 去噪Unet可以选择性地从ReferenceNet学习特征, 另外使用了CLIP文本注入, 加速收敛进程.
和ControlNet比较, ControlNet在去噪Unet中引入了额外控制信息, 像深度, 边缘是在空间上对齐的, 而参考图像和目标图像在空间上相关但不对齐. 因此ControlNet没法直接应用.
ReferenceNet虽然引入了和去噪Unet一样多的参数, 但是训练过程和推理过程中, 去噪Unet要计算多次, 但是ReferenceNet只需要提取一次.
Pose Guider. ControlNet展现出比文本更好的条件生成能力, 但是去噪Unet需要, 本论文使用Pose Guider, 包含4个卷积层, 4x4卷积核, 2x2步幅, 使用16, 32, 64, 128通道, 将pose图像与噪声latent对齐为相同分辨率, 接着添加到噪声latent后输入去噪Unet.
时间层. 对于特征, 先将它reshape为, 然后在t维度做自注意力, 时间层的特征通过残差连接合并到原特征. 这个设计和下面要讲的两阶段训练方法是对齐的.
训练阶段
第一阶段的目的是让模型用给定的信号生成高质量的图片. 排除了时间层, 只训练ReferenceNet和Pose Guider, 输入是视频的单帧, 参考图片从整个视频切片里随机选择, 去噪Unet和ReferenveNet使用SD的预训练权重初始化, Pose Guifer使用高斯权重初始化, 除了最终的权重使用零卷积, 冰冻VAE和CLIP的权重,
第二阶段的目的是保持时间连续性, 时间层使用AnimateDiff中的预训练权重, 输入为视频24帧切片, 这阶段只训练时间层.
实验
实现细节. 从互联网收集了5k份视频, 使用DWPose提取pose序列视频, 实验在4张A100上进行, 第一阶段图片被处理为768x768, batch大小为64, 30,000步. 第二阶段batch大小为4, 24帧的视频切片, 10,000步. 学习率都是1e-5. 在推理阶段,我们重新调整驱动pose骨骼的长度去估算人物骨胳的长度, DDIM的采样步数为20.
定性结果. 展示各种角色的动画效果.
比较实验. 与 AnimateDiff 和 Gen-2 在时尚视频合成任务上进行比较.
消融实验. 验证 ReferenceNet 的有效性.
讨论和结论
局限. 1)手部运动稳定性不足. 2)生成未见部分存在潜在不稳定. 3)运行效率低于非扩散模型方法.
结论. Animate Anyone 实现了可控的角色图像到视频合成, 具有一致性, 稳定性和通用性, 未来可扩展到更多图像到视频应用.