宅男福音DeepFake进阶版!基于位置映射图网络进行3D人脸重建

4,169 阅读5分钟
策划编辑 | Natalie
作者 | Favio Vázquez
译者 | 郝毅
编辑 | Natalie
AI 前线导读: 位置映射图网络(PRN)是一种端到端的使用联合回归解决稠密排列和 3D 人脸重建的方法。本文是 AI 前线的第 36 篇论文导读,我们将对 PRN 方法进行简要的解释,并介绍其在计算机视觉中的应用,最后还会附上开源代码和操作方法,快来动手试试看吧!

更多优质内容请关注微信公众号“AI 前线”,(ID:ai-front)

想象一下在未来,我们在远程通话的时候,通过全息投影可以让你感觉到说话的人就在你面前。而现在,一种基于计算机视觉的类似应用已经产生了。

在过去的十年里,许多计算机视觉研究方向的重要团部队在 3D 人脸重建以及人脸对齐方面取得了很多令人兴奋的进展。其中最主要的是将卷积神经网络作为一种人工神经网络应用于这方面。然而,由于用于映射的人脸 3D 模型的不完善,重建后的空间具有局限性,这就导致大部分人脸 3D 重建放方法的效果并不理想。

位置映射地图网络 (PRN)

上图是 PRN 的结构,绿色的矩形表示残差块,蓝色的矩形表示转置卷积层

在最近的一篇论文中,Yao Feng 团队提出一种端到端的方法——位置映射地图网络 (PRN),该方法将稠密对齐和重建 3D 形状联合起来解决。在人脸 3D 对齐和重建方面,该方法在多个数据库上都远超之前的方法。

更详细地说,他们设计了一种 UV 位置映射(https://en.wikipedia.org/wiki/UV_mapping ),它是一种记录了所有面部点云三维坐标的二维图像,在每个 UV 多边形中都保留了语义信息。然后使用一种加权损失训练一个简单的编码 - 解码网络,这个网络从单张 2D 面部图像得到 UV 位置映射。

上图是该方法的部分结果,奇数行是人脸对齐结果 (仅显示 68 点),偶数行是 3d 重建结果

这篇论文的贡献主要在这些方面:

  • 首次使用端到端的方式解决了人脸对齐和三维人脸重建的问题,该方法不受低维空间的限制。

  • 为了直接得到 3D 人脸结构和稠密对齐,我们开发了一种名为 UV 位置面的表示方法,它记录了 3D 人脸的位置信息,并提供与 UV 空间上每个点所对应的语义信息。

  • 在训练阶段,我们提出了一种权重 mask,它为位置图上每个点分配不同的权重,并计算权重损失。实验表明,这种设计有助于提升网络的性能。

  • 最后,我们提供了一种轻量级的框架能够达到 100fps,这个框架可以直接从单张 2D 人脸图像获得人脸的 3D 重建结果。

  • 在 AFLW2000-3D 数据库和 Florence 数据库上,相比于目前最好的方法,该方法在 3D 人脸重建和稠密面部对齐上都相对获得了 25% 提升。

实现方法

该方法的代码使用 Tensorflow 的 python 接口完成。该项目的官方网址为:https://github.com/YadiraF/PRNet 。如果你想测试一下人脸重建的效果,你需要安装以下环境:

  • Python 2.7(包括 numpy,skimage,scipy 库)

  • Tensorflow 版本需大于等于 1.4

  • dlib(用于人脸检测,如果能够提供人脸的边界框则不需要安装该扩展)

  • opencv2(用于显示测试结果)

训练好的模型可以在这里下载:百度网盘(https://pan.baidu.com/s/10vuV7m00OHLcsihaC-Adsw ),谷歌网盘(https://drive.google.com/file/d/1UoE-XuW1SDLUjZmJPkIZ1MLxvQFgmTFH/view?usp=sharing ),目前这个代码仍在开发过程中,该团队将会不断完善并在未来提供更多灵活的功能。

应用
基础应用
  • 用于人脸对齐:对于可见和非可见的面部关键点都可以进行稠密对齐 (68 点)。

  • 3D 人脸重建:通过单张图片获得人脸 3D 模型关键点以及对应的颜色。结果可以保存为以.obj 为后缀的 mesh data,在 Meshlab 或者微软的 3D Builder 中可以直接加载。当然,不可见区域的纹理会因为自遮挡而产生变形。

扩展应用
  • 3D 姿态估计:不同于只用 68 个关键点进行面部姿态检测,使用 3D 模型中的所有关键点 (超过四万个) 可以获得更准确的姿态预测结果。

  • 深度图像:

  • 纹理编辑:可以进行数据增强,对于输入的人脸图像,可以更改其特定区域的纹理,例如眼睛:

  • 换脸:使用另一个人的脸部替换某个特定图像中的面部,并可以适应该图像中人脸的姿势。

使用方法
  • 克隆项目

  • 使用百度网盘或谷歌网盘下载训练好的 PRN 模型,将他们存入路径 Data/net-data

  • 运行测试代码

  • 使用自己的图像测试

运行 python demo.py --help 可以获得更多帮助信息。

论文原文:

https://arxiv.org/pdf/1803.07835.pdf

英文原文:

3D Face Reconstruction with Position Map Regression Networks

https://heartbeat.fritz.ai/3d-face-reconstruction-with-position-map-regression-networks-