定义Portrait image Animation: 从reference portrait生成animate video, 使用多种音频信号如:audio, facial landmark or textual description. 这种技术在广泛的引用场景: 高质量电影, 动画产业, 虚拟助手, 可行化用户服务, 交互式教育, 游戏领域. diffusion-based 推动了这一领域的发展.
介绍了先前的几种方法, VASA-1, EMO, AniPortrait, EchoMimic...
首先是长视频生成, 当前有两种方法: 1) 先将一段长视频切分成许多音频片段, 平行生成, 然后在相邻帧和切片运用appearance和motion约束[需要维护appearance和motion的最小差异, 阻碍了多样性的发展, (读者注)用波浪线比喻每一个片段, 为了将所有clip连都一起, 线条趋于保守平缓]; 2) 将前序帧当作条件指导生成[累计误差].
第二是4K分辨率生成, 第三是增强语义控制, 具体方法在method小节再看.
Stable Video Diffusion利用预训练, 微调和数据筛选增强视频生成的质量. Make-A-Video用text-to-image生成技术优化text-to-video的生成, 不需要配对的数据. MagicVideo用3D UNet降低计算量. AnimateDiff通过motion module赋予个性化text-to-image模型animate的能力(wok, 这个总结的nb), VideoComposer集成了motion vectors来动态指导, VideoCrafter和VideoComposer的方法一样但开源了模型:) CogVideoX增强了文本和视频的对齐, MagicTime用metamorphic time-lapse model编码了物理知识.
(读者注:Portrait Image AnimateDiff和Talking Head Generation在我看来是同一个任务, 原文提到"Significant progress has been made in audio-driven talking head generation and portrait image animation")
LipSyncExpert通过辨别器和novel beachmark改善了嘴唇对齐的准确率, SadRalker和VividTalk使用3D motion 建模和头部pose生成增强表达和时间同步, DiffTalk和DreamTalk改善了生成的appearance, 保持身份一致性, VASA-1和AniTalk集成了精细的面部表达和通用的motion表示, 生成有生活气息, 和谐的animation. 但是生成长视频一直是一个挑战.
Flexible Diffusion Modeling和Gen-L-Video框架在无需额外训练的基础上改善了时间协调性. SEINE和StoryDiffusion介绍generative transition和语义motion预测器支持平滑的场景改变和visual storytelling. StreamingT2V和MovieDreamer使用自回归策略和Diffusion渲染扩展叙事视频, 支持无缝场景切换...
使用学习到的字典离散先验表示在图像恢复中被证明很高效. VQ-VAE通过介绍vecter quantization解决了posterior collapse, 是生成高分辨率的视频音频成为可能. 基于此, VQ-GAN基于Transformer和CNNs创造了一个conteext-rich的字典, 在条件image生成中达到SOTA效果. CodeFormer用codebook实现了blind face restoration.
LDM, 加噪方法, 去噪loss, crossattn中qkv的计算, 条件表示.
Patch-Drop Augmentation. 核心思想是腐蚀先前帧的appearance信息, 只保留motion cue, 确保模型使用参考图的特征来生成appearance, 只使用先前帧的时间动态信息.
关键是一个mask, 分成pxp个patch, 其中r比例的随机区域赋0, 其余区域赋1, 对先前帧做统一的mask.
Gaussian Noise Augmentation. 它说随着生成的进行, 先前的视频帧可能污染appearance或动作, 比如其中有一帧生成不太好, 这种影响会传播到相邻帧, 导致梯度增加, 放大伪影. 为了减轻这种影响, 他们在motion帧中加入高斯噪声, 增强denoiser克服污染的能力.
z ^ t − i = z ~ t − i + η t − i , η t − i ∼ N ( 0 , σ 2 I ) \hat{\mathbf{z}}_{t-i} = \tilde{\mathbf{z}}_{t-i} + \boldsymbol{\eta}_{t-i}, \quad
\boldsymbol{\eta}_{t-i} \sim \mathcal{N}(0, \sigma^2 \mathbf{I}) z ^ t − i = z ~ t − i + η t − i , η t − i ∼ N ( 0 , σ 2 I )
用了两种方法, codebook和时间层. codebook就一句话引用x论文中的方法, 时间层原理和motion module一样.
后面这个提取输入latent feature的两种方法没看懂, 后面专门去看看它应用的codebook这篇文章吧.
看上面的图吧, 比我讲要清楚.
网络结构自己看图. (wok, 我突然发现用Hallo2的代码很容易复现出EMO, 对于我现在的实验, 用Hallo2作为codebase比用 moore animate anyone要方便)
一阶段正常训练, 二阶段使用了patch drop和高斯噪声增强.
好困, 实验章节就不看了.
感受
它们真的很擅长调研, 思维模式是: 我要解决什么问题, 当前提出过哪些方案, 逐个尝试, 用在新模型上, 找效果最好的, 屡试不爽.
为什么Hallo3比Hallo2要火, 我觉得Hallo2更有学习价值. 为了支持4K生成, 他的方法和x-dance很相似, 在DiT中去学习面部表达收敛太慢了, 我进行降维, 用1D(token化)去表示面部动态, 在DiT只做生成.
高斯噪声增强这里有点在意, 数据增强可以提高模型抗干扰的能力, 虽然教程里见过, 但是在论文里第一次读到.