论文题目:Champ:具有 3D 参数制导的可控且一致的人体图像动画
24年最新SOTA,本文读论文和进行复现,未训练
本研究视频生成引如了smpl 的三维信息,因此结构更加优秀
论文地址:2403.14781
项目地址:github'
论文
摘要
本研究介绍了一种通过在潜在扩散框架内利用3D人体参数模型来增强形状对齐和运动指导的人类图像动画方法。该方法使用SMPL(Skinned Multi-Person Linear)模型作为3D人体参数模型,以建立身体形状和姿态的统一表示,从而准确捕捉源视频中复杂的人体几何和运动特征。通过结合SMPL序列生成的渲染深度图像、法线贴图和语义贴图,以及基于骨骼的运动指导,为潜在扩散模型提供了全面的3D形状和详细姿态属性。采用集成自注意力机制的多层运动融合模块,在空间域中融合形状和运动潜在表示。通过将3D人体参数模型作为运动指导,可以在参考图像和源视频运动之间执行参数化人体对齐。实验评估表明,该方法在生成高质量人类动画方面具有优越能力,能够准确捕捉姿态和形状变化,并且在提出的野外数据集上表现出更好的泛化能力。

介绍
近期,生成扩散模型,特别是潜在扩散模型,在图像动画领域取得了显著进展。这些技术通常依赖于参考图像和特定于人类的运动指导(如骨架、语义图和密集运动流)来生成可控的人类动画视频。本研究的目标是进一步优化形状对齐和姿态指导机制,通过引入3D参数化模型(如SMPL)来编码参考图像的3D几何形状,并从源视频中提取人体运动。与基于GAN的方法相比,扩散模型能够更有效地处理运动转移,尤其是在参考图像和源视频运动之间存在显著变化的场景中。
方法

给定一个输入的人体图像和一个描述运动序列的参考视频。我们通过 Parametric Shape Alignment 作为 3D 运动引导获得与参考图像对应的位姿序列。MLMF用于对多层 3D 相关的运动信息进行编码。Referencenet 和 Temporal-attention 确保身份一致性和时间一致性
3.1 预备知识
- 潜在扩散模型(Latent Diffusion Models):通过在潜在空间中引入去噪过程,提高了模型的计算效率,同时保持了生成高保真图像的能力。
Rombach 等人 [39] 提出的潜在扩散模型 (LDM) 通过将两个不同的随机过程(即扩散和去噪)合并到潜在空间中,在扩散模型领域提出了一种新的方法。
- SMPL模型:一个流行的3D模型,用于真实感的人体建模和动画,能够捕捉个体间的身体形状变化和人体姿态。
smpl的相关知识还是有必要完善一下:
SMPL(Skinned Multi-Person Linear)模型是一种广泛使用的3D人体参数模型,它能够捕捉人体形状和姿势的细微变化。以下是SMPL模型的工作原理和应用:
参数化表示:
- SMPL模型通过一组形状参数(β)和一组姿态参数(θ)来构建人体的网格(mesh)。这些参数是低维的,可以有效地表示人体的形状和姿态的变化。
- 形状参数(β):代表了人体体型的变化,例如胖瘦、肌肉发达程度等。
- 姿态参数(θ):代表了人体的关节角度,控制人体的姿势和动作。
网格变形:
- 通过对标准网格利用这两组参数进行变形,可以得到目标人体的网格。SMPL模型将皮肤表面的点的位置建模成周围关节的线性组合,通过蒙皮(skinning)的方式给变形的骨骼生成皮肤,极大地压缩了人体表示的数据空间。
模型训练:
- SMPL模型训练了SMPL模型的参数,以最小化在两个数据集(多姿态数据集,多形状数据集)上的重建误差。模型分解了形状和姿态,分别训练这些参数,从而简化了优化过程。
SMPLify过程:
- SMPL模型的一个关键应用是SMPLify,这是一个从单一张图像自动估计三维人体姿态和形状的方法。SMPLify首先使用DeepCut来预测2D身体关节位置,然后将统计人体模型SMPL拟合到2D关节上,同时提出了利用3D模型来抑制身体部位互穿现象的方法。
SMPL-X:
- SMPL-X是SMPL模型的一个扩展,它不仅包括身体,还包括脸部和手部的动作。SMPL-X通过函数M(θ, β, ψ)定义,其中θ是姿势参数,β是形状参数,ψ是面部表情参数。SMPL-X能够从单帧RGB图像计算姿势参数、形状参数和面部表情参数来对人体进行编码。
3.2 多层运动条件
- SMPL到指导条件:使用SMPL模型从源视频中提取姿态和形状信息,生成包含姿态和形状细节的多个输出。
- 参数化形状对齐:通过参数化人体模型,对齐参考图像和运动序列之间的形状和姿态。
3.3 多层运动指导
- 指导自注意力(Guidance Self-Attention):通过自注意力机制,对多层指导条件的特征嵌入进行空间加权,生成多层语义融合作为运动指导。
- 多层运动融合(Multi-Layer Motion Fusion):通过自注意力机制和多层运动融合模块,整合来自不同指导条件的特征嵌入。

多层运动条件和相应的交叉注意力图。每组图像(如上图)都包含深度图、法线图、语义图和从相应的 SMPL 序列渲染的 DWpose 骨架的表示形式。后续图像(下图)说明了指导自我注意的输出
3.4 网络结构
- 网络结构:介绍了一个视频扩散模型,该模型整合了来自3D人体参数模型的运动指导。使用SMPL模型从运动数据中提取连续的SMPL姿态序列,生成包含2D和3D特征的多层指导,以增强模型对人体形状和姿态属性的理解。
实验
- 数据集:构建了一个包含约5000个高保真真实人类视频的野外数据集,涵盖不同的年龄、种族和性别,以及全身、半身和特写镜头。
- 实现:使用8个NVIDIA A100 GPU进行实验,训练分为两个阶段:首先是图像训练,然后是时间层训练,以增强模型的时间连贯性。
- 比较:与多种最先进的人类图像动画方法进行比较,包括MRAA、DisCo、MagicAnimate和Animate Anyone。
- 消融研究:对SMPL的不同条件、指导自注意力和参数化形状对齐进行了消融研究,以评估它们对性能的影响。
复现
环境
window10复现,有段时间了,可能不是很详细,大家有问题留言
conda环境:
conda create -n champ python=3.10
conda activate champ
pip安装
pip install -r requirements.txt
下载的torch 应该不是gpu版本,需要卸载后在重新下载
conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=12.1 -c pytorch -c nvidia
如果下载报错,可以删掉后面的版本号试试
下载预训练模型
git lfs install
git clone https://huggingface.co/fudan-generative-ai/champ pretrained_models
./pretrained_models/
|-- champ
| |-- denoising_unet.pth
| |-- guidance_encoder_depth.pth
| |-- guidance_encoder_dwpose.pth
| |-- guidance_encoder_normal.pth
| |-- guidance_encoder_semantic_map.pth
| |-- reference_unet.pth
| `-- motion_module.pth
|-- image_encoder
| |-- config.json
| `-- pytorch_model.bin
|-- sd-vae-ft-mse
| |-- config.json
| |-- diffusion_pytorch_model.bin
| `-- diffusion_pytorch_model.safetensors
`-- stable-diffusion-v1-5
|-- feature_extractor
| `-- preprocessor_config.json
|-- model_index.json
|-- unet
| |-- config.json
| `-- diffusion_pytorch_model.bin
`-- v1-inference.yaml
如果下载不了,比如没有git,可以手动下载
fudan-generative-ai/champ at main
https://huggingface.co/fudan-generative-ai/champ/tree/mainfudan-generative-ai/champ at main
https://huggingface.co/fudan-generative-ai/champ/tree/mainlambdalabs/sd-image-variations-diffusers at main
https://huggingface.co/lambdalabs/sd-image-variations-diffusers/tree/main/image_encoder 项目给的sd1.5已经404了,我找了民间的一样用
数据
简单复现没有自己生成动作,使用demofudan-generative-ai/champ_motions_example · Datasets at Hugging Face
https://huggingface.co/datasets/fudan-generative-ai/champ_motions_example
./example_data/
|-- motions/ # Directory includes motions per subfolder
| |-- motion-01/ # A motion sample
| | |-- depth/ # Depth frame sequance
| | |-- dwpose/ # Dwpose frame sequance
| | |-- mask/ # Mask frame sequance
| | |-- normal/ # Normal map frame sequance
| | `-- semantic_map/ # Semanic map frame sequance
| |-- motion-02/
| | |-- ...
| | `-- ...
| `-- motion-N/
| |-- ...
| `-- ...
`-- ref_images/ # Reference image samples(Optional)
|-- ref-01.png
|-- ...
`-- ref-N.png
最后运行就可以
python inference.py --config configs/inference/inference.yaml
默认的 motion-02 in 大约有 250 帧,需要 ~20GB VRAM
结果

但是自己找的网图感觉不是很好,尤其是有背景的情况下(网图侵删)

扣掉背景后会有一些欢迎,总体来说,还不错
129



被折叠的 条评论
为什么被折叠?



