人脸3D重建:Cascaded Regressor

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tinyzhao/article/details/53639972

《Cascaded Regressor based 3D Face Reconstruction from a Single Arbitrary View Image》论文解读


本文来自四川大学,论文原文:

https://arxiv.org/abs/1509.06161v1

人脸3D重建就是从一张或多张照片中重建出人脸的3D的模型。本文提出了回归框架下的人脸3D重建,这篇文章给我的感觉就是SDM的3D版本,而经典的3DMM和ASM很类似,不知道我的看法是否正确。本文将3D重建建模成为回归问题,这样的话很多回归的方法就可以用在这里了,更进一步,深度学习的方法也是可以用在这里的。

概述

传统的3D重建问题解决方法是模型匹配(model fitting),本文将3D重建问题建模成回归问题,训练样本为3D模型和对应的多角度2D图片,2D人脸图片需要事先标记好特征点位置。2D图片上特征点位置和3D形状相关性比较大,而且对光照比较鲁棒。跟之前的方法相比,本文的算法可以从任意角度图片重建人脸,速度快,精度高。

问题模型

2D的人脸图片可以看做是3D人脸在2D平面上的一个投影。 M=(S,T) 表示一个3D人脸,其中 S{(xi,yi,zi)|i=1,2,...,m} 代表人脸的三维坐标形状, M{ti|i=1,2,...,m} 代表纹理信息,下标m代表3D人脸点云上所有点的个数, I 代表M的2D投影, I(u,v) 代表像素 (u,v) 处的纹理值。3D人脸重建就是从2D图片 I 中计算出M的估计 M^=(S^,T^)

模型求解

重建过程

这里写图片描述

如图所示,本文提出的重建过程是:先选定一个初始的3D形状 S0 (这里用训练集的平均形状),然后根据2D图片上的特征点使用回归不断调整3D形状,最后使得3D到2D的投影上的特征点和原始图片相符。是不是和SDM的模型很像,先选定初始形状,通过回归不断调整形状,其实训练过程也和SDM类似。

前文说过,训练需要的数据是人脸图片和其中的特征点坐标以及对应的3D模型。 P=(u1,v1,...,ul,vl)T 代表2D图片上的特征点坐标,由于角度原因会有部分的点缺失,这些点被记为0。第k次迭代时的变化量记为 ΔSk1 ,第k次的迭代过程就是

Sk=Sk1+ΔSk1

如何求 ΔSk1 呢?

h(Sk1) 代表从3D形状上提取的特征点(本文假设所有3D人脸的特征点在点云上都具有相同的坐标),然后将这个三维点云上的坐标投影到2D平面

P^k1=F(h(Sk1))

这里的 F 代表从3D到2D的几何变换,包含了3D形状的rigid transform和3D向2D的投影,具体参数是由3D形状的平均值和2D特征点平均值估计而来。

2D平面上特征点和基准的差值为

ΔPk1=PP^k1

根据这个差值可以使用回归算法就可以得到 ΔSk1

ΔSk1=fk(ΔPk1)

其中 fk 代表回归算法,具体而言本文使用线性回归:

ΔSk1=RkΔPk1

分析一下这个式子: RkR3m2l ΔPk1R2l1 ΔSk1R3m1 ,从 2l 个特征点偏移向 3m 个点云上点回归,这样点云上每个点的坐标都会发生变化。

训练过程

上面讲的是模型的测试过程或者说是重建的过程,在这个过程里面需要训练的就是 Rk ,和SDM的训练一样,回归的目标是从当前形状 Sik1 到基准形状 Si 的变化量,输入的特征就是 ΔPk1 ,最小化平方和损失函数

argminRki=1N(SiSik1)RkΔPik122

至此本文的算法部分就讲完了。

结果

本文的算法和之前的方法相比,误差下降了很多,而且不同旋转角度对结果影响不大

这里写图片描述

作者还分析了特征点标记时候的噪声对结果的影响,发现在训练时候引入适当噪声结果更好

这里写图片描述

对于数据驱动的问题,结果常常会被数据影响,本文还分析了对新角度和新样本的泛化能力

这里写图片描述

总结

本文将3D重建问题建模成回归问题,感觉就像SDM的3D版本。个人感觉作者在训练时候使用的特征比较简单,似乎可以改进。这种基于回归框架使得3D重建问题有了很多新的可能性,就像人脸特征点检测一样,自从引入了回归模型以后,error大大降低。而且回归问题也可以引入深度学习,甚至可以实现端到端的重建,输入一张人脸,直接输出3D模型。

猜你喜欢

转载自blog.csdn.net/tinyzhao/article/details/53639972