此前,中科院自动化所的一篇论文《所有姿态范围内的面部替换:3D 解决方案》引起广泛关注。近日,中科院的一位博士生对 “3D 实时换脸” 论文 PyTorch 实现改进版,使得每张图的推理时间只需 0.27 毫秒,同时还增加了实时培训等功能。
2018 年 4 月,针对如何解决所有姿势范围内的面部替换,中科院自动化所的研究人员发表了一篇论文,提出了 3D 实时解决方法。
近日,Github 一位作者 cleardusk(主页:github.com/cleardusk,目前是中科院自动化所的在读博士生)将 “3D 实时换脸”PyTorch 实现改进版,每张图的推理时间只需 0.27 毫秒!
这一改进版本帮助 Pytorch 改进了论文《所有姿态范围内的面部替换:3D 解决方案》中提到的方法。该论文的作者之一是来自中科院自动化所的 Xiangyu Zhu,根据其个人主页上的信息,他和 cleardusk 博士期间的导师均是李子青教授,二人可以说是同门师兄弟。
面部对齐使面部模型适合图像并提取面部像素点的语义,已成为计算机视觉领域中的一个重要主题。此前,大多数算法都是针对中小姿态(偏角小于 45 度)的面部而设计的,缺乏在高达 90 度的大幅度姿态中对齐面部的能力,这一论文就是针对所有姿态范围内的面部替换所提出来的方法。
而此次这位博士生提出的改进版本还增加了一些额外的工作,包括实时培训、培训策略等,而不仅仅是重新实现 “3D 实时换脸”。 更详细的内容未来将会发布在相关博客中,包括一些重要的技术细节。到目前为止,这个改进版本发布了预训练第一阶段的 pytorch 模型,其中包括 MobileNet-V1 结构、训练数据集和代码。在 GeForce GTX TITAN X 上,每张图像的推理时间约为 0.27 毫秒(输入批量为 128 的情况下)。
以下是关于 ALFW-2000 数据集的几个训练结果(根据模型 phase1_wpdc_vdc.pth.tar 进行推断):
那么,改进版能实现哪些应用呢?
首先,它能够实现面部对齐。
其次是面部重塑,实现 “变脸”!
如何入门:要求与用法
如果要着手尝试改进版,那么你需要:
- PyTorch >= 0.4.1
- Python >= 3.6 (Numpy, Scipy, Matplotlib)
- Dlib (Dlib 用于检测面部和标志。如果你可以提供面部边框线和标志,则无需使用 Dlib。可选择性地,你可以使用两步推理策略而无需初始化这些数据。)
- OpenCV(Python 版,用于图像 IO 操作。)
安装顺序:
sudo pip3 安装 torch torchvision。更多选择点击:pytorch.org
sudo pip3 安装 numpy,scipy,matplotlib
sudo pip3 安装 dlib==19.5.0 # 19.15+ 版本,这可能会导致与 pytorch 冲突,大概需要几分钟
sudo pip3 安装 opencv-python 版
此外,强烈建议使用 Python3.6 + 而不是旧版,这样可以实现更好的设计。
接下来具体用法如下:
1、复制下面这个改进版(这可能需要一些时间,因为它有点大)
github.com/cleardusk/3… 或者 git@github.com:cleardusk/3DDFA.gitcd 3DDFA
2、使用任意图像作为输入,运行 main.py:python3 main.py -f samples/test1.jpg
如果你可以在终端中看到这些输出记录,就可以成功运行它:
Dump tp samples/test1_0.ply
Dump tp samples/test1_0.mat
Save 68 3d landmarks to samples/test1_0.txt
Dump tp samples/test1_1.ply
Dump tp samples/test1_1.mat
Save 68 3d landmarks to samples/test1_1.txt
Save visualization result to samples/test1_3DDFA.jpg
因为 test1.jpg 有两张人脸,因此有两个 mat(存储密集面顶点,可以通过 Matlab 渲染)和 ply 文件(可以由 Meshlab 或 Microsoft 3D Builder 渲染)预测。
结果 samples/test1_3DDFA.jpg 如下所示:
附加示例:
python3 ./main.py -f samples/emma_input.jpg --box_init=two --dlib_bbox=false
当输入批量为 128 的情况下,MobileNet-V1 的推理时间约为 34.7 毫秒,平均每张图像的推理时间约为 0.27 毫秒。
评估与训练资源
首先,你需要下载压缩的测试集 ALFW 和 ALFW-2000-3D(下载链接:pan.baidu.com/s/1DTVGCG5k…) ,下载后解压并将其放在根目录中。接下来,通过提供训练的模型路径来运行基准代码。我已经在 models 目录中提供了四个预先训练的模型。这些模型在第一阶段使用不同的损失进行训练。由于 MobileNet-V1 结构的高效率,模型大小约为 13M。
在第一阶段,不同损失的有效性依次为:WPDC> VDC> PDC,使用 VDC 来微调 WPDC 的方法取得了最好的结果,预训练模型的性能如下所示:
训练脚本位于 training 目录中,相关资源如下:
1、train.configs(217M),链接:
pan.baidu.com/s/1ozZVs26-…,该目录与 3DMM 参数和训练数据集的文件列表相对应;
2、train_aug_120x120.zip(2.15G),链接:
pan.baidu.com/s/19QNGst2E…,增强训练数据集的裁剪图像;
3、test.data.zip(151M),链接:
pan.baidu.com/s/1DTVGCG5k…,AFLW 和 ALFW-2000-3D 测试集的裁剪图像;
4、model_refine.mat(160M),链接:
pan.baidu.com/s/1VhWYLpnx…,BFM 模型
准备好训练数据集和配置文件后,进入 training 目录并运行 bash 脚本进行训练。训练参数都以 bash 脚本呈现。
参考链接: