最近组里研究了SDM算法在人脸对齐中的应用,是CMU的论文《Supervised Descent Method and its Applications to Face Alignment》。因为思路简洁巧妙有效,两年下来引用率就有283+了,以后估计1k+,这么有影响力的文章是要学习学习。网上有了相关的原理介绍,例如:http://www.thinkface.cn/thread-2913-1-1.html。自己看了有所了解,但不能真正理解原理思路,还是直接看论文为妥。

、问题

)、Hessian矩阵最优在局部最优的时候才是正定的,其他地方可能就不是正定的了,这就意味着求解出来的梯度方向未必是下降的方向;2)、牛顿法要求目标函数是二次可微的,但实际中未必就一定能达到要求的了;3)、Hessian矩阵会特别的大,比如人脸对其中有66个特征点,每个特征点有128维度,那么展成的向量就能达到66x128= 8448,从而Hessian矩阵就能达到8448x8448,如此大维度的逆矩阵求解,是计算量特别大的(O(p^3)次的操作和O(p^2)的存储空间)。因此避免掉Hessian矩阵的计算,Hessian不正定问题,大存储空间和计算量,寻找这样一种方法是这篇论文要解决的问题。

、原理

大家都知道,梯度下降法的关键是找到梯度方向和步长,对于计算机视觉问题,牛顿法求解未必能常常达到好的下降方向和步长,如下图所示:

(a)为牛顿法的下降量,收敛不能达到最理想的步长和方向。而(b)本文的SDM算法,对于不同的正面侧面等情况都能得到很好的收敛方向和步长。既然Hessian矩阵的计算那么可恶,我们就直接计算梯度下降方向和步长嘛。

个标记点,如下图黑人肖像所示。表示一个非线性特征提取函数,例如 SIFT,那么

个标记点,把这些点看做了是GroundTrue即参考点,如下图(a)所示。在测试的场景中,会用一个检测器把人脸检测出来,然后给一个初始化的平均标记点,如下图(b)所示:

那么人脸对齐问题是需要寻找一个梯度方向步长,使得下面的目标函数误差最小:

个标记点的SIFT特征向量,在训练阶段都是知道的。

好了,用牛顿法求解上述问题,其迭代的公式为:

其中,H和J分别表示Hessian矩阵和雅克比矩阵。它可以被进一步的拆分为下面的迭代公式:

注意到,既然H和J难求,那就直接求它们的乘积,即可,于是上述的迭代公式又可以变为:

其中,这样就转化为了之求解的问题。接下来就是怎么求解这两个参数的问题了。

思路很简单,就是用训练数据告诉算法下一步该往哪里走,即用当前(及之前)的迭代误差之和最小化,该问题也是一个最优化问题。如下公式所示:

d_i表示第i张训练图片,xki表示第i张图片在第k次迭代后的标记点的位置。实际中这样的迭代4-5次即可得到最优解,用贪心法求解。

至此,根据以上描述的迭代步骤,即可不断地寻找到最优的人脸对齐拟合位置。SDM的流程图如下所示:

、实验结果

a、真实结果和拟合结果比较图:

SDM接近于真实的标记结果,拟合结果很好。(红色的为Ground True,绿色的为SDM拟合结果)

b、SDM 和 Netown的迭代收敛比较图:

牛顿迭代法出现迭代失败的情况,而SDM均可以迭代至收敛。

c、LFPW数据集合的效果比较图:

对灰度,戴眼镜,侧脸和遮挡都有很好的拟合效果。

d、指定跟踪算法和SDM比较图:

指定跟踪器会出现过拟合的现象,而SDM表现则相当的稳定

、参考资料

[1].http://www.thinkface.cn/thread-2913-1-1.html

[2].Supervised Descent Method and its Applications to Face Alignment.pdf

[3].SDM的项目的官方网址

、源码

下载网址:SDM(C++),SDM(Matlab)

人脸对齐SDM原理----Supervised Descent Method and its Applications to Face Alignment的更多相关文章

  1. SDM(Supervised Descent Method and its Applications to Face Alignment )

    sdm SDM 人脸对齐的核心内容很简单,就是特征到偏移量的映射:                                           Ix = R I 是特征,x是映射矩阵,R是偏移 ...

  2. paper 142:SDM算法--Supervised Descent Method

    对于face recognition的研究,我是认真的(认真expression,哈哈哈~~~~~~)许久没有写blog了,欢迎一起讨论. SDM(Supvised Descent Method)方法 ...

  3. 基于Landmark的人脸对齐以及裁剪方法

    利用Landmarks进行人脸对齐裁剪是人脸检测中重要的一个步骤.效果如下图所示: 基本思路为: a.人脸检测 人脸的检测不必多说了,基本Cascade的方式已经很不错了,或者用基于HOG/FHOG的 ...

  4. 机器学习--详解人脸对齐算法SDM-LBF

    引自:http://blog.csdn.net/taily_duan/article/details/54584040 人脸对齐之SDM(Supervised Descent Method) 人脸对齐 ...

  5. 机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM

    引自:http://blog.csdn.net/linolzhang/article/details/55271815 人脸检测 早已比较成熟,传统的基于HOG+线性分类器 的方案检测效果已经相当不错 ...

  6. MTCNN算法与代码理解—人脸检测和人脸对齐联合学习

    目录 写在前面 算法Pipeline详解 如何训练 损失函数 训练数据准备 多任务学习与在线困难样本挖掘 预测过程 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 主 ...

  7. MTCNN(Multi-task convolutional neural networks)人脸对齐

    MTCNN(Multi-task convolutional neural networks)人脸对齐 .

  8. OpenCV人脸识别的原理 .

    OpenCV人脸识别的原理 . 在之前讲到的人脸测试后,提取出人脸来,并且保存下来,以供训练或识别是用,提取人脸的代码如下: void GetImageRect(IplImage* orgImage, ...

  9. 坐标下降法(coordinate descent method)求解LASSO的推导

    坐标下降法(coordinate descent method)求解LASSO推导 LASSO在尖点是singular的,因此传统的梯度下降法.牛顿法等无法使用.常用的求解算法有最小角回归法.coor ...

随机推荐

  1. SQLite3 安装、基本操作

    1. 安装SQLite3 sudo apt-get install sqlite3 2. 安装Sqlite3编译需要的工具包 如果,你需要的话可以安装该工具包.只是为了体验一把,可以不安装.该项是可选 ...

  2. (转)什么是CDC类(Communication Device Class)

    全文地址:http://justmei.blog.163.com/blog/static/1160998532010321112522467/ 什么是CDC类 (Communication Devic ...

  3. ProxySQL 监控和统计

    ProxySQL 监控和统计 很多有价值的统计数据在stats和monitor库中. admin@127.0.0.1 [(none)]>SHOW TABLES FROM stats; +---- ...

  4. rust 入门

    hello rust fn main() { println!("Hello, world!"); } 从hello world入手,rust的语法是比较简洁. 在mac os中, ...

  5. URAL题解一

    URAL题解一 URAL 1002 题目描述:一种记住手机号的方法就是将字母与数字对应,如图.这样就可以只记住一些单词,而不用记住数字.给出一个数字串和n个单词,用最少的单词数来代替数字串,输出对应的 ...

  6. linux脚本学习之路-在suse10环境中生存指定大小指定文件名的压缩文件

    #!/bin/bash#-------------------------------------------------------------------------------# Name:   ...

  7. Appium+python 一个简单的登录测试实例

    # coding=utf-8 from appium import webdriver import time import unittest import os import HTMLTestRun ...

  8. CVE-2012-1876漏洞分析

    0.POC文件 <html> <body> <table style="table-layout:fixed" > <col id=&qu ...

  9. Spring学习-理解IOC和依赖注入

    最近刚买了一本介绍ssm框架的书,里面主要对Mybatis.spring.springmvc和redis做了很多的讲解,个人觉得虽然有的内容我看不懂,但是整体上还是不错的.最近正在学习中,一边学习一边 ...

  10. jmeter-----查看结果树

    在编写接口测试脚本的时候,需要进行调试和查看结果是否正常的情况,这个时候可以使用查看结果树组件进行. 查看结果树中展示了每一个取样器的结果.请求信息和响应信息,可以查看这些内容去分析脚本是否存在问题. ...