说明文档
UniAnimate-DiT:基于大规模视频扩散 Transformer 的人物图像动画
本仓库包含 UniAnimate-DiT 的检查点。该模型在论文 UniAnimate-DiT: Human Image Animation with Large-Scale Video Diffusion Transformer 和 Replace Anyone in Videos 中进行了描述。
-
UniAnimate-Wan2.1-14B-Lora-12000.ckpt:训练 12000 步后的 LoRA 权重和额外可学习模块。
-
dw-ll_ucoco_384.onnx:用于姿态提取的 dwpose 模型。
-
yolox_l.onnx:用于姿态提取的模型。
UniAnimate-DiT
基于 Wan2.1 的 UniAnimate 扩展版本
UniAnimate-DiT 基于最先进的基于 DiT 的 Wan2.1-14B-I2V 模型,用于一致的人物图像动画。Wan2.1 是阿里巴巴开源的视频合成模型集合。我们的代码基于 DiffSynth-Studio,感谢这个优秀的开源项目。
<table> <center> <tr> <!-- <td width=25% style="border: none"> --> <td ><center> <video height="260" controls autoplay loop src="https://cloud.video.taobao.com/vod/wuGhP_lx9FMOZcibpgPg3HAFQXRt2cPSQPMkG2mxQGw.mp4" muted="false"></video> </td> <td ><center> <video height="260" controls autoplay loop src="https://cloud.video.taobao.com/vod/K4lR1PGHnWYc7X6-e8dkZ_60TCr0_6Gqjc3rT6CW7Xw.mp4" muted="false"></video> </td> </tr> </table>
UniAnimate-DiT 快速入门
(1) 安装
在使用此模型之前,请创建 conda 环境并从源代码安装 DiffSynth-Studio。
conda create -n UniAnimate-Wan python=3.9.21
conda activate UniAnimate-Wan
# CUDA 11.8
pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1
pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu121
# CUDA 12.4
pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu124
git clone https://github.com/ali-vilab/UniAnimate-DiT.git
cd UniAnimate-DiT
pip install -e .
UniAnimate-DiT 支持多种 Attention 实现。如果您已安装以下任意 Attention 实现,它们将按优先级启用。
- Flash Attention 3
- Flash Attention 2
- Sage Attention
- torch SDPA(默认。推荐使用
torch>=2.5.0。)
推理
(2) 下载预训练检查点
使用 huggingface-cli 下载 Wan2.1-14B-I2V-720P 模型:
pip install \"huggingface_hub[cli]\"
huggingface-cli download Wan-AI/Wan2.1-I2V-14B-720P --local-dir ./Wan2.1-I2V-14B-720P
或使用 modelscope-cli 下载 Wan2.1-14B-I2V-720P 模型:
pip install modelscope
modelscope download Wan-AI/Wan2.1-I2V-14B-720P --local_dir ./Wan2.1-I2V-14B-720P
下载预训练的 UniAnimate-DiT 模型(仅包含 lora 和额外可学习模块的权重):
pip install modelscope
modelscope download xiaolaowx/UniAnimate-DiT --local_dir ./checkpoints
最终,模型权重将组织在 ./checkpoints/ 中,如下所示:
./checkpoints/
|---- dw-ll_ucoco_384.onnx
|---- UniAnimate-Wan2.1-14B-Lora-12000.ckpt
└---- yolox_l.onnx
(3) 姿态对齐
缩放目标姿态序列以匹配参考图像的姿态(您也可以安装 pip install onnxruntime-gpu==1.18.1 以在 GPU 上更快提取):
# 参考图像 1
python run_align_pose.py --ref_name data/images/WOMEN-Blouses_Shirts-id_00004955-01_4_full.jpg --source_video_paths data/videos/source_video.mp4 --saved_pose_dir data/saved_pose/WOMEN-Blouses_Shirts-id_00004955-01_4_full
# 参考图像 2
python run_align_pose.py --ref_name data/images/musk.jpg --source_video_paths data/videos/source_video.mp4 --saved_pose_dir data/saved_pose/musk
# 参考图像 3
python run_align_pose.py --ref_name data/images/WOMEN-Blouses_Shirts-id_00005125-03_4_full.jpg --source_video_paths data/videos/source_video.mp4 --saved_pose_dir data/saved_pose/WOMEN-Blouses_Shirts-id_00005125-03_4_full
# 参考图像 4
python run_align_pose.py --ref_name data/images/IMG_20240514_104337.jpg --source_video_paths data/videos/source_video.mp4 --saved_pose_dir data/saved_pose/IMG_20240514_104337
# 参考图像 5
python run_align_pose.py --ref_name data/images/10.jpg --source_video_paths data/videos/source_video.mp4 --saved_pose_dir data/saved_pose/10
演示视频处理后的目标姿态将位于 data/saved_pose 中。--ref_name 表示参考图像的路径,--source_video_paths 提供源姿态,--saved_pose_dir 表示处理后目标姿态的路径。
(4) 运行 UniAnimate-Wan2.1-14B-I2V 生成 480P 视频
CUDA_VISIBLE_DEVICES=\"0\" python examples/unianimate_wan/inference_unianimate_wan_480p.py
大约需要 23G GPU 显存。之后,将在 ./outputs 文件夹下生成 832x480(高 x 宽)分辨率的 81 帧视频片段:
对于长视频生成,运行以下命令:
CUDA_VISIBLE_DEVICES=\"0\" python examples/unianimate_wan/inference_unianimate_wan_long_video_480p.py
(5) 运行 UniAnimate-Wan2.1-14B-I2V 生成 720P 视频
CUDA_VISIBLE_DEVICES=\"0\" python examples/unianimate_wan/inference_unianimate_wan_720p.py
大约需要 36G GPU 显存。之后,将生成 1280x720 分辨率的 81 帧视频片段:
注意:尽管我们的模型是在 832x480 分辨率上训练的,但我们观察到直接在 1280x720 上推理通常也是可行的,并能产生令人满意的结果。
对于长视频生成,运行以下命令:
CUDA_VISIBLE_DEVICES=\"0\" python examples/unianimate_wan/inference_unianimate_wan_long_video_720p.py
训练
我们支持在自己的数据集上训练 UniAnimate-DiT。
步骤 1:安装额外的包
pip install peft lightning pandas
# 多 GPU 的 deepspeed
pip install -U deepspeed
步骤 2:准备数据集
为了加速训练,我们预先处理了视频,提取了视频帧和相应的 Dwpose,并用 pickle 包打包。您需要按以下方式管理训练数据:
data/example_dataset/
└── TikTok
└── 00001_mp4
├── dw_pose_with_foot_wo_face.pkl # 打包的 Dwpose
└── frame_data.pkl # 打包的帧
我们鼓励添加大量数据来微调模型以获得更好的结果。实验结果表明,大约 1000 个训练视频可以微调出一个好的人物图像动画模型。
步骤 3:训练
为方便起见,我们不预处理 VAE 特征,而是将 VAE 预处理和 DiT 模型训练放在一个训练脚本中,同时也便于数据增强以提高性能。您也可以选择先提取 VAE 特征,然后进行后续的 DiT 模型训练。
LoRA 训练(单张 A100 GPU):
CUDA_VISIBLE_DEVICES=\"0\" python examples/unianimate_wan/train_unianimate_wan.py \
--task train \
--train_architecture lora \
--lora_rank 64 --lora_alpha 64 \
--dataset_path data/example_dataset \
--output_path ./models_out_one_GPU \
--dit_path \"/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00001-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00002-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00003-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00004-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00005-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00006-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00007-of-00007.safetensors\" \
--max_epochs 10 --learning_rate 1e-4 \
--accumulate_grad_batches 1 \
--use_gradient_checkpointing --image_encoder_path \"/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth\" --use_gradient_checkpointing_offload
LoRA 训练(多 GPU,基于 Deepseed):
CUDA_VISIBLE_DEVICES=\"0,1,2,3\" python examples/unianimate_wan/train_unianimate_wan.py \
--task train --train_architecture lora \
--lora_rank 128 --lora_alpha 128 \
--dataset_path data/example_dataset \
--output_path ./models_out --dit_path \"/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00001-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00002-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00003-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00004-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00005-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00006-of-00007.safetensors,/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00007-of-00007.safetensors\" \
--max_epochs 10 --learning_rate 1e-4 \
--accumulate_grad_batches 1 \
--use_gradient_checkpointing \
--image_encoder_path \"/mnt/user/VideoGeneration_Baselines/Wan2.1/Wan2.1-I2V-14B-720P/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth\" \
--use_gradient_checkpointing_offload \
--training_strategy \"deepspeed_stage_2\"
您也可以通过设置 --pretrained_lora_path=\"./checkpoints/UniAnimate-Wan2.1-14B-Lora.ckpt\" 来微调我们训练好的模型。
步骤 4:测试
测试在单 GPU 上训练的 LoRA 微调模型:
import torch
from diffsynth import ModelManager, WanVideoPipeline, save_video, VideoData, WanUniAnimateVideoPipeline
# 加载模型
model_manager = ModelManager(device=\"cpu\")
model_manager.load_models(
[\"Wan2.1/Wan2.1-I2V-14B-720P/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth\"],
torch_dtype=torch.float32, # Image Encoder 使用 float32 加载
)
model_manager.load_models(
[
[
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00001-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00002-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00003-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00004-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00005-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00006-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00007-of-00007.safetensors\",
],
\"Wan2.1/Wan2.1-I2V-14B-720P/models_t5_umt5-xxl-enc-bf16.pth\",
\"Wan2.1/Wan2.1-I2V-14B-720P/Wan2.1_VAE.pth\",
],
torch_dtype=torch.bfloat16,
)
model_manager.load_lora_v2(\"models/lightning_logs/version_1/checkpoints/epoch=0-step=500.ckpt\", lora_alpha=1.0)
...
...
测试基于 Deepspeed 多 GPU 训练的 LoRA 微调模型,首先需要 python zero_to_fp32.py . output_dir/ --safe_serialization 将 .pt 文件转换为 .safetensors 文件,然后运行:
import torch
from diffsynth import ModelManager, WanVideoPipeline, save_video, VideoData, WanUniAnimateVideoPipeline
# 加载模型
model_manager = ModelManager(device=\"cpu\")
model_manager.load_models(
[\"Wan2.1/Wan2.1-I2V-14B-720P/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth\"],
torch_dtype=torch.float32, # Image Encoder 使用 float32 加载
)
model_manager.load_models(
[
[
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00001-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00002-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00003-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00004-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00005-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00006-of-00007.safetensors\",
\"Wan2.1/Wan2.1-I2V-14B-720P/diffusion_pytorch_model-00007-of-00007.safetensors\",
],
\"Wan2.1/Wan2.1-I2V-14B-720P/models_t5_umt5-xxl-enc-bf16.pth\",
\"Wan2.1/Wan2.1-I2V-14B-720P/Wan2.1_VAE.pth\",
],
torch_dtype=torch.bfloat16,
)
model_manager.load_lora_v2([
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00001-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00002-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00003-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00004-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00005-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00006-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00007-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00008-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00009-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00010-of-00011.safetensors\",
\"./models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt/output_dir/model-00011-of-00011.safetensors\",
], lora_alpha=1.0)
...
...
引用
如果您发现此代码库对您的研究有用,请引用以下论文:
@article{wang2025unianimate,
title={UniAnimate: Taming Unified Video Diffusion Models for Consistent Human Image Animation},
author={Wang, Xiang and Zhang, Shiwei and Gao, Changxin and Wang, Jiayu and Zhou, Xiaoqiang and Zhang, Yingya and Yan, Luxin and Sang, Nong},
journal={Science China Information Sciences},
year={2025}
}
@article{wang2025unianimate-DiT,
title={UniAnimate-DiT: Human Image Animation with Large-Scale Video Diffusion Transformer},
author={Wang, Xiang and Zhang, Shiwei and Tang, Longxiang and Zhang, Yingya and Gao, Changxin and Wang, Yuehuan and Sang, Nong},
journal={arxiv:2504.11289},
year={2025}
}
免责声明
本项目旨在用于学术研究,我们明确不对用户生成的内容承担任何责任。用户在使用生成模型时需对自己的行为全权负责。项目贡献者与用户的行为无法律关联,也不承担任何责任。请务必以负责任的方式使用生成模型,遵守道德和法律标准。
ZheWang123/UniAnimate-DiT
作者 ZheWang123
创建时间: 2025-04-16 16:31:20+00:00
更新时间: 2025-05-19 16:53:53+00:00
在 Hugging Face 上查看