X-Dancer: Expressive Music to Human Dance Video Generation
从一张图片生成音乐驱动的多样, 且具有生活气息的人类跳舞视频. 他们首先为2D pose构造了空间组合构造表示, 用token分别表示手, 身体, 脸部等部位, 采用自回归的方式生成和音乐同步的token, 最终用AdaIN生成视频.
介绍
舞蹈重要, 社交媒体需求, 专业指导, 介绍成就.
解决了两个困难: 1)生成平滑, 多样的全身动作, 以更精细的尺度捕捉与音乐输入的复杂, 非线性同步; 2)将这些生成的身体动作转换为高保真视频输出, 保持与参考图像的视觉一致性, 并确保时间上的平滑性. 介绍3D pose的局限性, 缺乏数据集.
motion驱动I2V取得进步, audio驱动I2V当前不能捕获长距离依赖, 且主要在肖像画上实验, 全身视频效果怎么样待验证.
提到方法, 对全身的多个部位分别编码, 关键点置信度处理遮挡, 接着就可以预测未来N帧的token, 音乐特征用Jukebox和Librosa提取. 接下来用T2I模型, 输入pose和reference image, 通过它们的设计(具体放到后面看), 兼顾了transform的长上下文理解和diffusion的高质量.
讲成果, 第一个音乐驱动的人类image animate框架, 在100k个视频片段上训练, 能够生成多样化, 富有表现力和逼真的舞蹈视频, 达到最先进基准.
方法
数据表示
生成式视觉表示. 视频被剪成896x512, 用Latent space压缩.
动作建模. 2D建模, 包括身体主要关节, 头部, 手部移动, 有一个关键点检测置信度的属性, 让模型可以考虑到运动模糊和遮挡.
音乐嵌入. 利用Jukebox提取丰富的音乐特征, 补充Librosa提取的旋律和节奏信息, 重采样和同步和视频的帧率对齐.
基于 transformer 的 music-to-dance 动作生成
组合式置信度感知的人类pose token化. 标准的VQ-VAE(Vector Quantised-Variational AutoEncoder)框架. 有一个可学习的codebook, 输入是带关键点置信度的2D全身pose记为p, 为了灵活性和多样性, 按头部, 身体, 左手, 右手, 躯干, 腿分成5部分, 每一部分都通过一维卷积映射: , 通过 找到在codebook最近的表示. 为了保证part间的空间关联, 五个部分共享解码器. 这一步是单独训练的, 结果是每帧pose都可以通过codebook中的一组token表示, 通过解码器可以还原出pose.
交叉条件自回归的动作模型. 先解释了一下上一步token的含义, 类似one-hot编码, 表示离codebook中最近的元素. pose嵌入, 每个pose K个token表示, j=5表示身体部位数, 音乐嵌入包括和.
原文讲得很细, 直接看上图, 标准的Transformer, start token为(, , ), 因为输入固定为64帧, 为同一视频片段先前的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任务好像是首次.
这篇文章有几个关键信息没讲出来, , 感觉它这个方法处理半身图不好, 发邮箱问了作者回复字节批准后会开源.
由于这是接下来写论文重点关注的文章, 重点叙述改进的点.
-
pose只说了提60个关键点转5x6个token, 没讲怎么提取的关键点, 面部信息提取的很粗糙. 师兄还提到音频处理粗糙, 没get到点.
-
虽然它加了置信度分数, 也声称训练数据中有半身视频, 但是它没有特意去处理尺寸和位置信息, 我感觉它的半身视频生成效果不会很好, 论文中没放半身效果.
-
dffusion部分的基模型是哪个没说很奇怪, 这恰巧是整个实验中最关键的部分, 时间和空间一致性的处理没什么亮点, 基操了可以优化. 特别是Motion Decoder这我有个想法可以冻结diffusion, pose token过一遍得到的图片重新提取pose token, 比较后计算损失backford训练.
给作者发了邮件, 得到的回复是字节批准后会开源, 可以期待一下.