Animate Anyone - Transform Images to animated Videos (animate-anyone.app)
https://github.com/MooreThreads/Moore-AnimateAnyone
背景: 目前的image2video无法兼顾一致性和生成能力。大部分模型实用CLIP来捕捉语义特征(high level),缺乏low-level空间域的特征。
解决方法: 提出了ReferenceNet解决外观的一致性问题。将ReferenceNet提取出的空间特征输送到UNet的spatial-attention中.
pose guidence:pose guider(4*conv).网络很小,仅用于和Encoder尺寸对齐。


关键部分
跟SD相比,多了一条线(ReferenceNet),这条线用来捕捉人物细节,同样也是绑定ID的一种方法。这么做的原因是,其他image2video的模型没有很好的做到人物细节上的一致性。
姿势序列经过Pose Guider,加噪,然后进入UNet。这和一般的text2video以及image2video不同,后者往往是以加噪视频作为UNet输入。换一个角度想,既然ReferenceNet和UNet是完全相似的结构,所以这么做也合理。
ReferenceNet和ControlNet有什么不同?目的上看上去都是提供guidence,但ReferenceNet输入是图片,并且要做到绑定ID,要提供的guidence更强。结构上,ReferenceNet网络更大了,和UNet结构更相似,ControlNet只有下采样,并且只在UNet升采样(原文为Decode阶段)和Middle Layer提供guidence。另外ControlNet的角点图等与目标图是直接对应的,而在ReferenceNet,生成的目标视频与参考图没有角点上的对齐(对应关系由下面的UNet给出)。作者说这是不采用ControlNet的原因之一。
ReferenceNet 只用算一次!


controlnet architecture

一点疑问
原文写道,在传递空间维度信息的时候,先把ReferenceNet输出的x2 ∈ R^{h × w × c} 重复t次,变为x2 ∈ R^{t × h × w × c},然后与x_1 ∈ R^{t × h × w × c} 在w上合并,变成x ∈ Rt × h × 2w × c,然后做自注意力.把自注意力截取一半(2w-> w),得到结果。