基于SDM的人脸特征点检测

本文来自: http://www.haopeng233.top/2018/06/13/SDM/

欢迎大家访问:)

视频监控课程上选做的大作业,基于SDM的人脸特征点检测。人脸特征点检测是人脸检测后的再处理,为人脸识别提供基础。

参考博客:https://blog.csdn.net/xiamentingtao/article/details/47306887

论文作者主页:http://xiong828.github.io/sdm.html

代码地址:https://github.com/xiamenwcy/impSDM/tree/dev1

算法原理

具体原理以及公式推导在论文以及博客中说的很详细了,我就不再重复了,主要讲一下我对SDM的理解。

机器学习中一般解决优化问题是为了得到分类器或回归器的最优参数,然后使用训练好的分类器或回归器完成对新样本分类或回归的任务。比如神经网络就是一个非线性函数,网络节点的连接权值就是模型的参数,通过最小化$Loss$可以得到最佳权值,测试样本来时正向传播就可以对其分类或者回归。

机器学习的目的是通过对训练样本的学习,使得模型在测试样本上能取得较好的效果,也就是泛化误差小。以神经网络做分类任务为例,说明SDM方法与它的不同。它们都是追求泛化误差最小,但神经网络属于有参模型,它从训练样本中学到了模型的最优参数,测试样本只要正向传播就可以满足泛化误差最小这个最优化问题,有参模型的假设是训练误差最小测试误差就最小,因此测试时可以不更新。SDM属于无参方法,它直接优化$X$(人脸特征点)位置,每个测试样本到来时它都在解决一个新的优化问题,它从训练样本中学习到了解优化问题的过程。它的回归模型嵌套在最优化问题的子问题下。

以人脸特征点检测为例,SDM学会自变量在不同情况下该如何移动以保证优化问题的Loss降低,它学习一个映射$R$,$R$可以将点描述子的特征向量$Φ$映射到$Δx$。假设第10点是眼角,通过训练可以得到$R$,$R$矩阵中对应第10点的那一列可以根据第10点的描述子(可以是SIFT、HOG等),映射得到$Δx$,如果10点在脸上,此时描述子为$ Φ1 $,$ R×Φ1 $会得到Δx向眼睛方向移动,反之,如果10点在眼球上,此时描述子为$Φ2$,$R×Φ2$会得到Δx向远离眼睛方向移动。

SDM学习特定问题的优化过程,通过训练样本学得descent direction。测试样本到来时,仍是在解决优化问题,不过使用学习到的descent direction来解决新的优化问题,用级联回归模型完成优化任务。

那SDM是如何学习优化过程得到$R$的?优化过程本来是用Jacobi或hessian(论文中把这里记为$R$)和残差求$Δx$,但人脸特征点检测中训练样本的$Δx$已知,残差也已知,那么就可以反过来学习Jacobi或hessian(也就是$R$)。$Δx$就是监督信息。从机器学习来看,三大要素,数据、模型、策略。数据为$(Φ,Δx)$(特征向量,偏移量);模型为线性模型$Δx=R×Φ$,策略是最小二乘。解决完该问题后得到$R_0$,将数据代入得到新的数据,然后可得到一系列的$R_k$。用级联回归的想法完成。

实验结果及分析

一共做了四组对比实验,用线性模型 还是原始的优化模型 ; $ R_0 $ ,$R_1$都是描述子到位移映射,那重复使用$R_0$效果如何,因为我们认为不同R之间只是序列上的区别,本质上没有区别。 具体设计如下


CED曲线如下,比较四个实验的CED,从可以看出实验1的效果最好,其次是实验3,实验2和实验4效果不好,可能是尺度上的原因,第一步映射比较大,可以尝试使用衰减系数。实验2效果差于实验1原因可能是$Φ^*$估计的不准确,导致实际测试中误差较大。 


在测试集上的效果图

自制DEMO

将最好的模型使用到DEMO里的结果图。使用OpenCV自带的harr人脸检测器,然后在此基础上执行特征点回归,与手工标记的效果进行对比,结果如下图所示 ,左侧是人脸检测器的结果,右侧是我用Ps手工找到五个定位点,得到真实的bbox的结果。

可以看出人脸特征点检测很依赖于人脸检测结果,用haar特征做人脸检测后,由于检测框与训练的框不一致,特征点的回归效果并不好。因为初值(起始位置)选取的不好。可以尝试手工标记一下,进行对比。发现对于同一个特征点回归器,人脸检测做得更准确,特征点检测的效果更好。

训练的时候就使用人脸检测器切图,然后在此基础上特征点回归器效果应该会好。原因一是初始shape会更好,更容易回归;二是学到的$R$更适合face detector。

对检测结果的bbox在横向和纵向进行不同程度的缩放,效果有所提升。如果检测器得到的box能够完全拟合手工标记点的box,那就可以得到良好的特征点检测结果。代码中用特征点扩充来模拟检测框,这样可以保证初始点始终在检测框的中心。

展望与收获

  • 用检测器切图并训练特征点检测模型,这样需要处理数据

  • $Φ^*$是用样本均值估计的,不准确,可以将数据写成齐次坐标的形式并直接训练出来

  • 起初想着用坐标映射到偏移,但这明显没利用到图片信息。不可能实现。从人类角度思考,一定是依据图像特征再平移。所以要学习特征到偏移量的映射才合理

  • 优化问题中构造了子问题,子问题才是要学习模型。原优化问题只是辅助分析。构造性的建立学习模型的思想


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值