CV-3D-Face-Model

开源3D人脸重建项目整理

[TOC]

本文主要总结了经典3D人脸重建开源算法,如有遗漏请大家提醒补充。

〇、基础

1. 3DMM 1999

3D Morphable Model

《A Morphable Model For The Synthesis Of 3D Faces》 1999

提出人脸的一种线性表示方法

所有三维人脸是已经进行稠密对齐(3D face registration)的,即所有的三维人脸都能用相同的点云数或面片数来表示,且相同序号的点代表相同的语义

The model has 53K vertices and 106K faces.

3D 人脸建模 介绍 + code

3DMM的传统优化方法 | 阮明康

image-20200210230052577

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def split_coeff(self, coeffs):
"""
Return:
coeffs_dict -- a dict of torch.tensors

Parameters:
coeffs -- torch.tensor, size (B, 256)
"""
id_coeffs = coeffs[:, :80]
exp_coeffs = coeffs[:, 80: 144]
tex_coeffs = coeffs[:, 144: 224]
angles = coeffs[:, 224: 227]
gammas = coeffs[:, 227: 254]
translations = coeffs[:, 254:]
return {
'id': id_coeffs,
'exp': exp_coeffs,
'tex': tex_coeffs,
'angle': angles,
'gamma': gammas,
'trans': translations
}

2.BFM模型

BFM模型介绍及可视化实现(C++)

Basel Face Model是一个开源的人脸 数据库,其基本原理是3DMM,因此其便是在PCA的基础上进行存储的。 目前有多个版本的数据库(2009,2017, 2022)。 官方网站:2009,2017

数据内容(以2009版本为例)

01_MorphableModel.mat(数据主体)

​ BFM模型由53490个顶点构成,其shape/texture的数据长度为160470(53490*3),因为其排列方式如下:

1
2
shape: x_1, y_1, z_1, x_2, y_2, z_2, ..., x_{53490}, y_{53490}, z_{53490}
texture: r_1, g_1, b_1, r_2, g_2, b_2, ..., r_{53490}, g_{53490}, b_{53490}

.h5文件与.mat文件对应关系

[注] .h5文件中的tl数量与.mat数量不同,主成分方差的值也不同,且shape的值是.mat中shape值的0.001倍(见/shape/representer/length-unit)。

Matlab脚本

​ 建议阅读script_gen_random_head.m文件,该脚本实现了如何生成随机脸,从中我们可以学习到BFM模型的使用方法。

一、单图三维人脸重建开源算法

单图三维人脸重建代码,指根据一张二维人脸图像,恢复与之对应的三维人脸(包括形状和纹理),一些算法提供了训练代码及网络框架,一些算法仅提供了测试接口。

目前单图三维人脸重建主要的发展方向有两种,一种是基于多任务的三维人脸重建,在三维人脸重建过程的同时完成其他与人脸有关的任务,例如,人脸识别,人脸对齐,特征点定位等,以同时提高多任务的效果。另一种,期望重建出精细化的三维人脸,包括对表情和细节的恢复。

1.3DDFA CVPR 2016:

Github: https://github.com/cleardusk/3DDFA

Face Alignment in Full Pose Range: A 3D Total Solution》CVPR2016

通过恢复稠密的三维形状,以解决大姿态人脸2D特征点检测的问题。文中提到,这是第一篇利用CNN来解决3D人脸对齐问题的文章,网络通过输入PNCC图和原始二维图,输出234维参数(包括6维姿态参数[缩放参数,pitch,yaw,roll偏转角,沿xy轴的平移量],199维3DMM形状参数,29维3DMM表情参数),利用得到的系数更新原始的PNCC图,再与原图一起进行迭代。

Vertex 3D

2.pix2vertex ICCV 2017:

Github: https://github.com/matansel/pix2vertex

Unrestricted Facial Geometry Reconstruction Using Image-to-Image Translation》ICCV 2017(Sela17)

文章通过一个Image-to-Image转换网络,从一张二维图像中恢复一张普通深度图像与一张稠密对应图。根据文中提到的迭代弹性形变算法(实际是一种非刚性三维人脸对齐方法)将2.5D图像转化3D人脸网格。

image-20200210190858197

3.CNN3DMM_CVPR 2017:

Regressing Robust and Discriminative 3D Morphable Models With a Very Deep Neural Network》CVPR2017

Github: https://github.com/anhttran/3dmm_cnn

本文介绍的是上2文中恢复基础形状的方法,利用ResNet101深层神经网络框架,从in-the-wild二维图像恢复三维人脸形状,并用于识别,在文中针对训练数据量不足提出数据扩充方法,利用一篇多图三维人脸重建文章方法生成足量的带标签的三维人脸,训练过程仍采用回归3DMM参数的方法。

image-20200210191137165

4.Richardson_CVPR 2017

Github: https://github.com/Cogito2012/3DFaceRecon

《Learning Detailed Face Reconstruction from a Single Image》CVPR2017

image-20200210193653717

5.E2FAR CVPR 2017:

End-To-End 3D Face Reconstruction With Deep Neural Networks》CVPR2017

Github: https://github.com/ShownX/mxnet-E2FAR

文章采用端到端的方法估计最优3DMM参数,输入是二维图像及其感兴趣区域,采用Dlib进行特征点检测,将恢复人脸身份形状和表情形状作分为人脸重建的两个子任务,输出包含身份参数向量和表情参数向量。

image-20200210223741952

6.VRN ICCV 2017:

Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression》ICCV2017

GitHub: https://github.com/AaronJackson/vrn

官网: https://cvl-demos.cs.nott.ac.uk/vrn/

A.S. Jackson 诺丁汉大学

采用体素方法进行三维人脸重建,对人脸而言重建精度不高,但是一种很好的三维人体重建方法。

image-20200210173005834

7. 3DMMasSTN ICCVW 2017:

Github: https://github.com/anilbas/3DMMasSTN

3D Morphable Models as Spatial Transformer Networks》ICCVW2017

3DMM方法作为空间转化网络的应用,利用3DMM恢复三维人脸形状从而得到姿态归一化和补全自遮挡的人脸图片。

Overview of the 3DMM-STN

8. EOSand4Dface 2017:

A Multiresolution 3D Morphable Face Model and Fitting Framework》Visapp 2016 and 《Real-Time 3D Face Fitting and Texture Fusion on In-the-Wild VideosIEEE Signal Processing Letters24.4 (2017)

Github: https://github.com/patrikhuber/eos

Github: https://github.com/patrikhuber/4dface

这篇文章的方法主要致力于将3DMM应用到实际开发中,作者提出一个基于C++的拟合框架,可支持Surrey Face Model (SFM), 4D Face Model (4DFM), and the Basel Face Model (BFM) 2009 and 2017数据库,目前这个拟合框架仍在更新。

eos

4D Face Model colour picture

4Dface

4D Face Model colour picture 4D Face Model colour picture

www.4dface.io/4dfm.

9 .Genova_CVPR 2018 1806.06098:

《Unsupervised Training for 3D Morphable Model Regression》CVPR2018

https://arxiv.org/abs/1806.06098

github: https://github.com/google/tf_mesh_renderer (bazel, c++, tf)

本文由普林斯顿大学、谷歌和麻省理工学院合作完成,是 CVPR 2018 的 spotlight 文章。使用无监督训练的方法基于 3DMM 进行人脸三维重建。论文基于编码器和解码器模型,创新性地将人脸识别网络引入训练的损失函数,使得生成的 3D 人脸能很好地保留了输入图片的人脸个体特征。该模型旨在拟合形状和纹理,并没有学习姿态表情和光照。算法的编码器接受图像作为输入,输出用于 3DMM 模型的参数。解码器接受参数后合成 3D 人脸。为了使网络不仅能保持个体信息,还能生成自然真实的人脸,作者提出了 3 个新的损失函数,即批分布损失(batch distribution loss)、回环损失(loopback loss)和多视角身份损失(multi-view identity loss)。批分布损失可使每个批的统计量与 3DMM 的统计量一致。回环损失可保证生成的 3D 人脸模型的2D成像图片重新进入编码器得到的参数和原图的参数尽量一致。多视角身份损失能使得模型学习到独立于观察角度的个体特征。实验结果说明,模型不仅仅可以生成与输入图像高度相似的 3D 人脸,而且生成的人脸独立于输入的表情和姿态,甚至被遮挡的人脸也可以达到不错的生成效果。

image-20200210185718650

10. CoMA ECCV 2018:

Generating 3D faces using Convolutional Mesh Autoencoders》ECCV2018

提出一种基于卷积面片自编码重建网络来获得三维人脸形状信息。

github: https://github.com/anuragranj/coma

image-20200210185852990

11. PRnet ECCV 2018:

Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network》ECCV2018

github: https://github.com/YadiraF/PRNet

  • 上海交通大学 + 云从科技 +

一篇针对三维人脸重建与对齐的论文,文章通过恢复稠密的3D人脸形状来定位2D人脸图片上的特征点,同时完成估计人脸姿态,人脸交换等应用。文中提到用uv-map来表示3D形状,实现了从端到端的网络结构。

image-20200210190114627

12. Extreme_3d_faces CVPR2018:

Extreme 3D Face Reconstruction: Seeing Through Occlusions》CVPR2018

Github: https://github.com/anhttran/extreme_3d_faces

文章方法先恢复一个基础形状,表情,六维视角自由度,然后估计一个凹凸贴图,用来捕捉人脸皱纹和非参的中级特征,再补全人脸被遮挡区域。

image-20200210190240938

13. Deep3DFace CVPRW 2019:

《Accurate 3D Face Reconstruction with Weakly-Supervised Learning: From Single Image to Image Set》arXiv 2019

最近,基于深度学习的3D人脸重建方法在质量和效率上均显示出令人鼓舞的结果,但是训练深度神经网络通常需要大量数据,而具有真实3D人脸形状的人脸图像却很少。 在本文中,我们提出了一种新颖的深度3D人脸重建方法,该方法包括:1)利用鲁棒的混合损失函数进行弱监督学习,同时考虑了低层和感知层信息以进行监督,以及2)执行多通过利用来自不同图像的互补信息进行形状聚合来重建图像人脸。 我们的方法快速,准确,并且对遮挡和大姿势稳健。我们在三个数据集上提供了全面的实验,系统地比较了我们的方法和15种最新方法,并展示了其最新的性能。

github: https://github.com/Microsoft/Deep3DFaceReconstruction

  • Microsoft
  • 3DMM系数

训练流程:

3-Figure1-1

示例:

image-20200210174434478

14. MMFace CVPR 2019

  • 用多指标回归网络MMFace解决3D人脸可变形模型(3DMM)与输入图像对齐的野外人脸重建问题。

    图2。我们的方法在AFLW2000-3D上的人脸重建和对齐结果[2]。

15. 2DASL 2019

project: Joint 3D Face Reconstruction and Dense Face Alignment from A Single Image with 2D-Assisted Self-Supervised Learning (2DASL)

1903.09359《3D Face Reconstruction from A Single Image Assisted by 2D Face Images in the Wild》

从单个2D图像重建3D人脸是具有广泛应用的挑战性问题。最近的方法通常旨在学习基于CNN的3D人脸模型,该模型从2D图像中回归3D变形模型(3DMM)的系数,以渲染3D人脸重建或密集人脸对齐。但是,缺少带有3D注释的训练数据会极大地限制那些方法的性能。为了缓解这个问题,我们提出了一种新颖的2D辅助自我监督学习(2DASL)方法,该方法可以有效地使用带有嘈杂地标信息的“野生” 2D面部图像来显着改善3D面部模型学习。具体来说,将稀疏的2D面部地标作为附加信息,2DSAL引入了四种新颖的自我监督方案,这些方案将2D地标和3D地标预测视为一种自映射过程,包括2D和3D界标自预测一致性,基于2D界标预测的循环一致性以及基于界标预测的预测3DMM系数的自评。使用这四个自我监督方案,2DASL方法大大减轻了对传统的配对2D到3D注释的需求,并提供了更高质量的3D人脸模型,而无需任何其他3D注释。在多个具有挑战性的数据集上进行的实验表明,我们的方法在3D人脸重建和密集人脸对齐方面都远远超过了最新技术。2DASL方法极大地减轻了对传统的2D到3D配对注释的需求,并提供了更高质量的3D人脸模型,而无需任何其他3D注释。在多个具有挑战性的数据集上进行的实验表明,我们的方法在3D人脸重建和密集人脸对齐方面都远远超过了最新技术。2DASL方法极大地减轻了对传统的2D到3D配对注释的需求,并提供了更高质量的3D人脸模型,而无需任何其他3D注释。在多个具有挑战性的数据集上进行的实验表明,我们的方法在3D人脸重建和密集人脸对齐方面都远远超过了最新技术。

Paper: https://arxiv.org/abs/1903.09359

Github: https://github.com/XgTu/2DASL

image-20200731170617469

image-20200731170640042

16. GANFIT 2019

code: https://github.com/barisgecer/GANFit

《GANFIT: Generative Adversarial Network Fitting for High Fidelity 3D Face Reconstruction》

Figure 2: Detailed overview of the proposed approach. A 3D face reconstruction is rendered by a differentiable renderer (shown in purple). Cost functions are mainly formulated by means of identity features on a pretrained face recognition network (shown in gray) and they are optimized by flowing the error all the way back to the latent parameters (ps, pe, pt, c, i, shown in green) with gradient descent optimization. End-to-end differentiable architecture enables us to use computationally cheap and reliable first order derivatives for optimization thus making it possible to employ deep networks as a generator (i.e,. statistical model) or as a cost function.

17. TBGAN 2019

code: https://github.com/barisgecer/TBGAN

《Synthesizing Coupled 3D Face Modalities by Trunk-Branch Generative Adversarial Networks》

Fig. 1: We propose a novel generative adversarial network that can synthesize high-quality texture, shape, and normals jointly for realistic and coherent 3D faces. Moreover, we demonstrate how we can condition the generation on the expression and create faces with various facial expressions.

Adaptive 2D 3D 2020

  • 《Adaptive 3D Face Reconstruction from a Single Image》
  • 3D重建,遮挡和极端姿势的解决方案
  • 没有开源

AvatarMe CVPR 2020

https://arxiv.org/abs/2003.13845

《AvatarMe: Realistically Renderable 3D Facial Reconstruction “in-the-wild”》

AvatarMe是第一种能够从单个“野生”图像中以更高的细节水平重建逼真的3D人脸的方法。为此,我们捕获了大量的面部形状和反射率数据集,并基于一种3D纹理和形状重建方法,并逐步完善其结果,以生成高分辨率散布和镜面反射所需的图像。逼真的渲染。

  • 使用专业扫描设备,搜集了一套完整的3D人脸数据集
avatarme_method

avatarme_teaser

proc_specAlbs

FRDA-open

https://github.com/Star-Clouds/FRDA

  • Face Reconstruction
  • Dense Alignment
  • Face 3D landmarks
  • 3D Pose Estimation

二、多图三维人脸重建开源算法

大部分基于多图的三维人脸的工作,希望从同一个人不同时间和环境拍摄的图像集合中恢复一个标准的具有身份信息的人脸形状(不带姿态,表情,纹理等),

1.AFAR

Adaptive 3D Face Reconstruction from Unconstrained Photo Collections》CVPR2016

这篇文章在首先在CVPR2015提出,在CVPR2016对算法细节进行了改进,先基于从粗到细的方法,利用二维图片的特征点拟合3DMM系数,再根据PS方法对精细的细节进行恢复,最后得到三维人脸。

三、人脸数据集

300W-LP

FaceWarehouse:用于视觉计算的3D面部表情数据库

3D面部表情数据库图4:使用具有不同数量组件的双线性模型拟合面部表情网格。 左上角是输入网格,下面显示了在identity属性和expression属性中使用不同数量组件的拟合结果。

训练源码:

3D-Morphable-Model-training

​ This program is to train the face 3D morphable model (3DMM)

https://github.com/hkbonychen/3D-Morphable-Model-training

参考资料:

开源3D人脸重建项目整理

3D Morphable Face Models—Past, Present, and Future

3DMM-and-3D-Face-reconstruction-and-manipulation

四、综述文献

State of the Art on Monocular 3D Face Reconstruction, Tracking, and Applications

单眼3D人脸重建,跟踪和应用的最新技术 2018

计算机图形和视觉社区长期致力于构建用于基于视觉输入来重建,跟踪和分析人脸的计算机化工具。在过去的几年中,取得了飞速的进步,这导致了新颖而强大的算法,即使在从单个RGB或RGB-D摄像机进行重建的极具挑战性的情况下,也能获得令人印象深刻的结果。随着这些技术在速度,准确性和易用性方面的进一步提高,应用范围广泛且稳步增长。受此飞速发展的推动,这份最新报告总结了单眼面部表情捕捉的最新趋势,并讨论了其应用,从基于动作的动画到实时面部重现。我们将讨论的重点放在使用基于优化的重建算法来恢复和跟踪人脸的三维模型的方法上。我们提供了有关真实世界图像形成的基本概念的深入概述,并讨论了使这些算法实用的常见假设和简化方法。 此外,我们广泛介绍了用于更好地约束欠约束的单眼重建问题的先验知识,并讨论了用于从单眼2D数据中恢复密集的,光几何3D人脸模型的优化技术。最后,我们在运动捕捉,面部动画以及图像和视频编辑的背景下,讨论了所审查算法的各种用例。

CCS概念•计算方法→重构;跟踪;动作捕捉; 形状造型;3D成像;


人脸企业级商业应用

face++8K

face++1K

花钱采,花钱标 :)

数据问题统一回复下:采集的话,主要是公司内部有一定数据积累,尤其是人脸识别组数据积累很大,这也是我们公司的优势吧。然后标注前期是精标,后期有些数据是大模型+筛选标注的。

10M的数据量