一、模型介绍

利用统一视频传播模型实现一致的人体图像动画。基于扩散的人体图像动画技术在合成忠实遵循给定参考身份和所需运动姿势序列的视频。尽管如此,仍然存在两个限制:

i)需要额外的参考模型来将身份图像与主视频分支对齐,这显著增加了优化负担和模型参数;

ii)生成的视频通常时间较短(例如 24 帧),阻碍了实际应用。

为了解决这些缺点,我们提出了一个 UniAnimate 框架来实现高效和长期的人体视频生成。

首先,为了降低优化难度并确保时间连贯性,我们通过结合统一的视频扩散模型将参考图像与姿势指导和噪声视频一起映射到一个共同的特征空间中。

其次,我们提出了一种统一的噪声输入,它支持随机噪声输入以及第一帧条件输入,从而增强了生成长期视频的能力。

最后,为了进一步有效地处理长序列,我们探索了一种基于状态空间模型的替代时间建模架构,以取代原始的计算耗时的时态 Transformer。

大量实验结果表明,UniAnimate 在定量和定性评估中都取得了优于现有最先进同类产品的合成结果。值得注意的是,UniAnimate 甚至可以通过迭代使用第一帧调节策略来生成高度一致的一分钟视频。

二、部署流程

1.克隆
git clone https://github.com/ali-vilab/UniAnimate.git
cd UniAnimate
2.创建虚拟环境并安装依赖项
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
3.下载预先训练的检查点
  • 下载模型
git lfs install
git clone https://www.modelscope.cn/iic/UniAnimate.git

然后您可能需要以下命令将检查点移动到“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
4.姿势调整

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

# 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 上运行姿势对齐。

✔ 一些提示 :

  • 在姿态对齐中,会使用目标姿态序列中的第一帧来计算对齐的尺度系数,因此如果目标姿态序列中的第一帧包含整个人脸和姿态(手和脚),可以帮助获得更准确的估计和更好的视频生成结果。

5.运行 UniAnimate 模型生成视频
(1)生成视频片段(32 帧,768x512 分辨率)

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

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

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

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

✔ 一些提示 :

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

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

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

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

此后将生成 32 帧、1216x768 分辨率的视频片段:

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

✔ 一些提示 :

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

  • 虽然我们的模型不是在 48 或 64 帧上进行训练的,但我们发现该模型可以很好地推广到这些长度的合成。

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

(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,采用时间重叠的滑动窗口策略。你也可以先生成一段满意的视频片段,然后将这段视频的最后一帧输入到模型中,生成下一段视频继续播放。

Logo

NVIDIA官方入驻,分享最新的官方资源以及活动/会议信息,精选收录AI相关技术内容,欢迎大家加入社区并参与讨论。

更多推荐