论文题目:《Joint 3D Face Reconstruction and Dense Face Alignment from A Single Image with 2D-Assisted Self-Supervised Learning》
最近的基于学习的3D face重建方法通常旨在学习基于CNN的3D面部模型,其从2D图像回归3DMM的系数以渲染3D面部重建或密集面部对齐。 然而,带有3D注释(3DMM系数)的训练数据的不足大大限制了这些方法的性能。为了缓解这个问题,此论文提出了一种新颖的2D辅助自监督学习(2DASL)方法,该方法利用2D“in-the-wild”人脸图像来有效地监督和促进3D人脸模型学习。
在讨论具体内容前先来看论文的一些成果。
论文中对齐的结果和3D重建结果示例:
在一些极端的例子中,该算法的对齐效果也很不错:
在3D人脸对齐方面该算法取得了目前的最高精度,超越PRNet。如下图:
在人脸3D重建方面,与以前算法相比也取得了高质量的重建结果:
本文的一个主要出发点就是解决带有3D注释的训练数据的不足的问题,针对这个问题2DASL引入了四种新颖的自监督方案,将2D特征点和3D特征点预测视为自映射过程,包括2D和3D特征点自预测一致性、2D特征点预测的循环一致性和基于特征点预测的3DMM系数预测自评估(self-critic)。使用这四种自监督方案,2DASL方法显著减轻了对传统配对2D到3D注释的要求,并提供了更高质量的3D面部模型,而无需任何额外的3D注释。
从这张图可以看到,整个框架包含三个模块,1)第一个模块采用了传统的基于CNN的回归网络,使用的是ResNet-50深度网络。此模块根据输入图像回归3DMM系数。输入是4通道,一个3通道的RGB图像,一个1通道的2D Facial Landmark Map (FLM),FLM就是一张图像,对应于面部特征点的位置的值为1,其他位置的值为-1。2)第二个模块:输入的图像通过一个编码器将图像转为latent representation(就是编码器提取图像特征)。编码器包含6个卷积层,每一层连接一个ReLU层和最大池化层。3)将3DMM系数联合第二个模块的输出作为第三个模块的输入,来评估latent representation和对应的3DMM系数是否一致。此模块由4个全连接层组成,每层大小分别为512,1024,1024,1,然后是softmax层,输出是一个分数,用来说明输入对(latent representation和对应的3DMM系数)的一致性程度。
2DASL使用两组图像训练模型,即具有3DMM ground truth的2D图像和仅具有2D面部特征点注释的2D面部图像(2D特征点利用已有的特征点检测算法得到)。 通过最小化以下一个传统的3D监督函数和四个自监督损失来训练该模型。
这个传统的3D监督函数是Weighted 3DMM coefficient supervision,其用来测量模型预测的3DMM系数的准确度。利用ground truth的3DMM系数监督模型的训练,以此使得模型预测的系数更接近ground truth系数。此外作者还明确地考虑每个系数的重要性,并相应地重新衡量它们对损失计算的贡献。这样得到weighted coefficient prediction loss:
其中,表示第i个系数的重要性 ,根据投影后2D特征点位置引入的误差计算。表示3D shape投影,表示的是第i个系数来自而其他的系数来自。作者这样做的原因是,通过引入这样一个重新加权方案,在模型训练期间,CNN模型将首先关注学习权重较大的系数(例如,用于旋转和平移的系数)。在减少误差和权重后,模型再优化其他系数(例如identity和expression的系数)。(其实就是借鉴了坐标下降法的思想)。
由于3D数据的不足,想要充分利用2D图像进行训练(这些图像可以通过特征点检测算法得到稀疏的2D特征点),就必须要引入新颖的自监督方案,这也是此篇论文的出发点之一。自监督方案包含有三种不同的自监督损失,包括2D特征点一致性损失,3D特征点一致性损失和循环一致性损失(cycle-consistency)。
我们可以这样理解这三个损失,直观上如果网络模型足够好的话,那它应该保证三种一致性:1)以原始2D特征点作为模型输入,将模型预测得到的3D特征点投影会得到2D特征点,投影得到的2D特征点与模型的输入的2D特征点要尽可能接近的;2)反过来,如果将输入模型,那预测到的3D特征点与也是要非常接近的;3)接着如果对做投影得到的应该与一致。这样就形成了循环一致性。
这样上述三个损失函数就不难理解了。三个损失分别为:
因为2D图像上的面部边界特征点是不能准确地表示对应的3D特征点的,因此不考虑它们并采样了18个特征点,同时对每个点分配了权重。
接着进一步引入了一种自评估(self-critic),用“in-the-wild”2D人脸图像来弱化监督模型训练。这一部分就是整个网络框架的第三个模块,这一模块的输入有两个人脸图像集,一个没有任何3D注释,一个带有ground truth的3DMM系数,CNN回归模型会预测 的3DMM系数。将两组图像输入,经过encoder之后得到图像的latent representation ,然后结合对应的3DMM系数通过一个判别器。此模块需要优化一个损失函数:
至此,整体损失函数为
论文中用到的训练数据集是300W-LP和UMDFaces。300W-LP数据集包含60K+张人脸图像及对应的3DMM系数。UMDFaces是“in-the-wild”图像数据集,包含367,888张人脸图像。测试数据集使用的是AFLW2000-3D和AFLW-LFPA。
此外,作者还通过评估模型的几个变体对AFLW2000-3D进行消融研究:
1)2DASL (base),只输入RGB图像,没有自监督和自评估监督;
2)2DASL (cyc),输入RGB图像以及对应的2D FLMs进行自监督,但没有自评估监督;
3)2DASL (sc),只输入RGB图像且只使用自评估监督;
4)2DASL (cyc+sc),同时包含cyc和sc。
同时, 对于每个变体,还使用带有(w )或不带(w / o)权重的。下图是实验结果:
代码地址:https://github.com/XgTu/2DASL
目前该库仅放出了测试代码,作者称等论文被接收之后会放出训练代码。