DECA:基于单张静态图像,进行 3D 人脸建模
By 超神经
内容概要:本文罗列了 3D 人脸建模常用的 3 大方法,以及基于静态图像进行人脸建模的 3 个方法。文末分享了一个 DECA 教程。
关键词:3D 人脸建模 计算机视觉 教程
3D 建模是计算机视觉领域中的一个关键问题,其中 3D 人脸建模,在游戏、影视特效、VR 等领域应用广泛。
但是由于人脸的复杂性、易变性,建立逼真的 3D 人脸模型,成为众多研究者不得不面对的一大挑战。
3D 人脸建模的三大常用方法
通常情况下,3D 人脸建模的方法分为三种:软件建模、仪器采集与基于图像的建模。
1、软件建模
软件建模是最早的 3D 建模手段,现在仍广泛应用于电影、动漫等行业中。
网友 Gal Yosef 用 Maya 绘制的场景
Maya 被广泛应用于电影、广告、游戏等特效创作中
曾获奥斯卡科学技术贡献奖等殊荣
常用的 3D 建模软件包括 3Dmax、Maya、ZBrush、Blender、Houdini 等。3D 建模软件占用磁盘空间大,对电脑的显卡要求高,硬件无法满足时,就容易出现延迟甚至崩掉。
2、仪器采集
手工建模耗时耗力,需要借助 3D 扫描设备,对目标物体进行全方位、多角度的数据收集。根据扫描对象的尺寸,3D 扫描仪分为桌面式、手持式和远距式。
由于人类无法长时间保持一个动作(如不自觉眨眼),因此 3D 人脸建模对扫描仪的扫描速度和细节捕捉有较高要求。
iPhone Animoji 功能利用 3D 结构光技术
通过前置组件快速扫描面部特征点
生成动画表情
此外,当环境、光线等发生变化时,扫描仪收集的人脸数据可能也会发生变化。
3、基于图像建模
即借助一张或几张二维图像,来恢复图像或场景的三维结构。
但是由于 3D 人脸是立体的、多维的,因此单一角度的观察,很难判断物体其他视角的构造,制作出来的模型也就成为了一个平面化的物体。
某算法只需上传一张清晰的人脸照片,即可生成 3D 人脸
但是人脸的顶部和侧面融合效果并不好
如上图所示,虽然目前的 3D 人脸重建法,可以重现人脸细节,但无法还原模拟面部肌肉随表情变化而变化,因此生成的 3D 人脸动作表情往往比较单一。
基于图像进行 3D 人脸建模的方法简介
DeepSketch2Face
DeepSketch2Face 是一个基于深度学习的 3D 人脸和漫画建模的草图系统。该系统配备一个非常好用的素描界面,用户可以自由绘制 2D 的人脸草稿。
研究人员开发了一个基于 CNN 的深度回归网络,用于依据 2D 草图,预测并生成 3D 人脸模型。
这个深度回归网络融合了 CNN 和输入草图的形状特征,并且有两个独立的全连接层分支,为 bilinear 面部表征生成独立的系数子集。
该系统有三种交互模式
初始草图模式、后续草图模式和基于手势的细化模式
该系统还支持基于手势的交互,以便用户进一步操作初始人脸模型。用户研究和数值结果都表明,该系统可以帮助用户快速有效地创建人脸模型。
GitHub 地址:
https://github.com/changgyhub/deepsketch2face
3DDFA_V2
作者提出了一个新的回归框架,除精度外,还兼顾了速度和稳定性。
首先,在轻量级 backbone 基础上,作者提出了一个 meta-joint 优化策略,可以动态回归一小部分 3DMM 参数,这极大地提高了速度和精度。
为了进一步提高在视频处理中的稳定性,作者进而提出了一种虚拟合成法,可以把一张静态图像,转换为一段包含平面内和平面外脸部移动的短视频。
3DDFA_V2 方法概述
3DDFA_V2 框架包括四部分:预测 3DMM 参数的轻量级 backbone、fWPDC 和 VDC 的 metajoint 优化,landmark-regression 正则化,以及合成短视频的组件。
在高精度和高稳定性的前提下,模型在单 CPU core 上的运行速度超过了 50fps,同时优于其他最先进的重型模型。
3DDFA_V2 是 3DDFA 的升级版,与 3DDFA 相比,3DDFA_V2 的性能和稳定性都更佳。此外,3DDFA_V2 用快速面部检测器 facebox 取代了 Dlib。还增加了一个由 c++ 和 cython 编写的简单 3D 渲染器。
GitHub 地址:
https://github.com/cleardusk/3DDFA_V2
DECA
DECA 全称 Detailed Expression Capture and Animation,它可以从一个低维的潜在表征中,稳健地生成 UV displacement map,该表征由 person-specific 细节参数和通用表情参数组成。
回归器 (regressor) 经过训练后,可以通过单张图像,预测细节、形状、反照率、表情、姿势和照明参数等。
输入图像、对齐重建、生成不同姿势和表情的动画
为了实现这点,研究人员引入了一种新的细节一致性损失 (detail-consistency loss),将人类特有的细节与表情变化引起的皱纹区分开来。
这种分离使得开发者可以通过控制表情参数,来合成真实的 person-specific 皱纹,同时保证 person-specific 的细节不会发生改变。
DECA 从 in-the-wild image 中学习,在成对的 3D 监督的情况下,在两个基准上都达到了最先进的形状重建精度。
in-the-wild 数据证明 DECA 具有鲁棒性,而且具有分解身份和表情相关细节的能力,这使得重建的人脸能够成为动画。
GitHub 地址:
https://github.com/YadiraF/DECA
官方教程:用 DECA 进行 3D 人脸建模
基于官方 Colab、针对 OpenBayes 平台优化后,我们输出了以下教程。本教程实现了基于单张人脸彩色图片进行 3D 人脸精细重建方法。
本教程主要演示了:
* 人脸三维重建过程
* 表情迁移过程
* 姿态变换,动画化的过程
代码目录:
* 代码环境准备
* 人脸重建
* 表情迁移
* 姿态和动画化的实现
注:本教程推荐使用 GPU 运行
具体实现方法请参考下方描述。
第一步:代码环境准备
%cd DECA
!pip install -r requirements.txt
! pip install pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py36_cu101_pyt160/download.html
from IPython.display import display,Image
第二步:人脸重建
!python demos/demo_reconstruct.py -i TestSamples/examples --saveDepth True --saveObj True
# 可视化重建效果 从左到右分别为原图,2D关键点,3D关键点,粗几何结构,精细几何结构和深度图
display(Image(filename='./TestSamples/examples/results/alfw1_vis.jpg'))
第三步:表情迁移
!python demos/demo_transfer.py --image_path ./TestSamples/examples/IMG_0392_inputs.jpg --exp_path ./TestSamples/exp/7.jpg
# 可视化表情迁移效果
display(Image(filename='./TestSamples/animation_results/IMG_0392_inputs_animation.jpg'))
第四步 姿态和动画化的实现
!python demos/demo_teaser.py --inputpath ./TestSamples/teaser --exp_path ./TestSamples/exp
# 可视化实现效果
display(Image(filename='./TestSamples/teaser/results/teaser.gif'))
完整代码,请访问:
https://openbayes.com/console/open-tutorials/containers/3vGLMGSXAcY
用 DECA 进行 3D 人脸建模,请访问:
https://openbayes.com/console/open-tutorials/containers/3vGLMGSXAcY
参考:
https://bbs.cvmart.net/articles/5125
https://www.artec3d.cn/learning-center/best-handheld-3d-scanners