ONNX 模型库
返回模型

说明文档

StableAnimator

<a href='https://francis-rings.github.io/StableAnimator'><img src='https://img.shields.io/badge/Project-Page-Green'></a> <a href='https://arxiv.org/abs/2411.17697'><img src='https://img.shields.io/badge/Paper-Arxiv-red'></a> <a href='https://huggingface.co/FrancisRing/StableAnimator/tree/main'><img src='https://img.shields.io/badge/HuggingFace-Model-orange'></a> <a href='https://www.youtube.com/watch?v=7fwFyFDzQgg'><img src='https://img.shields.io/badge/YouTube-Watch-red?style=flat-square&logo=youtube'></a> <a href='https://www.bilibili.com/video/BV1X5zyYUEuD'><img src='https://img.shields.io/badge/Bilibili-Watch-blue?style=flat-square&logo=bilibili'></a>

StableAnimator:高质量身份保持的人体图像动画 <br/> Shuyuan Tu<sup>1</sup>, Zhen Xing<sup>1</sup>, Xintong Han<sup>3</sup>, Zhi-Qi Cheng<sup>4</sup>, Qi Dai<sup>2</sup>, Chong Luo<sup>2</sup>, Zuxuan Wu<sup>1</sup> <br/> [<sup>1</sup>复旦大学; <sup>2</sup>微软亚洲研究院; <sup>3</sup>虎牙公司; <sup>4</sup>卡内基梅隆大学]

<p align="center"> <img src="assets/figures/case-47.gif" width="256" /> <img src="assets/figures/case-61.gif" width="256" /> <img src="assets/figures/case-45.gif" width="256" /> <img src="assets/figures/case-46.gif" width="256" /> <img src="assets/figures/case-5.gif" width="256" /> <img src="assets/figures/case-17.gif" width="256" /> <br/> <span>由 StableAnimator 生成的姿态驱动人体图像动画,展示了其合成<b>高保真</b>和<b>身份保持视频</b>的能力。所有动画均<b>由 StableAnimator 直接合成,未使用任何与人脸相关的后处理工具</b>,如换脸工具 FaceFusion 或人脸修复模型 GFP-GAN 和 CodeFormer。</span> </p>

<p align="center"> <img src="assets/figures/case-35.gif" width="384" /> <img src="assets/figures/case-42.gif" width="384" /> <img src="assets/figures/case-18.gif" width="384" /> <img src="assets/figures/case-24.gif" width="384" /> <br/> <span>StableAnimator 与最先进(SOTA)人体图像动画模型的对比结果,突出了 StableAnimator 在提供<b>高保真、身份保持的人体图像动画</b>方面的卓越性能。</span> </p>

概述

<p align="center"> <img src="assets/figures/framework.jpg" alt="model architecture" width="1280"/> </br> <i>StableAnimator 框架概述。</i> </p>

当前用于人体图像动画的扩散模型难以确保身份(ID)一致性。本文提出了 StableAnimator,<b>这是首个端到端的身份保持视频扩散框架,在给定参考图像和姿态序列的条件下,无需任何后处理即可合成高质量视频。</b>StableAnimator 基于视频扩散模型构建,包含为训练和推理精心设计的模块,致力于实现身份一致性。具体而言,StableAnimator 首先使用现成的提取器分别计算图像嵌入和人脸嵌入,并通过全局内容感知的人脸编码器使人脸嵌入与图像嵌入进行交互,从而进一步优化人脸嵌入。然后,StableAnimator 引入了一种新颖的分布感知 ID 适配器,通过对其来防止时间层造成的干扰,同时保持身份信息。在推理过程中,我们提出了一种基于 Hamilton-Jacobi-Bellman(HJB)方程的优化方法来进一步提升人脸质量。我们证明,求解 HJB 方程可以集成到扩散去噪过程中,所得解能够约束去噪路径,从而有利于身份保持。在多个基准测试上的实验从定性和定量两个角度证明了 StableAnimator 的有效性。

新闻

  • [2024-12-10]:🔥 Gradio 界面已发布!非常感谢 @gluttony-10 的贡献!其他代码将很快发布。敬请期待!
  • [2024-12-6]:🔥 所有数据预处理代码(人体骨架提取和人脸掩码提取)已发布!训练代码和详细的训练教程将在 2024.12.13 之前发布。敬请期待!
  • [2024-12-4]:🔥 我们很高兴发布一个有趣的舞蹈演示(🔥🔥APT 舞蹈🔥🔥)!生成的视频可以在 YouTubeBilibili 上观看。
  • [2024-11-28]:🔥 数据预处理代码(人体骨架提取)已发布!其他代码将很快发布。敬请期待!
  • [2024-11-26]:🔥 项目页面、代码、技术报告和基础模型检查点已发布。进一步的训练代码、数据预处理代码、评估数据集和 StableAnimator-pro 将很快发布。敬请期待!

待办事项

  • [x] StableAnimator-basic
  • [x] 推理代码
  • [x] 评估样本
  • [x] 数据预处理代码(骨架提取)
  • [x] 数据预处理代码(人脸掩码提取)
  • [ ] 评估数据集
  • [ ] 训练代码
  • [ ] StableAnimator-pro
  • [ ] 基于 HJB 的人脸优化推理代码

快速开始

对于基础版本的模型检查点,支持以 576x1024 或 512x512 分辨率生成视频。如果遇到内存不足的问题,可以适当减少动画帧数。

环境配置

pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu124
pip install torch==2.5.1+cu124 xformers --index-url https://download.pytorch.org/whl/cu124
pip install -r requirements.txt

下载权重

如果在连接 Hugging Face 时遇到问题,可以通过设置环境变量使用镜像端点:export HF_ENDPOINT=https://hf-mirror.com。 请按以下方式手动下载权重:

cd StableAnimator
git lfs install
git clone https://huggingface.co/FrancisRing/StableAnimator checkpoints

所有权重应按以下方式组织: 本项目的整体文件结构应按如下方式组织:

StableAnimator/
├── DWPose
├── animation
├── checkpoints
│   ├── DWPose
│   │   ├── dw-ll_ucoco_384.onnx
│   │   └── yolox_l.onnx
│   ├── Animation
│   │   ├── pose_net.pth
│   │   ├── face_encoder.pth
│   │   └── unet.pth
│   ├── SVD
│   │   ├── feature_extractor
│   │   ├── image_encoder
│   │   ├── scheduler
│   │   ├── unet
│   │   ├── vae
│   │   ├── model_index.json
│   │   ├── svd_xt.safetensors
│   │   └── svd_xt_image_decoder.safetensors
│   └── inference.zip
├── models
│   │   └── antelopev2
│   │       ├── 1k3d68.onnx
│   │       ├── 2d106det.onnx
│   │       ├── genderage.onnx
│   │       ├── glintr100.onnx
│   │       └── scrfd_10g_bnkps.onnx
├── app.py
├── command_basic_infer.sh
├── inference_basic.py
├── requirement.txt 

评估样本

论文中展示的评估样本可以从 OneDrive 或 checkpoints 中的 inference.zip 下载。请按以下方式手动下载评估样本:

cd StableAnimator
mkdir inference

所有评估样本应按如下方式组织:

inference/
├── case-1
│   ├── poses
│   ├── faces
│   └── reference.png
├── case-2
│   ├── poses
│   ├── faces
│   └── reference.png
├── case-3
│   ├── poses
│   ├── faces
│   └── reference.png

人体骨架提取

我们利用预训练的 DWPose 来提取人体骨架。在初始化 DWPose 时,预训练权重应在 /DWPose/dwpose_utils/wholebody.py 中配置:

onnx_det = 'path/checkpoints/DWPose/yolox_l.onnx'
onnx_pose = 'path/checkpoints/DWPose/dw-ll_ucoco_384.onnx'

给定包含多个 .png 文件的目标图像文件夹,您可以使用以下命令获取相应的人体骨架图像:

python skeleton_extraction.py --target_image_folder_path="path/test/target_images" --ref_image_path="path/test/reference.png" --poses_folder_path="path/test/poses"

需要注意的是,目标图像文件夹中的 .png 文件应以 frame_i.png 格式命名,例如 frame_0.pngframe_1.png 等。 --ref_image_path 指的是给定参考图像的路径。获得的人体骨架图像保存在 path/test/poses 中。特别重要的是,目标骨架图像应与参考图像在体型上保持一致。

如果您只有目标 MP4 文件,我们建议您使用 ffmpeg 将 MP4 文件无损转换为多帧(.png 文件)。

ffmpeg -i target.mp4 -q:v 1 path/test/target_images/frame_%d.png

获得的帧保存在 path/test/target_images 中。

人脸掩码提取

给定包含多个 RGB .png 文件的图像文件夹路径,您可以运行以下命令提取相应的人脸掩码:

python face_mask_extraction.py --image_folder="path/StableAnimator/inference/your_case/target_images"

path/StableAnimator/inference/your_case/target_images 包含多个 .png 文件。获得的掩码保存在 path/StableAnimator/inference/your_case/faces 中。

模型推理

我们提供了 command_basic_infer.sh 作为测试的示例配置。您也可以根据需要轻松修改各种配置。

bash command_basic_infer.sh

StableAnimator 支持两种不同分辨率设置的人体图像动画:512x512 和 576x1024。您可以在 command_basic_infer.sh 中修改 "--width" 和 "--height" 来设置动画的分辨率。command_basic_infer.sh 中的 "--output_dir" 指的是生成动画的保存路径。command_basic_infer.sh 中的 "--validation_control_folder" 和 "--validation_image" 分别指给定的姿态序列和参考图像的路径。 command_basic_infer.sh 中的 "--pretrained_model_name_or_path" 是预训练 SVD 的路径。command_basic_infer.sh 中的 "posenet_model_name_or_path"、"face_encoder_model_name_or_path" 和 "unet_model_name_or_path" 指的是预训练 StableAnimator 权重的路径。 如果您有足够的 GPU 资源,可以增加 command_basic_infer.sh 中 "--decode_chunk_size" 的值(4=>8=>16)来提升动画的时间平滑度。

提示:如果您的 GPU 内存有限,可以减少动画帧数。此命令将生成两个文件:<b>animated_images</b> 和 <b>animated_images.gif</b>。 如果您想获得高质量的 MP4 文件,我们建议您在 <b>animated_images</b> 上使用 ffmpeg,如下所示:

cd animated_images
ffmpeg -framerate 20 -i frame_%d.png -c:v libx264 -crf 10 -pix_fmt yuv420p /path/animation.mp4

"-framerate" 指的是 fps 设置。"-crf" 表示生成的 MP4 文件的质量,数值越小对应的质量越高。 此外,您也可以运行以下命令启动 Gradio 界面:

python app.py

显存需求与运行时间

对于 15 秒的演示视频(512x512,fps=30),16 帧基础模型需要 8GB 显存,在 4090 GPU 上 5 分钟内完成。

pro 模型 16 帧 U-Net 的最低显存需求为 10GB(576x1024,fps=30);但是,VAE 解码器需要 16GB。您可以选择在 CPU 上运行 VAE 解码器。

联系方式

如果您有任何建议或发现我们的工作对您有帮助,欢迎与我联系

邮箱:francisshuyuan@gmail.com

如果您觉得我们的工作有用,<b>请考虑给这个 GitHub 仓库点个星并引用它</b>:

@article{tu2024stableanimator,
  title={StableAnimator: High-Quality Identity-Preserving Human Image Animation},
  author={Shuyuan Tu and Zhen Xing and Xintong Han and Zhi-Qi Cheng and Qi Dai and Chong Luo and Zuxuan Wu},
  journal={arXiv preprint arXiv:2411.17697},
  year={2024}
}

FrancisRing/StableAnimator

作者 FrancisRing

image-to-video diffusers
↓ 0 ♥ 69

创建时间: 2024-11-25 03:29:41+00:00

更新时间: 2025-03-10 06:11:16+00:00

在 Hugging Face 上查看

文件 (48)

.gitattributes
Animation/face_encoder.pth
Animation/glintr100_torch.pth
Animation/pose_net.pth
Animation/unet.pth
DWPose/dw-ll_ucoco_384.onnx ONNX
DWPose/yolox_l.onnx ONNX
README.md
assets/figures/case-17.gif
assets/figures/case-18.gif
assets/figures/case-24.gif
assets/figures/case-35.gif
assets/figures/case-42.gif
assets/figures/case-45.gif
assets/figures/case-46.gif
assets/figures/case-47.gif
assets/figures/case-5.gif
assets/figures/case-61.gif
assets/figures/framework.jpg
assets/gif/case-35.gif
assets/gif/case-42.gif
config.json
inference.zip
models/antelopev2/.gitattributes
models/antelopev2/1k3d68.onnx ONNX
models/antelopev2/2d106det.onnx ONNX
models/antelopev2/genderage.onnx ONNX
models/antelopev2/glintr100.onnx ONNX
models/antelopev2/scrfd_10g_bnkps.onnx ONNX
stable-video-diffusion-img2vid-xt/.gitattributes
stable-video-diffusion-img2vid-xt/LICENSE.md
stable-video-diffusion-img2vid-xt/README.md
stable-video-diffusion-img2vid-xt/comparison.png
stable-video-diffusion-img2vid-xt/feature_extractor/preprocessor_config.json
stable-video-diffusion-img2vid-xt/image_encoder/config.json
stable-video-diffusion-img2vid-xt/image_encoder/model.fp16.safetensors
stable-video-diffusion-img2vid-xt/image_encoder/model.safetensors
stable-video-diffusion-img2vid-xt/model_index.json
stable-video-diffusion-img2vid-xt/output_tile.gif
stable-video-diffusion-img2vid-xt/scheduler/scheduler_config.json
stable-video-diffusion-img2vid-xt/svd_xt.safetensors
stable-video-diffusion-img2vid-xt/svd_xt_image_decoder.safetensors
stable-video-diffusion-img2vid-xt/unet/config.json
stable-video-diffusion-img2vid-xt/unet/diffusion_pytorch_model.fp16.safetensors
stable-video-diffusion-img2vid-xt/unet/diffusion_pytorch_model.safetensors
stable-video-diffusion-img2vid-xt/vae/config.json
stable-video-diffusion-img2vid-xt/vae/diffusion_pytorch_model.fp16.safetensors
stable-video-diffusion-img2vid-xt/vae/diffusion_pytorch_model.safetensors