(2018-05-04)之前有一段时间没有follow人脸相关的工作,之后打算在这一块儿再进一步。近期抓紧恶补一下相关文章,趁零碎时间做点survey,跑点代码,组织一下后续文章的idea。
原文:http://openaccess.thecvf.com/content_ECCV_2018/papers/Yao_Feng_Joint_3D_Face_ECCV_2018_paper.pdf
GitHub:https://github.com/YadiraF/PRNet
问题领域:三维人脸重建+稠密对齐
关键词:UV position map
发表:ECCV2018
原文背景:三维人脸重建和人脸对齐是一对相辅相成的问题。许多工作通过得到3DMM的系数来同时达到这两个目的,但是这受限于model space的质量。但是一些model-free的方法却没有考虑到先验的语义信息,所以加大了训练的难度。(具体要见相关工作部分)
此文贡献:
1. 是第一个在摆脱“低维空间”限制的前提下,end-to-end同时做到三维人脸重建和dense对齐的;
2. 创建了一种UV position map,记录UV坐标下的三维position;
3. 训练时,在position map上创建了一个weight mask,从而创建了一个weighted loss。
相关工作:
1. 三维人脸重建。
1.1 早期的三维人脸重建工作主要是先在图像上寻找landmark点或者某些局部特征,然后利用非线性优化的方法来解出3DMM的系数,这种方法非常依赖landmark点或者局部特征的准确性。后面的方法有的就利用CNNs来学习图像和三维template的dense correspondence,从而得到3DMM系数。近期工作有的也直接开始用CNNs学习3DMM系数,有监督或者无监督的都有。这些方法的一个弊端就是受到model space的限制。
1.2 另外也有方法是基于一个reference model,采用warping的方法来做。这样虽然是model-free的,但是新的弊端就是受到reference的限制。
1.3 另外也有基于voxel来做的。输入一张image,输出volume data,从而得到人脸的mesh。这样虽然是model-free并且reference-free的,但是却受到分辨率限制,且没有利用语义信息。最关键是输出的volume data包含太多冗余信息,使得网络模型太复杂。
1.4 本篇工作是model-free、reference-free,并且不是voxel-based的。作者说简单轻量效果好。
2. 人脸对齐。
2.1 起初,人脸对齐工作主要在二维上进行。输入单张图像,输出二维landmark点。方法包括AMM、CLM、级联回归、CNN-based方法等。这种工作没有办法找不可见的landmark,所以对于大角度的图像效果不好。
2.2 后面演化到三维人脸对齐。三维人脸重建可以很好地指导三维人脸对齐工作。也有工作直接用网络学三维landmark点的heat map。
2.3 稀疏对齐的工作做的差不多了,稠密的对齐又开始发展。稠密对齐要求找到两张image或者是image和3D geometry之间的dense correspondence。可以拟合3DMM系数,也可以直接学习image和3D geometry(可见部分)的correspondence。
2.4 本篇工作直接通过UV position map解决了三维重建和所有区域的dense correspondence。
算法:
1. UV position map的设计
思路不是太难,所谓UV position map就是一张RGB图。称作RGB,其实代指的是xyz。UV map的(i,j)点处的RGB分别代表三维空间中的xyz,对应三维人脸上的一个点,那么有了UV map就有了三维人脸;另一方面,三维人脸上的点经过弱透视投影,可以找到图像上的位置,故建立了dense的correspondence。
关于数据构造,文章是先根据数据集中(image,3DMM mesh)的pairs,来构造ground truth的UV position map。详细做法可见原文。UV map的尺寸在文中是256*256。
2. 网络结构和loss函数
网络结构就比较简单,encoder+decoder的形式,encoder用了一些残差结构,decoder是反卷积。
loss是在MSE loss的基础上给不同区域的点加上了权重。68个关键点权重为16,眼睛鼻子嘴巴权重为4,其他脸部区域权重为3,脖子权重为0。
代码测试结果:
先上最近不太开心的GEM:
最近复联比较火,测试一下寡姐:
重建和对齐效果都还不错。GEM的长相感觉还是不算很神似吧,嘟嘴的表情倒是做出来了。大体看上去纹理的分辨率还是不是很高,能看到有明显的条纹状。