图像动画的一阶运动模型 活照片蚂蚁牙黑特效 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 库:
如果由于库兼容性问题而无法运行演示,并且您正在运行 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 数。