My App
Paper/dance

X-Dancer: Expressive Music to Human Dance Video Generation

从一张图片生成音乐驱动的多样, 且具有生活气息的人类跳舞视频. 他们首先为2D pose构造了空间组合构造表示, 用token分别表示手, 身体, 脸部等部位, 采用自回归的方式生成和音乐同步的token, 最终用AdaIN生成视频.

X-dancer-introduce

介绍

舞蹈重要, 社交媒体需求, 专业指导, 介绍成就.

解决了两个困难: 1)生成平滑, 多样的全身动作, 以更精细的尺度捕捉与音乐输入的复杂, 非线性同步; 2)将这些生成的身体动作转换为高保真视频输出, 保持与参考图像的视觉一致性, 并确保时间上的平滑性. 介绍3D pose的局限性, 缺乏数据集.

motion驱动I2V取得进步, audio驱动I2V当前不能捕获长距离依赖, 且主要在肖像画上实验, 全身视频效果怎么样待验证.

提到方法, 对全身的多个部位分别编码, 关键点置信度处理遮挡, 接着就可以预测未来N帧的token, 音乐特征用Jukebox和Librosa提取. 接下来用T2I模型, 输入pose和reference image, 通过它们的设计(具体放到后面看), 兼顾了transform的长上下文理解和diffusion的高质量.

讲成果, 第一个音乐驱动的人类image animate框架, 在100k个视频片段上训练, 能够生成多样化, 富有表现力和逼真的舞蹈视频, 达到最先进基准.

方法

X-dancer-overview

数据表示

生成式视觉表示. 视频被剪成896x512, 用Latent space压缩.

动作建模. 2D建模, 包括身体主要关节, 头部, 手部移动, 有一个关键点检测置信度的属性, 让模型可以考虑到运动模糊和遮挡.

音乐嵌入. 利用Jukebox提取丰富的音乐特征, 补充Librosa提取的旋律和节奏信息, 重采样和同步和视频的帧率对齐.

基于 transformer 的 music-to-dance 动作生成

组合式置信度感知的人类pose token化. 标准的VQ-VAE(Vector Quantised-Variational AutoEncoder)框架. 有一个可学习的codebook, 输入是带关键点置信度的2D全身pose记为p, 为了灵活性和多样性, 按头部, 身体, 左手, 右手, 躯干, 腿分成5部分, 每一部分都通过一维卷积映射: ze(p)=E(p)\mathscr{z}_e(p) = E(p), 通过 ze(p){z}_e(p) 找到在codebook最近的表示. 为了保证part间的空间关联, 五个部分共享解码器. 这一步是单独训练的, 结果是每帧pose都可以通过codebook中的一组token表示, 通过解码器可以还原出pose.

交叉条件自回归的动作模型. 先解释了一下上一步token的含义, 类似one-hot编码, 表示离codebook中最近的元素. pose嵌入C1:Tj=((c1,1j,...,cK,1j),...,(c1,Tj,...,cK,Tj))C_{1:T}^{j}=((c_{1,1}^{j},...,c_{K,1}^{j}),...,(c_{1,T}^{j},...,c_{K,T}^{j})), 每个pose K个token表示, j=5表示身体部位数, 音乐嵌入包括F1:TLF_{1:T}^{L}F1:TJF_{1:T}^{J}.

原文讲得很细, 直接看上图, 标准的Transformer, start token为(F1:TLF_{1:T}^{L}, F1:TJF_{1:T}^{J}, FgF_{g}), 因为输入固定为64帧, FgF_{g}为同一视频片段先前的8帧作为上下文, 后面的token依次为每一帧的音乐信息, pose信息, 做拼接.

讲了一下pose的token怎么处理的, 没讲技术细节1)当前的token依赖与之前的所有的身体部位token, 时间依赖性, 2)建立了分层依赖, 先上身体下身体, 再手和脸.(感觉是下面causal attention可以做到的事情)

然后Transormer用的causal attention, 还论述了一下这样做就足够了.

基于 Dissfusion 的跳舞视频生成

输入是上一步生成的motion和一张参考图片, backbone是一个T2I模型, 时间模块保证时间连续性, ReferenceNet保证空间一致性.

对pose token的处理: 利用VQ-VAE解码器, 还原2D骨架, 通过PoseGuider指导生成. 暴露这种方法的问题, 不可微, 缺乏置信度信息, 抖动.

用一个可训练的motion解码器取代了VQ-VAE和PoseGuider, 和时间模块一起训练, 16帧的窗口.

实验

数据集: 107,546个单眼视频, 平均长度30秒, 896x512, 30FPS, 包括全身和半身视频.

训练: 1)训练VQ-VAE编码和量化60个关节位置, 带置信度分数, 转换为五部分pose token, 每部分pose使用6个token, codebook说得很高大上, 其实就是有点像一个位置嵌入层, 6->512; 2) 训练自回归的模型预测token, 基模型是GPT2, 64帧pose序列, 总窗口大小2224; 3) 原文是微调去噪UNet和ReferenceNet, 图片从视频中随机抽. 所有步骤在8张A100上训练.

推理: 提取参考图片的pose作为首帧, 通过维护一个64帧的滑动片段和12帧的重叠和8帧的上下文生成长视频.

评估和比较: 与现有方法进行比较, 并展示了在运动质量, 视频质量和身份保持方面的优势. 指标是常见指标: FVD(准确性指标), DIV(多样性指标), BAS(节奏指标).

结论

赞美的话就跳过了, 提到的限制: 1)视频从互联网上收集, 缺乏专业性, 2) out-of-domain 人类图片(非人类图片?)可能出现伪影和音乐不同步, 3) 由于内存限制分多阶段训练(感觉反而是优点).

感受

核心思想, transformer适合预测序列, diffusion适合生成高保真图片, 充分利用各自的优势.

单看diffusion部分就是animate anyone的工作, codebook之前在TM2D里见过, 但用2D pose处理music-to-dance任务好像是首次.

这篇文章有几个关键信息没讲出来, , 感觉它这个方法处理半身图不好, 发邮箱问了作者回复字节批准后会开源.

由于这是接下来写论文重点关注的文章, 重点叙述改进的点.

  1. pose只说了提60个关键点转5x6个token, 没讲怎么提取的关键点, 面部信息提取的很粗糙. 师兄还提到音频处理粗糙, 没get到点.

  2. 虽然它加了置信度分数, 也声称训练数据中有半身视频, 但是它没有特意去处理尺寸和位置信息, 我感觉它的半身视频生成效果不会很好, 论文中没放半身效果.

  3. dffusion部分的基模型是哪个没说很奇怪, 这恰巧是整个实验中最关键的部分, 时间和空间一致性的处理没什么亮点, 基操了可以优化. 特别是Motion Decoder这我有个想法可以冻结diffusion, pose token过一遍得到的图片重新提取pose token, 比较后计算损失backford训练.

给作者发了邮件, 得到的回复是字节批准后会开源, 可以期待一下.

On this page