RedZero9 发表于 2022-1-18 19:29

基于3DMM的人脸重建-传统优化方法(1)

本文主要基于开源项目Face2face【1】(中间会提及到face3d【2】和eos【3】),对采用传统优化方法的3DMM模板人脸重建算法整体流程做一个介绍。由于作者没有给出参考文献,笔者是从代码推论出来的整个算法,如有错误,欢迎指正。
一.算法流程



二.具体步骤

1.人脸关键点检测

      项目中采用了dlib或openpose进行提取。非重点,这里就略过了。
2.估计相机变换参数

         根据上述检测到的2D人脸关键点和当前估计的3DMM人脸的3D关键点,采用黄金标准算法来估计相机变换参数,包括旋转、平移和尺度(对应项目代码位于face2face/optimize/camera.py)。

[*]当采用射影摄像机时,算法如下(见【4】P123)



[*]当采用仿射摄像机时,算法如下(见【4】P126)



[*]有关图像点和空间点归一化的描述如下(见【4】P122)


3.估计身份、表情、纹理和光照参数


[*]目标函数
         主要采用了投影关键点误差和像素误差:

https://www.zhihu.com/equation?tex=E_%7Btotal%7D%3Dw_1E_%7Bland%7D%2Bw_2E_%7Bpixel%7D%2Bw_3E_%7Bid_%7Breg%7D%7D%2Bw_4E_%7Bexp_%7Breg%7D%7D%2Bw_5E_%7Btex_%7Breg%7D%7D%5C%5C

https://www.zhihu.com/equation?tex=E_%7Bland%7D%3D%7C%7CL2d_%7Bpre%7D%28%CE%B1_%7Bid%7D%2C%CE%B1_%7Bexp%7D%29-L2d%7C%7C%5E2_2%5C%5C

https://www.zhihu.com/equation?tex=E_%7Bpixel%7D%3D%7C%7CI_%7Bpre%7D%28%CE%B1_%7Bid%7D%2C%CE%B1_%7Bexp%7D%2C%CE%B1_%7Btex%7D%2C%CE%B1_%7Bsh%7D%29-I%7C%7C%5E2_2%5C%5C

https://www.zhihu.com/equation?tex=E_%7Bid_%7Breg%7D%7D%3D%7C%7C%CE%B1_%7Bid%7D%7C%7C%5E2_2%2Fid_%7Beval%7D%5C%5C

https://www.zhihu.com/equation?tex=E_%7Bexp_%7Breg%7D%7D%3D%7C%7C%CE%B1_%7Bexp%7D%7C%7C%5E2_2%2Fexp_%7Beval%7D%5C%5C

https://www.zhihu.com/equation?tex=E_%7Btex_%7Breg%7D%7D%3D%7C%7C%CE%B1_%7Btex%7D%7C%7C_2%5E2%2Ftex_%7Beval%7D%5C%5C
      式中, https://www.zhihu.com/equation?tex=%CE%B1_%7Bid%7D 为形状估计参数, https://www.zhihu.com/equation?tex=%CE%B1_%7Bexp%7D 为表情估计参数, https://www.zhihu.com/equation?tex=%CE%B1_%7Btex%7D 为纹理估计参数, https://www.zhihu.com/equation?tex=%CE%B1_%7Bsh%7D 球谐基底的估计权重参数, https://www.zhihu.com/equation?tex=id_%7Beval%7D 为3DMM模型形状基底的特征值, https://www.zhihu.com/equation?tex=exp_%7Beval%7D 为3DMM模型表情基底的特征值, https://www.zhihu.com/equation?tex=tex_%7Beval%7D 为3DMM模型纹理基底的特征值。
      至于如何求解,需要推导出该目标函数对于各 https://www.zhihu.com/equation?tex=%5Calpha 系数的jacobi矩阵(见face2face/optimize/image.py里面denseJointJacobian函数),然后采用高斯牛顿法迭代求解即可。
      注:1)Face2face【1】在得到3DMM的几何模型和每个几何点的RGB颜色后,直接采用了opengl的渲染管线来得到预测出的图像https://www.zhihu.com/equation?tex=I_%7Bpre%7D(见face2face/utils/opengl.py里面的具体实现)。渲染过程中国涉及到一些坐标投影的知识,也可以看看我之前写过的一篇文章【8】做个基本了解。
                2)face3d【2】里面手写了这部分的代码,感兴趣的可以自行查看(见face3d/mesh_numpy/render.py)。

[*]光照模型-spherical harmonic
         这里补充说下球谐光照模型,简单来说球谐为我们提供了一组在球面上的正交基底,类似于欧式空间的傅里叶基底,并且只需要取前9个基底就能很好的模拟我们的光照环境【6】:


         上式中 https://www.zhihu.com/equation?tex=%28x%2Cy%2Cz%29 为点的法线,并且在看实现代码【1】、【2】时发现,在三维人脸重建领域通常会忽略式中基底前面的系数:


      最终一个点的颜色的计算公式为 https://www.zhihu.com/equation?tex=I%28p%2Cn%29%3D%CE%BB%28p%29E%28n%29 ,为三维点,为点的法线, https://www.zhihu.com/equation?tex=E%28n%29 为根据法线计算得到的基底, https://www.zhihu.com/equation?tex=%CE%BB 是albedo也就是原始点的颜色,对应代码如下:


注:因为光照计算中涉及到法线,表明其对于身份系数有贡献,所以可以加入到优化项中来。
三.其它

         对于侧脸的情况,目测【1】、【2】的重建效果都不会很好,而eos【3】在实现的过程中对于轮廓点进行了特殊处理,感兴趣的可以去了解下。
四.参考

【1】https://github.com/kimoktm/Face2face
【2】https://github.com/YadiraF/face3d
【3】https://github.com/patrikhuber/eos
【4】计算机视觉中的多视图几何-中文版,安大出版社,2002.8
【5】Face Recognition from a Single Training Image under Arbitrary Unknown Lighting Using Spherical Harmonics
【6】Inverse Rendering of Faces with a 3D Morphable Model
【7】3D Morphable Face Models - Past, Present and Future
【8】Hypochondria:有关opengl各种空间变换
页: [1]
查看完整版本: 基于3DMM的人脸重建-传统优化方法(1)