图像动画的一阶运动模型 活照片蚂蚁牙黑特效 Avatarify

图像动画的一阶运动模型

该存储库包含Aliaksandr Siarohin、Stéphane Lathuilière、Sergey Tulyakov、Elisa Ricci和Nicu Sebe的论文First Order Motion Model for Image Animation的源代码。

示例动画

左侧的视频显示了驾驶视频。每个数据集右侧的第一行显示源视频。底行包含动画序列,其中运动从驾驶视频和源图像中获取的对象传输。我们为每个任务训练了一个单独的网络。

VoxCeleb 数据集

时尚数据集

MGIF 数据集

安装

我们支持python3。要安装依赖项,请运行:

pip install -r requirements.txt

YAML 配置

有几个配置 ( config/dataset_name.yaml) 文件,每个文件一个dataset。请参阅config/taichi-256.yaml以获取每个参数的描述。

预训练的检查点

检查点可以在以下链接中找到:google-drive或yandex-disk。

动画演示

要运行演示,请下载检查点并运行以下命令:

python demo.py  --config config/dataset_name.yaml --driving_video path/to/driving --source_image path/to/source --checkpoint path/to/checkpoint --relative --adapt_scale

结果将存储在result.mp4.

在我们的方法中使用之前,应该裁剪驾驶视频和源图像。要获得一些半自动裁剪建议,您可以使用python crop-video.py --inp some_youtube_video.mp4. 它将使用 ffmpeg 为作物生成命令。为了使用该脚本,需要 face-alligment 库:

使用 Docker 进行动画演示

如果由于库兼容性问题而无法运行演示,并且您正在运行 Linux,则可以尝试在 Docker 容器中运行它,这样可以更好地控制执行环境。

要求:已安装 Docker 19.03+ 和nvidia- docker 并且 能够成功运行nvidia-docker使用测试。

我们将首先构建容器。

docker build -t first-order-model .

现在我们在本地有了可用的容器,我们可以使用它来运行演示。

docker run -it --rm --gpus all \       -v $HOME/first-order-model:/app first-order-model \       python3 demo.py --config config/vox-256.yaml \           --driving_video driving.mp4 \           --source_image source.png  \            --checkpoint vox-cpk.pth.tar \            --result_video result.mp4 \           --relative --adapt_scale

Colab 演示

换脸

可以修改使用监督分割掩码执行面部交换的方法。 对于无监督和有监督的视频编辑,例如换脸,请参阅Motion Co-Segmentation。

训练

要在特定数据集上训练模型,请运行:

CUDA_VISIBLE_DEVICES=0,1,2,3 python run.py --config config/dataset_name.yaml --device_ids 0,1,2,3

代码将在日志目录中创建一个文件夹(每次运行都会创建一个带有时间戳的新目录)。检查点将保存到此文件夹。要检查训练期间的损失值,请参阅log.txt。您还可以检查train-vis子文件夹中的训练数据重建。默认情况下,批量大小调整为在 2 或 4 个 Titan-X gpu 上运行(除了速度,它没有太大区别)。您可以在相应.yaml文件的 train_params 中更改批量大小。

视频重建评估

要评估重建性能运行:

CUDA_VISIBLE_DEVICES=0 python run.py --config config/dataset_name.yaml --mode reconstruction --checkpoint path/to/checkpoint

您需要指定检查点的路径,reconstruction子文件夹将在检查点文件夹中创建。生成的视频将存储到此文件夹中,生成的视频也将以png无损“.png”格式存储在子文件夹中以供评估。可以在本文中找到计算指标的说明:https ://github.com/AliaksandrSiarohin/pose-evaluation 。

图像动画

为了动画视频运行:

CUDA_VISIBLE_DEVICES=0 python run.py --config config/dataset_name.yaml --mode animate --checkpoint path/to/checkpoint

您需要指定检查点的路径,animation子文件夹将在与检查点相同的文件夹中创建。您可以在该子文件夹中找到生成的视频及其无损版本png。默认情况下,来自测试集的视频将随机配对,但您可以在相应.csv文件中指定“源、驱动”对。该文件的路径应.yaml在pairs_list 设置中的相应文件中指定。

有两种不同的方式来执行动画:使用绝对关键点位置或使用相对关键点位置。

使用绝对坐标的动画:使用驱动视频的绝对位置和源图像的外观来执行动画。这样,对所使用的驱动视频和源外观没有特定要求。然而,这通常会导致性能不佳,因为不相关的细节(例如形状)会被转移。检查动画参数taichi-256.yaml以启用此模式。

使用相对坐标的动画:从驾驶视频中我们首先估计每个关键点的相对移动,然后我们将此移动添加到源图像中关键点的绝对位置。这个关键点与源图像一起用于动画。这通常会带来更好的性能,但这需要视频第一帧中的对象和源图像中的对象具有相同的姿势

数据集

拜尔。这个数据集可以直接下载。

Mgif 这个数据集可以直接下载。

时尚。按照从下载数据集的说明进行操作。

太极。按照data/taichi-loading中的说明.

尼莫。请按照有关如何下载数据集的说明进行操作。然后应该使用中的脚本对数据集进行预处理。

VoxCeleb。请按照说明进行操作。

在您自己的数据集上进行训练

将所有视频调整为相同大小,例如 256x256,视频可以在“.gif”、“.mp4”或带有图像的文件夹中。我们推荐后者,为每个视频制作一个单独的文件夹,其中包含“.png”格式的所有帧。这种格式是无损的,并且具有更好的 I/O 性能。

创建一个data/dataset_name包含 2 个子文件夹train和的文件夹test,将培训视频放在 中,将train测试放在test.

创建一个配置config/dataset_name.yaml,在 dataset_params 中指定根目录root_dir: data/dataset_name。还要调整 train_params 中的 epoch 数。

推荐内容