留个笔记自用
Deep Unsupervised 3D SfM Face Reconstruction Based on Massive Landmark Bundle Adjustment
做什么
3D sace reconstruction,三维人脸重建,就是字面意思
通过输入一张图片,进行三维模型的建模
做了什么
使用Surface from motion(SFM)作为多视角的几何约束进行人脸重建,这里展示了不同视点的图像重建出来的结果
怎么做
整个框架的overwivew↑,输入是一个图像序列,输出是一个当前图像的人脸三维模型(其实也是图像的深度图+pose,因为有了这两个,就可以把人脸直接往世界坐标系的3D空间里投影)。整体的流程是这样的,第一步是用人脸检测方法把图像中的人脸检测出来,第二步就是使用SFM联合优化landmark点的深度图和pose
首先是第一步人脸检测
整体流程并不是简单的输入图像然后输出landmark点,而是通过3D投影生成一致性。具体来说,这里涉及到了使用3D模型获得2D图像上的landmark,所以首先是生成3D模型。
这里用的方法叫3DMM三维可变形人脸模型
用一个简单的话来说,就是有一个正则化人脸库,比如眼睛(特征、位置、形状等等),然后对当前输入的人脸进行分析,提取相似的特征,在三维空间中一一匹配,是一种统计模型。值得注意的是这里提到了一点,由于不同视角的相机拍摄人脸肯定会有些地方拍摄不到,比如拍的左脸,但是3DMM会自动生成右脸,而SFM其实是会受这个影响的,所以这里就加了一个可见不可见的过滤,就是去选择N个landmark是视图可见的
有了这个3D模型和上面的landmark,就可以将3D模型投影到2D空间上
于是乎,这里就得到了一个复杂的东西,通过3DMM将2D图像转换成3D模型,然后3D模型上的可视landmark点再投影到2D上,所以,这里得到的可以理解成一个转换的2D landmark。这样就可以进行训练了,也就是希望输入一个图像,能得到它当前视角下的landmark,而这个landmark的目标则是通过上面这个2D-3D-2D的方式得到的label。
然后是第二步,SFM框架
跟SFM一样,预测的是图像的深度图和camera的pose,由两个不同的网络组成,一个是depth net 一个是pose net,都是用类似于Unet的结构,一个输出的是人脸上每个landmrk的深度图,一个是整张图相对之间的pose。
最后,就是一致性优化
在这里,一致性优化主要分为三种,第一种是空间损失,也就是spatial consistency,是上图的左侧,人脸检测部分做的,这里做的就是监督预训练的2D landmark检测器检测出来的点和2D-3D-2D的landmark点之间的距离,简单来说,就是希望当前视角图像检测出来的关键点和3D模型中当前是视角的关键点近似。第二种是spectral constraints光度限制,就是这里的右侧,这里的意思是通过面部的深度图和pose去变换目标头像后,2D的每个像素的RGB值要跟源图像近似。第三种是深度一致性,跟前面的比较相似,就是强制从目标图像的深度图转换至源深度图,然后强制这个与原始深度图近似。
最后是这些一致性的定义
首先是landmark空间损失,这里的Π是3D-2D的投影函数,Pab是目标图像到源图像的motion,也就是pose,D是深度图。这里的意思就是我前面所说的,对第Mi个目标图像,通过pose和深度图,也就是2D-3D-2D。然后后面那个u就是源图像上的所有landmark点坐标。
然后是spectral损失,监督基于面部深度和相机运动的转换后的目标图像的光度与源图像一致,就跟前面的landmark基本类似了。值得注意的是,这里加了一个正则化损失,传统的SSIM,对比结构相似性的,可以理解成对比两张脸像素(颜色)的结构相似性。
最后是depth深度损失,这个就很好理解了,直接对比源图像和目标图像的深度图上的差,n是一个归一化函数
效果
Strling和Facespace数据集上重建效果的比较
总结
1.将SFM的约束方法引入了三维人脸重建,并且类似地构造了几种一致性,也是从SFM的多视角特性里面提取出来的
2.用了无监督的方法,因为人脸重建特殊的landmark性质,同时监督landmark和像素点,其实传统的SFM(BA)的设计方法就很无监督,也是利用一致性的,但在DL里体现出来就不一样了