关于3d重建,离不开3dmm或者是3dmm的思想。
3dmm可以分为线性和非线性。
关于如何求解3dmm的形状及纹理参数,又可以分为对2d图片做卷积处理,或是直接在mesh上做处理。
在mesh上做图卷积是最近冒出来的新方向,在解决非欧几里德结构数据上有优越表现。
0. 回顾3dmm
基于单张图像的三维人脸建模较为基础的方法就是99年的这篇《A Morphable Model For The Synthesis Of 3D Faces》。
算法的大致思路是利用一个人脸数据库构造一个平均人脸形变模型,在给出新的人脸图像后,将人脸图像与模型进行匹配结合,修改模型相应的参数,将模型进行形变,直到模型与人脸图像的差异减到最小,这时对纹理进行优化调整,即可完成人脸建模。
公式表示:
纹理也是相似的表达形式。
于是人脸重建问题转为了求 系数的问题。
得到一张单张正脸照片,可以从里面得到人脸的68个特征点坐标(X),在BFM模型中有对应的68个特征点(),根据这些信息便可以求出系数,将平均脸模型与照片中的脸部进行拟合。
这里的是三维模型到2维平面的点,为正交投影矩阵,R为旋转矩阵,是位移矩阵。
那么需要求解的参数包括
近期关于人脸的3d重建或校正,有很多发展,下面是4篇近期有代表性的papers。
1. 3DDFA
来自Stan li的论文《Face Alignment Across Large Poses: A 3D Solution》(2015)。
这篇论文主要做的是脸部校正face alignment,face aligment需要检测出人脸特征点,是许多人脸应用的关键步骤。
在人脸特征点识别中,一个比较大的问题在于大多数算法,只能应对小角度(小于45°),无法应对大角度的情况。
原因在于:
现行的基于特征点的模型的前提是:假设所有特征点都是可见的。这并不适用于侧脸。
比较激烈的表情,正脸和侧脸就会有很大的变化。
-
呼应第一点,很多姿态下,脸部的特征点并不都是可见的,标定数据就变得无聊且难。
已有的数据库,包括AFM, LFPW, HELEN, IBUG只包含可见点。
为了应对这些问题,3DDFA的解决方案是:
为了解决不可见特征点的问题,作者决定不再拟合2d脸部图片,而是去拟合3d稠密脸部模型。那么遮挡和表情的问题就可以通过3d变换来解决。
为了解决拟合过程,作者提出基于回归的联级CNN网络。
为了解决数据的问题,作者构建了数据库,将2d脸部图片与3d模型一一配对。
特别之处:PNCC
设欲求的3dmm的参数为:
作者提出了一个PNCC(Projected Normalized Coordinate Code)。
如图,NCC是归一化到0到1之间的大众脸,有RGB 3个色道。
而PNCC是在参数p下,新的3d脸部S,通过Z-Buffer渲染法得到的2d图片,公式如下:
网络架构
输入:图片+PNCC,图片和PNCC各有rgb3色道,所以输入大小为.
输出:234维的列向量。这234分别代表:
234维输出 |
---|
199 shape parameters |
29 expression parameters |
6 个位姿参数 |
2. Nonlinear 3D Morphable Model
来自论文《On Learning 3D Face Morphable Model from In-the-wild Images》
3dmm公式表示为:
包括3DDFA也都是在线性层面寻找shape参数。
这些线性3dmm有一些不足之处:
需要高质量的3d扫描。
需要在严格的条件下获得。无法面对任意从网上抓图即刻复原的要求。
3dmm的表征能力不单单只被样本限制,还被其自身线性结构限制。
为了应对这些问题,Nonlinear 3dmm的解决方案是:
学习一个非线性3dmm模型;
shape 和 albedo 都是由2d图片得到;
前端编码器和后端解码器只依赖2d图片,不使用3d扫描。加上最后一层渲染层,达到了
end-to-end 。为弱监督学习。
特别之处:如何引入非线性?
观察shape(形状)&albedo(纹理):
可以发现他们形如全连接层的:
那么可以把它们看作是单层全连接层,那么自然为了增加模型表现力,浅层网络可以被拓展为深层结构,比如DNN。
网络结构
输入:单张图片。
先经过1个Encoder, 得到的参数,纹理的参数, 以及相机位姿参数和光源参数。
再经过2个Decoder, 将shape以及albedo参数,解码为shape和albedo。
最后为了使得网络端对端且弱监督,decoders得到的3d模型,需要一步渲染,得到模型的2d图片,与输入图片做对比,作为损失函数。
线性3dmm和非线性3dmm的对比:
以上这两篇还是在CNN的基础上操作,最近由于Geometric Deeplearning的发展,3dmm本身的样本是mesh,也是看作是图或者流体数据,近期有一些研究将GDL在应用在3dmm上。
3. Convolutional Mesh Autoencoder(CoMA)
来自论文《Generating 3D faces using Convolutional Mesh Autoencoders》(2018)。
这篇论文主要是:
提出了针对mesh的卷积网络mesh convolutions。
提出了编码解码结构(encoder-decoder structure),证明mesh convolution是可行的。
特别之处:mesh operators.
数据分为2类:
欧几里结构数据;
非欧几里德结构数据。
欧几里德结构数据
图片(image),视频(video),语音(voice)。
简单来说:排列整齐。
邻节点清晰;
邻节点数目确定。
非欧几里德结构数据
(1) 图数据(graphic)
(2) 流形数据(manifold)
简单来说:排列不整齐。
邻节点难以确定;
邻节点数目不确定。
这也意味这非欧几里德数据无法用相同的卷积操作来进行。
所以我们希望将非欧几里德结构数据嵌入到欧几里德空间。
对图的拓扑结构进行表示:
拉普拉斯矩阵为:
D是度数矩阵;A是邻接矩阵。
对L进行特征值分解:
U是每列为特征向量的正交矩阵;是特征值的对角矩阵。
那么,
(正交矩阵的转置等于它的逆)。
对于一个信号 x(n维),它的傅里叶变换可以定义为:
反傅里叶变换为:
那么对于信号x与卷积核y:
在图上的卷积操作可以定义为用循环切比雪夫多项式,制定一个mesh fileter,kenerl为
那么这个filter可以参数化为:
这里, 参数是切比雪夫参数向量,是在阶数为k时的切比雪夫多项式,。
谱卷积定义为:
x是输入,y是输出,整体的滤波操作很高效。
上述是mesh的卷积操作,下面是卷积的采样操作。包括上取样和下取样。
整个mesh共由m个顶点,
下取样:
上取样:
下面的图片可视化了mesh convolutions的作用。
网络结构
包含一个Encoder和一个Decoder.
Encoder:
从一个的空间映射到的向量空间
可以看出mesh convolution可以充分解决mesh的卷积问题。
4. Dense 3D Face Decoding
来自论文《Dense 3D Face Decoding over 2500FPS: Joint Texture & Shape Convolutional
Mesh Decoders》(2019).
这篇论文主要是将2.Nonlinear 3dmm 和3.Convolutional Mesh Autoencoder结合在了一起。即:
提出了应用mesh convolutions 的非线性3dmm。
提出了编码解码结构(encoder-decoder structure),直接从2d脸部图片生成包含形状和纹理的3d重建。
网络结构
包括4个部分:
1 Image encoder;
2 mesh encoder;
3 shared mesh decoder;
4 differentiable rendering module.
Image encoder:
输入: 的单张图片。 |
---|
经过10个卷积层 输出 |
再经过一个全连接层 输出 |
mesh encoder和shared mesh decoder与Convolutional Mesh Autoencoder(CoMA)相同。
shared mesh decoder:
image encoder的输出,作为shared mesh decoder输入: |
---|
经过4个mesh convolutions和上采样,得到 |
最后的differentiable rendering module是为了约束代价函数。使生成的3d脸部mesh模型的2d投影图片与输入图片最相似。
值得一提的是,此网络的代价函数除了最后的图片相似性,还约束了中间decoder的过程,公式表达为:
这里的
作为中间decoder的约束;
而是约束投影图片和输入图片的。
5. 总结
关于3d重建,离不开3dmm或者是3dmm的思想。
3dmm可以分为线性和非线性。
关于如何求解3dmm的形状及纹理参数,又可以分为对2d图片做卷积处理,或是直接在mesh上做处理。
在mesh上做图卷积是最近新冒出的新方向,在解决非欧几里德结构数据上有优越表现。