ITADN
ali-vilab/UniAnimate
ali-vilab/UniAnimate · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

UniAnimate:驯服统一视频扩散模型以实现一致的人像动画

Xiang Wang1, Shiwei Zhang2, Changxin Gao1, Jiayu Wang2, Xiaoqiang Zhou3, Yingya Zhang2 , Luxin Yan1 , Nong Sang1
1HUST   2Alibaba Group   3USTC

🎨 项目页面

由所提出的 UniAnimate 生成的演示案例

🔥 News

  • [2025/04/15] 🔥🔥🔥🔥🔥 We released a new model based on UniAnimate and Wan2.1, named UniAnimate-DiT, including the training and inference code. Please refer to UniAnimate-DiT for more details.
  • [2024/07/19] 🔥 We added a noise prior to the code (refer to line 381: noise = diffusion.q_sample(random_ref_frame.clone(), getattr(cfg, "noise_prior_value", 939), noise=noise) in tools/inferences/inference_unianimate_long_entrance.py), which can help achieve better appearance preservation (such as background), especially in long video generation. In addition, we are considering releasing an upgraded version of UniAnimate if we obtain an open source license from the company.
  • [2024/06/26] For cards with large GPU memory, such as A100 GPU, we support multiple segments parallel denoising to accelerate long video inference. You can change context_batch_size: 1 in configs/UniAnimate_infer_long.yaml to other values greater than 1, such as context_batch_size: 4. The inference speed will be improved to a certain extent.
  • [2024/06/15] 🔥🔥🔥 By offloading CLIP and VAE and explicitly adding torch.float16 (i.e., set CPU_CLIP_VAE: True in configs/UniAnimate_infer.yaml), the GPU memory can be greatly reduced. Now generating a 32x768x512 video clip only requires ~12G GPU memory. Refer to this issue for more details. Thanks to @blackight for the contribution!
  • [2024/06/13] 🔥🔥🔥 We released the code and models for human image animation, enjoy it!
  • [2024/06/13] We have submitted the code to the company for approval, and the code is expected to be released today or tomorrow.
  • [2024/06/03] 我们初始化了此 github 仓库,并计划发布论文。

TODO

  • 发布模型和推理代码,以及姿态对齐代码。
  • 支持生成短视频和长视频。
  • 发布用于一次性生成长视频的模型。
  • 发布基于 VideoLCM 的模型以实现更快的视频合成。
  • 在更高分辨率的视频上训练模型。

简介

UniAnimate 的整体框架

近期基于扩散模型的人体图像动画技术已在合成忠实遵循给定参考身份和期望动作姿态序列的视频方面取得了令人瞩目的成功。尽管如此,仍存在两个局限性:i) 需要一个额外的参考模型来将身份图像与主视频分支对齐,这显著增加了优化负担和模型参数;ii) 生成的视频通常时间较短(例如,24 帧),阻碍了实际应用。为了解决这些不足,我们提出了 UniAnimate 框架,以实现高效且长时的人体视频生成。首先,为了降低优化难度并确保时间连贯性,我们通过引入统一的视频扩散模型,将参考图像、姿态引导和噪声视频映射到共同的特征空间。其次,我们提出了一种统一的噪声输入,支持随机噪声输入以及首帧条件输入,从而增强了生成长时视频的能力。最后,为了更高效地处理长序列,我们探索了一种基于状态空间模型的替代时间建模架构,以替换原本计算密集的时间 Transformer。广泛的实验结果表明,UniAnimate 在定量和定性评估中均优于现有的最先进方法。值得注意的是,UniAnimate 甚至可以生成高度一致nt 通过迭代采用首帧条件化策略生成一分钟视频。

开始使用 UniAnimate

(1) 安装

安装 Python 依赖项:

git clone https://github.com/ali-vilab/UniAnimate.git
cd UniAnimate
conda create -n UniAnimate python=3.9
conda activate UniAnimate
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.8 -c pytorch -c nvidia
pip install -r requirements.txt

我们也在 environment.yaml 中提供了所有依赖项。

注意:对于 Windows 操作系统,您可以参考 此问题 来安装依赖项。感谢 @zephirusgit 的贡献。如果您遇到 The shape of the 2D attn_mask is torch.Size([77, 77]), but should be (1, 1). 的问题,请参考 此问题 来解决,感谢 @Isi-dev 的贡献。

(2) 下载预训练检查点

下载模型:

!pip install modelscope
from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('iic/unianimate', cache_dir='checkpoints/')

然后您可能需要以下命令将检查点移动到 "checkpoints/" 目录:

mv ./checkpoints/iic/unianimate/* ./checkpoints/

最后,模型权重将按照 ./checkpoints/ 组织如下:

./checkpoints/
|---- dw-ll_ucoco_384.onnx
|---- open_clip_pytorch_model.bin
|---- unianimate_16f_32f_non_ema_223000.pth 
|---- v2-1_512-ema-pruned.ckpt
└---- yolox_l.onnx

(3) 姿态对齐 (重要)

重新缩放目标姿态序列以匹配参考图像的姿态:

# reference image 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 

# reference image 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 

# reference image 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

# reference image 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

我们已在 data/saved_pose 中为演示视频提供了处理好的目标姿态,如果您运行我们的演示视频示例,可以跳过此步骤。此外,您需要安装 onnxruntime-gpu (pip install onnxruntime-gpu==1.13.1) 才能在 GPU 上运行姿态对齐。

✔ 一些提示

  • 在姿态对齐中,目标姿态序列中的第一帧用于计算对齐的缩放系数。因此,如果目标姿态序列中的第一帧包含完整的面部和姿态(手和脚),有助于获得更准确的估计和更好的视频生成结果。

(4) 运行 UniAnimate 模型生成视频

(4.1) 生成视频片段(32 帧,768x512 分辨率)

执行以下命令以生成视频片段:

python inference.py --cfg configs/UniAnimate_infer.yaml 

之后,将生成分辨率为 768x512 的 32 帧视频片段:

点击 此处 查看生成的视频。

点击 此处 查看生成的视频。

✔ 一些提示

  • 运行模型时,将使用 ~12G 26G 的 GPU 显存。如果你的 GPU 小于此值,可以将 configs/UniAnimate_infer.yaml 中的 max_frames: 32 更改为其他值,例如 24、16 和 8。我们的模型与所有这些值兼容。

(4.2) 生成视频片段(32 帧,分辨率为 1216x768)

如果你想要合成更高分辨率的结果,可以将 configs/UniAnimate_infer.yaml 中的 resolution: [512, 768] 更改为 resolution: [768, 1216]。并执行以下命令来生成视频片段:

python inference.py --cfg configs/UniAnimate_infer.yaml 

之后,将生成分辨率为 1216x768 的 32 帧视频片段:

点击 HERE 查看生成的视频。

点击 HERE 查看生成的视频。

✔ 一些提示:

  • 运行模型时,将使用 ~21G 36G 的 GPU 显存。 尽管我们的模型是在 512x768 分辨率下训练的,但我们观察到直接在 768x1216 分辨率下进行推理通常是允许的,并能产生令人满意的结果。 如果这导致外观不一致,您可以尝试不同的种子或将分辨率调整为 512x768。

  • 尽管我们的模型未在 48 或 64 帧上进行训练,但我们发现该模型能够很好地泛化到这些长度的合成。

configs/UniAnimate_infer.yaml 配置文件中,您可以指定数据,使用 max_frames 调整视频长度,并使用不同的 Diffusion 设置验证您的想法,等等。

(4.3) 生成长视频

如果您希望合成与目标姿态序列一样长的视频,可以执行以下命令来生成长视频:

python inference.py --cfg configs/UniAnimate_infer_long.yaml

之后,将生成分辨率为 1216x768 的长视频:

点击 此处 查看生成的视频。

点击 此处 查看生成的视频。

点击 此处 查看生成的视频。

点击 此处 查看生成的视频。

configs/UniAnimate_infer_long.yaml 配置文件中,test_list_path 应为 [frame_interval, reference image, driving pose sequence] 格式,其中 frame_interval=1 表示将使用目标姿态序列中的所有帧来生成视频,而 frame_interval=2 表示每两帧采样一帧。reference image 是参考图像的保存位置,driving pose sequence 是驱动姿态序列的保存位置。

✔ 一些提示

  • 如果发现外观不一致,可以将分辨率从 768x1216 更改为 512x768,或将 context_overlap 从 8 更改为 16。

  • configs/UniAnimate_infer_long.yaml 的默认设置中,使用了具有时间重叠的滑动窗口策略。您也可以先生成一段令人满意的视频片段,然后将该片段的最后一帧输入模型以生成下一段,从而继续视频。

引用

如果您发现此代码库对您的研究有用,请引用以下论文:

@article{wang2024unianimate,
      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={arXiv preprint arXiv:2406.01188},
      year={2024}
}

免责声明

本开源模型仅用于研究/非商业用途。 我们明确声明对用户生成内容不承担任何责任。用户在使用生成模型时,需对其行为承担全部责任。项目贡献者与用户的行为不存在法律关联,也不对用户的行为负责。务必负责任地使用生成模型,遵守道德和法律标准。