我们支持python3
。要安装依赖项,请运行:
pip install -r requirements.txt
[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
有几个配置 ( 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 为作物生成命令。为了使用该脚本,需要面部对齐库:
git clone https://github.com/1adrianb/face-alignment
cd face-alignment
pip install -r requirements.txt
python setup.py install
如果由于库兼容性问题而无法运行演示,并且您正在运行 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
@graphemecluster 为 Google Colab 准备了一个 GUI 演示。它也适用于 Kaggle。有关源代码,请参阅demo.ipynb
。
有关旧演示,请参阅old_demo.ipynb
。
可以修改使用监督分割掩码执行面部交换的方法。 对于无监督和有监督的视频编辑,例如换脸,请参考运动协同分割。
要在特定数据集上训练模型运行:
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 上运行(从速度上看,它没有太大区别)。您可以在相应文件的 train_params 中更改批量大小.yaml
。
要评估重建性能运行:
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
文件中指定“source,driving”对。该文件的路径应在.yaml
pairs_list 设置中的相应文件中指定。
执行动画有两种不同的方式:使用绝对关键点位置或使用相对关键点位置。
taichi-256.yaml
以启用此模式。Bair。这个数据集可以直接下载。
Mgif。这个数据集可以直接下载。
Fashion。按照从中下载数据集的说明进行操作。
Taichi。按照data/taichi-loading中的说明或https://github.com/AliaksandrSiarohin/video-preprocessing中的说明进行操作。
Nemo。请按照有关如何下载数据集的说明进行操作。然后应使用https://github.com/AliaksandrSiarohin/video-preprocessing中的脚本对数据集进行预处理。
VoxCeleb。请按照https://github.com/AliaksandrSiarohin/video-preprocessing中的说明进行操作。
将所有视频调整为相同大小,例如 256x256,视频可以在“.gif”、“.mp4”或包含图像的文件夹中。我们推荐后者,为每个视频创建一个单独的文件夹,其中包含所有帧的“.png”格式。这种格式是无损的,并且具有更好的 i/o 性能。
创建一个包含data/dataset_name
2 个子文件夹的文件夹train
,并将test
培训视频放在.train
test
创建一个config config/dataset_name.yaml
,在dataset_params中指定根目录root_dir: data/dataset_name
。同时调整 train_params 中的 epoch 数。
引文:
@InProceedings{Siarohin_2019_NeurIPS,
author={Siarohin, Aliaksandr and Lathuilière, Stéphane and Tulyakov, Sergey and Ricci, Elisa and Sebe, Nicu},
title={First Order Motion Model for Image Animation},
booktitle = {Conference on Neural Information Processing Systems (NeurIPS)},
month = {December},
year = {2019}
}
[/hidecontent]