点云数据配准效果如下图所示:
3D人脸识别的验证、训练、测试都需要大量的3D人脸图像,但是并没有那么多的3D设备采集到3D人脸图像,那么怎么办? 2D图像其实是3D图像平面的影射,如果知道相机的方向和位置、光源的方向和位置可以反向计算得出3D的图像。根据相机的方向位置、光源的方向位置确定与否,有Shape from Shading、Shape from Silhouettes、Shape from DE-focus、Stereo matching等基于2D图像的3D重建算法。 上面介绍的算法都是从数学上进行分析、计算得出的,另外因为神经网络的火热,诞生了很多神经网络的2D图像3D重建的方法,由于神经网络的优势:精度高、实现相对简单、不需要复杂算法推导,基于神经网络的端到端的3D人脸重建慢慢成了主流,目前比较流行的模型有PRNet、3DDFA、face3d、2DASL、3DMM、VRNet等。 这里主要讨论业内认可度比较高的PRNet,PRNet是CVPR2018提交的作品,在3DDFA、3DMMasSTN等思想上一步步的改进得来。采用了encoder-decoder的网络架构,实现了端到端的单张RGB人图像进行3D人脸重构和密集人脸对齐的联合任务。训练集为300W-LP,3D重构的效果比较好,并且速度非常快,在GTX1080TI上达9.8ms/帧。 整体的网络结构如下所示: 图片出自:https://arxiv.org/pdf/1803.07835.pdf 3D重建的效果如下: 图片出自:https://arxiv.org/pdf/1803.07835.pdf 四、人脸检测 3D人脸检测跟2D+人脸检测主要以处理3D数据的方式不同进行区分。3D人脸识别处理的是3D的数据,如点云、体素等,这些数据是完整的,立体的。而2D+人脸检测的处理方式是将3D的人脸数据分为2D的RGB数据+深度数据。处理的方法为先采用2D的人脸识别方法处理2D的RGB数据,然后再处理深度数据。 3D人脸检测 很多3D人脸检测的方式还是采用RGB图像检测出人脸区域,然后再获取这个区域的RGB数据、D(深度)数据,重新组合获取到人脸的3D数据。 3D图像数据RGBD进行人脸检测,目前相对2D的人脸检测不是很成熟,目前并没有比较成熟的基于点云数据的人脸检测算法,基于点云的目标检测算法已经有研究,人脸检测也属于目标检测的范畴,目前3D的目标检测方法有: /1/基于3D的方法 3d fully convolutional network for vehicle detection in point cloud将整个场景的点云转换为体积网格,并使用3D体积CNN作为对象提议(proposal)和分类。由于3D卷积和大型3D搜索空间的数据量非常大,这些方法的计算成本通常相当高。 /2/点云的深度学习 在特征学习之前,大多数现有方法将点云转换为图像或体积形式。 Voxnet将点云体素化为体积网格,并将图像CNN推广到3D CNN。Vote3deep设计更有效的3D CNN或利用点云稀疏性的神经网络体系结构。 由于3D数据的复杂性、稀疏性、不确定性,所以处理3D目标检测的速度在NVIDIA GTX 1080i GPU上,帧速率大约为7fps。(出自 Frustum PointNets for 3D Object Detection from RGB-D Data) 2D+人脸检测 该方法实际上是将2D人脸检测的方法用到3D人脸检测,将3D图像数据分为RGB数据加深度数据,首先在分开的RGB数据上取到人脸的boundingbox,然后根据这个boundingbox获取相应的深度信息。其实就是2D的人脸检测,并没有使用到深度的信息。该方法相对基于点云数据的3D人脸检测有更多的优点:计算量少、算法相对成熟、计算速度快。目前很多基于3D人脸识别的人脸检测都是使用这种方法。 五、特征提取 3D人脸特征提取跟2D+人脸特征提取是两个不一样的过程。3D人脸特征提取处理的是3D的数据,如点云、体素等,这些数据是完整的,立体的,而2D+人脸特征提取将3D的人脸数据分为2D的RGB数据+深度数据,处理的方法为先采用2D的人脸特征提取的方法先提取RGB数据的特征,然后再处理深度数据。 3D人脸特征提取 跟2D人脸特征提取步骤一样,特征提取就是将人脸图像数据输入给神经网络,输出对应图像数据的人脸特征。使用这个特征跟库中的特征进行对比,计算差异就能判断出对比的两个人脸特征是不是同一个人。但是3D人脸特征提取处理的图像数据基本上是点云数据(当然还有别的表示方法,这里只分析主流的基于点云的方法),点云数据在3D人脸应用中也会存在以下特点: /1/无序性 因为目标视角位置的影响,点云数据的三维点的排列顺序千差万别,这样的数据很难直接通过End2End的模型处理。 /2/稀疏性 在机器人和自动驾驶的场景中,激光雷达的采样点覆盖相对于场景的尺度来讲,具有很强的稀疏性。在KITTI数据集中,如果把原始的激光雷达点云投影到对应的彩色图像上,大概只有3%的像素才有对应的雷达点。这种极强的稀疏性让基于点云的高层语义感知变得尤其困难。 /3/信息量有限 点云的数据结构就是一些三维空间的点坐标构成的点集,本质是对三维世界几何形状的低分辨率重采样,因此只能提供片面的几何信息。 面对以上困难,PointNet给出了自己的解决方案。PointNet是第一种直接处理无序点云数据的深度神经网络。PointNet是开创性的,首次提取将点云数据送入到神经网络的模型,在此之前,点云数据的处理基本是参照2D神经网络的方式,单独处理点云数据中的RGB,深度信息则另外处理,PointNet则将点云数据的RGBD信息作为一个整体处理,并设计了新的神经网络结构,它很好地尊重了输入点的置换不变性,为从对象分类,目标分割到场景语义分析等应用程序提供统一的体系结构。虽然简单,但PointNet非常高效和有效。PointNet的网络结构如下: 图片出自:https://arxiv.org/pdf/1612.00593.pdf PointNet设计的目的是解决点云数据的分类和目标的分割,所以可以使用PointNet中神经网层输入到分类器的数据作为特征输出,设计一个新的损失函数即可完成基于点云数据的人脸特征提取模型。 当然PointNet之后,相继出现了一批优秀的点云数据处理模型:PointNet++、PointCNN、PointSIFT、VoxelNet、Pointwise Convolutional Neural Networks 等。 上面的基于点云数据的处理模型都是可以用来作为提取人脸特征的模型,模型确定了,剩下的事情就是损失函数的设计、训练、推理。 损失函数设计 因为人脸图像数据经过特征提取模型转换之后输出的特征在数学上都是结构化数据,不管输入的图片数据是2D的还是3D的,特征数据结构是一样的,所以损失函数的设计3D的人脸特征提取跟2D的人脸特征提取是基本可以通用。损失函数的设计可以参考2D人脸识别使用的损失函数,如softmax、sphereface、cosface、arcface、triplet loss等。 — 训练 — 给设计好的神经网络模型+损失函数灌入大量的数据,根据损失函数计算的结果调整神经网络模型的权重参数,反复调整,使损失函数计算的结果最小或者不再变化,则停止训练,保存权重文件。Apple称在推出faceID是就使用了10亿张3D的图像进行训练,该10亿张3D照片是Apple自己使用设备获取的,是非公开的。我们要训练自己的3D人脸识别模型的话首先就得收集大量的3D人脸图像,3D人脸数据集太少是3D人脸识别没有很好普及的原因之一。 — 推理 — 推理部分跟2D人脸特征提取的基本一致,都是完成图像数据的输入,经过神经网络的计算,输出特征数据。这个神经网络是怎么计算由前面的神经网络设计、损失函数设计、训练决定。 2D+人脸特征提取 2D+人脸特征提取的实现就是将3D的数据人为的分开成RGB数据、D数据,将2D人脸特征提取的方法用在分开后的RGB数据上,先提取RGB图像数据的特征,然后再获取深度信息D的特征。而深度信息的特征提取有如下方法: 1)使用部分深度信息作为辅助特征 如鼻子的高度、脸型,嘴巴鼻子的高度比等,这些是比较简单的、而且是人可以理解的信息(相对于CNN提取的不可理解的特征而言)。 2)使用类似RGB图像数据的处理方式 设计一个CNN神经网络,把人脸的深度图像当成是一张灰度的照片进行训练,得出一个分类的模型,从而辅助人脸基于RGB部分的2D人脸识别。 上面的这两种深度信息特征提取方式借鉴了2D人脸识别的方法,处理速度、实现方法上有很大的优势。2D+人脸识别无法处理侧脸的情况,侧脸时不管是RGB数据还是深度数据都是会发生改变的,而点云数据则没有变化。 六、信息比对 信息比对是识别的过程,就是处理人脸图像数据提取出来的特征,处理的方法跟2D人脸识别的信息比对类似。主要计算两组数据的相似度,计算的方式有余弦距离、欧氏距离、曼哈顿距离、明可夫斯基距离、皮尔森相关系数、斯皮尔曼等级相关系数等。
总结 基于上述分析,2D人脸识别跟3D人脸识别的特点如下: 2D、3D人脸识别的区别实际就是图像数据的差异。2D的人脸识别只有RGB数据,而3D人脸识别基本是点云数据,点云数据多了深度信息,所以基于点云处理的模型比只有RGB数据的模型具有更高的识别准确率、更高的活体检测准确率。但是点云网络的计算因为点云数据的复杂性,需要消耗大量的运算资源,PointNet官方给出的单帧处理速度是0.17s。如果是2D+人脸识别的话,计算量跟2D人脸识别相比只是多了计算深度数据的特征,不会增加很大的计算量。 2D人脸识别有更成熟的图像预处理算法、人脸获取模型、特征提取模型,还有大量的数据支撑,工程上使用起来会更方便。使用基于2D人脸识别加深度信息辅助判断的2D+人脸识别能解决一定的问题,在活体检测准确率、识别准确率上都会比2D的人脸识别有提高。基于点云的3D数据处理不仅在人脸识别,在自动驾驶、机器视觉等领域都有很大的优势。2D、3D数据处理各有优势与不足,在不断的发展中相互借鉴,相互促进。 |