随着深度学习技术的进步,面部相关任务的研究也成为学术界和工业界的热门话题。众所周知的面部任务通常包括面部检测,面部识别,面部表情识别等,其主要使用2D RGB面部(通常包括一些纹理信息)作为输入; 3D扫描成像技术的出现为面部相关任务 - 3D面部开发了一条新的探索路线。
与许多2D面部相关的任务介绍性文献/评论文章相比,3D面部的入门知识还不够好。本文将回顾和介绍三维人脸相关的基础知识,并总结一些关于三维人脸识别与重建的基础入门文献。
3D人脸基础知识
一般而言,RGB,灰度和红外人脸图像是2D人脸,其主要是在特定视角下表示颜色或纹理的图像,并且没有空间信息。用于训练深度学习的图像通常是2D。
2.5D是在某个视角下拍摄的面部深度数据,但由于角度问题,它显示的表面不连续,也就是说,当你试图旋转面部时,会有一些像沟壑一样的空隙区域。这是因为拍摄时未捕获被遮挡部分的深度数据。
那么3D面孔呢?它通常由不同角度的多个深度图像组成,完全显示面部的表面形状,并且在具有一定深度信息的密集点云中的空间中呈现面部。
相机模型
相机模型包括四个坐标系:像素坐标,图像坐标,摄像机坐标,世界坐标(高中物理老师的头部没有闪光灯谈论参考系统),摄像机成像过程是三维的 真实三维空间中的点映射到成像平面(二维空间)的过程也称为投影变换。
- 相机坐标→图像坐标
相机坐标系到图像坐标系的过程可用小孔成像解释,本文借助相似原理可清楚描述相机坐标系中点 到像平面点 的过程,其中 f 为相机焦距。
相机坐标到图像坐标的齐次表示
- 图像坐标→像素坐标
一般使用像素值表示 2D 图像,坐标原点通常是图像的左上角,因此像素坐标和成像平面坐标之间,相差了一个缩放和原点的平移
通过用相机坐标表示图像坐标,可以得到像素坐标与相机坐标的关系:
为保证齐次性(一般很多变换矩阵有这个特性),这里稍作改写:
即经常说的相机内参矩阵(Camera Intrinsics),K 有 4 个未知数和相机的构造相关,f_x,f_y 和相机焦距、像素大小有关,c_x,c_y 是平移的距离,和相机成像平面的大小有关。
- 世界坐标→相机坐标
其实,相机坐标系并不是一个特别“稳定”的坐标系,因为相机会随着自身移动而改变坐标的原点以及各个坐标轴的方向,这时就需要一个更稳定的坐标系来更好地表示射影变换,而我们通常采用的恒定不变的坐标系为世界坐标系。
相机坐标系与世界坐标系之间相差一个旋转矩阵和平移向量
同样为了保证齐次性,其改写形式如下:
即常说的相机外参(Camera Extrinsics)。
从世界坐标系到像素坐标系相当于弱投影过程。总之,有必要将摄像机坐标系转换为像素坐标系。摄像机内部参数需要从摄像机坐标系转换为世界坐标系。
3D相机
根据相机的工作模式,它可以分为单目相机(Monocular),双目相机(Stereo)和深度相机(RGB-D),而相机的精髓也在于反映三者 二维的维度世界。
单目摄像机,即单个摄像机的摄像机,会丢失场景的深度,因为它只能同时捕获某个视角的图像。例如,如果已知某个图像点P在成像平面上,由于特定距离未知,投影的像素点可以是连接相机原点和P的线上的任何位置,因此在旅行或毕业时, 可以采取。精心挑选的人放错了效果图。
那你怎么用深入的信息拍照呢?一种方法是通过双目相机获得深度。双目相机顾名思义“双眼”,左眼相机和右眼相机的光圈中心和基线,空间中的点P将投影在双目相机图像的总和上 因此,P原理可以通过相似原理来解决。到基线的距离是点P的深度(参见下面的公式)。在实际应用中,更容易计算物体纹理丰富的地方的视差,并且考虑到计算量,双目深度估计通常由GPU或FPGA计算。
,其中
随着技术的不断发展,深度相机的出现使我们更容易捕捉到图像的深度。其中一款深度相机是基于结构光的RGB-D相机。以人脸为例,扫描仪在目标面上发出光图案(例如光栅),并根据其变形计算表面的形状,从而计算面部深度信息.
图片中还有一个RGB相机,那么如何实现深度和RGB之间的一对一对应?在测量深度之后,RGB-D相机通常根据制作时每个相机的位置完成深度和彩色图像像素之间的配对,并输出一对一对应的彩色图和深度图。我们可以在相同的图像位置读取颜色信息和距离信息,计算像素的3D相机坐标,并生成点云。
还有一个基于飞行时间(ToF)的深度相机,它向目标发射脉冲光,然后根据光束在传输和返回之间的飞行时间确定物体与其自身的距离。与激光传感器不同,ToF相机可以在发射脉冲光的同时捕获整个图像的像素深度,而激光通常通过逐点扫描获取深度信息。
综上所述,3D人脸任务通常使用深度相机来获取人脸的深度信息。深度相机通常包括双目相机,基于红外结构光原理(例如Kinect 1代)的RGB-D相机或基于光时间的原理。ToF相机(如Kinect 2代)。
3D 人脸数据
3D面部相关任务通常有三种表征数据的方法:点云,网格图和深度图。
点云(Point cloud)
在三维点云中,每个点对应于三维坐标。许多3D扫描设备使用该数据格式来存储所获取的3D面部信息。有时,面部的纹理属性也可以缝合到形状信息,并且点的表达式变为,其中p,q是稀疏坐标。
点云的缺点在于,由于点存储通常是无序的,因此不能很好地获得每个点的邻域信息。通常,点云数据用于拟合平滑表面以减少噪声的影响。
网格(Mesh)
3D网格由3D表面上的预先计算和索引信息表示。与点云数据相比,它需要更多的内存和存储空间,但由于3D网格的灵活性,它更适合做一些三维变换,如仿射变换,旋转和缩放。每个3D网格数据由以下元素组成:点,线和三角形面。二维纹理的坐标信息也可以存储在点信息中,这有利于重建更精确的三维模型。
深度(Depth/Range)
深度图像也称为2.5D或范围图像。将3D面的z轴值投影到2D平面上,类似于平滑的3D表面。由于这是二维表示,因此可以直接应用许多处理二维图像的现有方法。该数据可以使用三角测量原理直接以灰度显示或转换为3D网格。
3D人脸相关任务
常用Pipeline
2D 人脸相关任务的 Pipeline 一般分为数据预处理、特征提取、特征分析等过程,那么 3D 人脸的 Pipeline 呢?这里本文引用《3D Face Analysis: Advances and Perspectives》
上面显示了一个通用的3D / 2.5D面部分析框架。我们通过设备获得面部(网格,点云,深度)的3D / 2.5D表示,并在经过一些预处理操作(如球面剪切,噪声消除,深度缺失修复,点)后获得一些可用的3D / 2.5D 云登记等人脸。
接下来,预处理面的特征在于许多方法,例如表面法线,曲率,UV-Map或常用的CNN方法; 在提取特征之后,可以执行各种面部任务,例如识别,表达分析,性别分类,年龄分类等。
鉴于本文的目的是梳理三维人脸介绍的相关知识,下面简要介绍三维人脸重建与识别的相关工作,包括开发过程和一些相对易用的论文。
3D人脸识别
在3D人脸识别的最初几十年中,面部设计的特征和分类或测量方法被用于面部验证和识别。近年来,随着深度学习方法的兴起,一些工作已经被数据和3D人脸识别模型训练所驱动。本文简要总结了三维人脸识别方法,具体如下:
1.传统的识别方法
基于点云数据的三维人脸识别
这种方法通常不考虑3D空间中的面部特征,而是直接使用3D点云进行匹配。常用方法是ICP(迭代最近点,链接:https://en.wikipedia.org/wiki/Iterative_closest_point)和Hausdorff距离(链接:https://en.wikipedia.org/wiki/Hausdorff_distance)。
作为一种刚性匹配算法,ICP可以校正三维点云本身的平移和旋转变换,但对于由表达式和遮挡引起的表面凹凸变化不够稳健,且时间开销相对较大。
ICP使用面部表面采样的法向矢量进行匹配。由于正常信息具有更好的可辨识性,因此这里简要介绍ICP算法。ICP是一种迭代最近点的方法,可以实现两个云的匹配。确切地说,这种类型与2D面的关键点对齐。
假设有两组点云: ,通过迭代的方法找到一组 和,满足,即求解
Hausdorff距离通过计算两个面的三维点云之间的最近点对之间的最大值来评估空间中不同真实子集之间的距离。但是,该算法仍然存在表达和遮挡问题。改进的Hausdorff距离算法使用3D面的轮廓来过滤数据库中的对象。
模板面部方法由三维人脸上的种子点变形,适合待测人员的面部,使用拟合参数进行人脸识别,并且可以生成特定的密集三者生成的 - 维面点云对齐方法。变形的脸模型。
基于人脸特征的三维人脸识别
基于人脸特征的三维人脸识别可分为局部特征和全局特征。有关详细信息,请参阅3D Face Analysis:进展和展望。
本地功能有两个方面。一种是基于面部区域组件信息的特征,例如鼻子,眼睛和嘴巴区域。这些特征可以大致分为基于面部关键点,曲率和块的特征提取方法; 描述子算法提取的特征,如在深度图像上提取小波特征,SIFT,2D-LBP,MRF,LSP,以及对3D数据进行特征提取,如3D-LBP。全局特征可以转换整个面部并提取特征。面部数据可以以不同的方式存储,例如点云,图像,网格型3D面部数据,例如3D面部模型作为球面谐波特征。(SHF),或者使用稀疏系数作为特征将3D面部表面映射到用于稀疏表示的二维网格中。
2.深度学习识别方法
CNN在2D人脸识别方面取得了很大进展。然而,2D脸部很容易受到化妆,手势,灯光和表情的影响。3D面本身包含面部的空间形状信息,受外部因素的影响较小。与2D面部相比,3D面部数据携带更多信息。然而,由于难以获得3D面部数据和一些面部数据缺乏准确性,3D面部识别的发展不是很热。
基于深度图的人脸识别
深度图中人脸识别的常用方法包括提取LBP,多帧深度图融合,深度图归一化等特征。这里,简要介绍了两个与深度图相关的人脸识别论文。
《Robust Face Recognition with Deeply Normalized Depth Images 》
本文被认为是一种比较常见的深度图人脸识别管道,它分为两个网络:规范化网络和特征提取网络。归一化网络负责将输入深度图转换为HHA图像并通过CNN网络返回3DMM的参数(如下面的3D重建中所述),其可在重建3D点云之后投影到归一化深度中。。特征提取网络基本上类似于普通的2D人脸识别网络,并且获得表征深度图面部的特征向量。
《Led3D: A Lightweight and Efficient Deep Approach to Recognizing Low-quality 3D Faces 》
本文是CVPR 2019的低质量深度图人脸识别文章。深度图面向预处理和数据增强操作的一些文本值得参考。在本文中,球面的法线的法线用作网络输入。实验表明,可以更好地表征深层。同时,作者还精心设计了轻量级识别网络(主要是多层特征融合和关注)。机制),可以参考。
基于RGB-D的人脸识别
基于RGB-D的人脸识别基本上基于2D人脸识别方法。与RGB对齐的深度图作为频道发送到CNN网络。RGB-D的一个优点是增加面部的空间形状信息。RGB-D图像有很多面部识别论文,但基本思想是融合在要素层或像素层中。
《Accurate and robust face recognition from RGB-D images with a deep learning approach 》
2016年,本文提出了一种基于深度学习的RGB-D图像人脸识别算法。本文通过RGB图像和多帧融合深度图像进行预训练和迁移学习,并在特征层融合,增强识别能力。
基于深度/ RGB-3DMM的人脸识别
在过去的两年中,出现了使用3DMM进行深度或RGB图像的人脸模型回归,并应用于识别任务。这类工作的总体思路是通过回归3DMM参数(表情,姿势,形状)来实现3D人脸数据增强,并应用于CNN培训,代表性工作如FR3DNet(链接:https:/ / arxiv.org/) abs / 1711.05942),3D人脸识别(链接:https://arxiv.org/abs/1703.10714)。
《Deep 3D Face Identification》
本文是将深度神经网络应用于三维人脸识别任务的第一种方法。主要思想是利用3DMM + BFM将深度图拟合成3D人脸模型,实现深度数据放大,最后将数据增强(如随机遮挡和姿态变换)发送到Finetune的2D人脸识别网络。
《Learning from Millions of 3D Scans for Large-scale 3D Face Recognition》
本文是3D人脸识别的杰作,真正实现了数百万个人脸数据的创建,提出了一个3D人脸识别网络FR3DNet,最终在现有公共数据集上进行了测试,效果非常好(数据方式) 驾驶基本上是完全刷牙的状态)。 创建新ID的方法是在作者的私有数据集中找到两个具有最大弯曲能量差异的3D面,并通过添加获得新的3D面(有关详细信息,请参阅原始文本); 还提出了脸部3D。 在点云识别网络中,使用大卷积核有助于更好地感知点云的形状信息。
还有许多数据驱动的3D人脸识别,如3DMMCNN(链接:https://arxiv.org/abs/1612.04904),总结基于深度学习的3D人脸识别方法受到数据和现有数据不足的限制。精度不够。研究人员的第一项任务是进行大量数据增强或生成大量虚拟3D人脸。但是,这些方法是否具有很强的泛化性能仍值得讨论,属于3D人脸识别时代也许还未到来。
3D人脸重建
3D面部研究中另一个有趣的方向是3D面部重建,其是通过一个或多个RGB面部图像重建面部的3D模型。它有许多应用场景,例如Face Animation,密集Face。事实上,RGB到3D人脸重建是一个病态的问题,因为RGB图像实际上代表了纹理特征并且没有空间信息,但考虑到实际应用价值,已经提出了一些三维重建方法。这些年来。
基于传统方法的人脸重建
传统的3D人脸重建方法通常通过图像本身表示的信息完成3D人脸重建,例如图像的视差和相对高度。通过双目视觉实现3D重建更为常见。困难在于如何在不同的视角下匹配相应的特征。对于此类文章,您可以参考“不同3D面部重建方法的调查”(链接:https://pdfs.semanticscholar.org/d4b8/8be6ce77164f5eea1ed2b16b985c0670463a.pdf)。
基于模型的面部重建
3D面部重建中有两种常用的模型,其中一种是通用模型CANDIDE,另一种是3DMM。
在众多常见型号中,CANDIDE-3最为着名,包括113个顶点和168个面。简单地说,通过修改这些顶点和面,它们的特征与要重建的图像相匹配。通过整体调整,面部特征等面部特征尽可能对齐;进行局部调整以使面部的局部细节更精确,之后,执行顶点插值,并且可以获得重建的人脸。
该模型的优缺点是显而易见的。模板的顶点数量太少,重建速度快,但重建精度严重不足,面部细节特征重建不好。
入门 3D 人脸一定会接触的算法是 3D Morphable Model (3DMM),这是 1999 年由 Volker Blanz 在《A Morphable Model For The Synthesis Of 3D Faces》一文中提出的一种人脸模型的线性表示,可以将一张 2D 的人脸图片生成其对应的 3D 人脸模型,表示方法为:
其中 和 分别为通过统计分析 PCA 得到的 shape 和 expression 基,使用 3DMM 模型重建人脸首先需要这两组基,目前使用较多的是 BFM 基【下载地址】(https://faces.dmi.unibas.ch/bfm/main.php?nav=1-2&id=downloads)【论文地址】(https://ieeexplore.ieee.org/document/5279762)。
那么如何从二维重建三维呢?首先要了解三维模型是如何投影到二维平面的,上文最开始讲的相机模型,把三维模型投影到二维平面可以表示为:
通过使用面部数据库构建平均面部变形模型。在给出新的面部图像之后,将面部图像与模型匹配,并且修改模型的相应参数以使模型变形直到模型和面部图像。差异被最小化,纹理被优化和调整以完成面部建模。
一般的2D到3D重建过程使用监督方法来处理2D面部关键字和3D顶点的正交投影上的关键点。
基于 CNN 端到端的人脸重建
利用3DMM模型,可以执行单个2D面的3D重建,但是真正的问题是传统的3DMM重建是迭代拟合过程,其效率低,因此不适合于实时3D面。重建。分析3DMM原理,我们需要调整3DMM的199维参数(这个不同的基数是不同的),为什么不使用CNN回归基参数?通过这种方式,我们可以通过网络预测参数,实现3DMM的快速重建。
但是有一个问题,我们如何获得培训数据?为此,大多数论文选择使用3DMM线来拟合大量的人脸图像作为地面实况,然后将它们发送到神经网络进行训练。虽然这是一个病态的问题,但效果还不错。本文将介绍几种易于理解的CNN端到端3D人脸重建方法。
《Disentangling Features in 3D Face Shapes for Joint Face Reconstruction and Recognition 》
本文使用CNN返回Identity Shape和Residual Shape参数。表达式类似于3DMM。不同之处在于,除了普通的重建损失(通常是元素方式的L2损失)之外,还增加了识别损失以确保重建的面部。ID特征不变。
《End-to-end 3D face reconstruction with deep neural networks》
本文的思想也是返回3DMM参数。作者认为,高级语义特征可以表示ID信息,而中间层特征可以表示表达特征,因此可以从不同层次返回相应的参数来实现3D人脸重建任务。
《Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network 》
另一种常见的端到端3D人脸重建方法是位置回归网络(PRN),强推!(使用开源代码PRN:https://github.com/YadiraF/PRNet)。
本文提出了一种用于三维人脸重建和密集人脸对齐的端到端位置回归网络。
作者介绍了UV位置图,它可以通过2D图像存储人脸的3D点云坐标。假设包含65536个点的3D点云可以通过UV位置图(每个像素点)表示为256 * 2563 2D图像。存储点云的空间坐标,因此可以通过编码器 - 解码器网络返回原始图像的UV位置图来实现3D面部重建。
通过设计不同区域不同权重的损失函数,作者最终实现了更高精度的人脸重建和密集的关键点对齐。
《3D Dense Face Alignment via Graph Convolution Networks》
上述回归UV位置图的方法存在问题。当最终的UV图像映射到3D面网格的图像时,会出现一些条纹。在最近的一些3D面部重建工作中,通过多级回归3D面部网格也有很好的重建效果。
本文作者逐步增加了网格顶点的回归,从而完成了多个监督任务下的最终网格回归。同时,采用图卷积的形式,点之间的映射关系可以更加必要,最终实现。良好的重建效果。
3D人脸重建是近年来的热门话题。每年在各种会议上有很多文章提出各种3D面部重建程序。但是,从入门的角度来看,掌握上述常用方法将是下一步的研究,将打下良好的基础。
随着深度学习技术的进步,面部相关任务的研究也成为学术界和工业界的热门话题。众所周知的面部任务通常包括面部检测,面部识别,面部表情识别等,其主要使用2D RGB面部(通常包括一些纹理信息)作为输入; 3D扫描成像技术的出现为面部相关任务 - 3D面部开发了一条新的探索路线。
来源:CSDN
作者:静以修心-fan
链接:https://blog.csdn.net/qq_28834001/article/details/103392903