Supervised Descent Method and its Applications to Face Alignment

广播说明:
进入深度学习时代,如下的方法已经失去可比性,且我们的代码实现地很粗糙,如果坚持要用,推荐如下代码
https://github.com/wanglin193/SupervisedDescentMethod (看起来作者对sdm实现的不错)

另外一篇基于深度学习的基于回归的方法,也是使用的基于SDM的相同的思路,但是全部深度学习化,
更加鲁棒。 见:《Stacked Hourglass Network for Robust Facial Landmark Localisation》


本方法是当前人脸对齐最流行的算法,速度很快,很稳定。下面我将介绍一下这篇文章的整体思路和相关细节。
在介绍之前,先给出几个有用的链接:
1.)
本论文作者主页,形象地介绍了SDM的特点:
http://xiong828.github.io/sdm.html
2. )
superviseddescent C++11版本的实现:
http://patrikhuber.github.io/superviseddescent/
下面开始介绍:
人脸对齐就是要找人脸的特征点。如图

我们要找到眼睛、鼻子、嘴巴等特征点。那么如何去做呢?方法有很多。本文讲述了使用SDM去求特征点的方法。假设我们有一个初始的特征点x0x0,希望通过迭代,逐步求出准确地特征点xx∗。这就是大致的思路。

SDM方法(Supervised Descent Method )

Derivation of SDM

给定一幅含有m个像素的图像dRm×1d∈Rm×1,d(x)Rp×1d(x)∈Rp×1用来索引图像的p个特征点,x代表p个特征点。h(d(x))R128p×1h(d(x))∈R128p×1代表SIFT特征向量。在训练阶段,我们假设准确的p个特征点已知,设为xx∗。我们另外选取训练集特征点的平均值x0x0作为初始值。如图:

这样,Face Alignment可以通过在ΔxΔx求解如下的最优化问题:

f(x0+Δx)=||h(d(x0+Δx))Φ||22f(x0+Δx)=||h(d(x0+Δx))−Φ∗||22

这里 Φ=h(d(x))Φ∗=h(d(x∗))代表手工标记的特征点的SIFT特征。在训练阶段, ΦΦ∗ ΔxΔx已知。
f(x0+Δx)f(x0)+Jf(x0)TΔx+12ΔxTH(x0)Δxf(x0+Δx)≈f(x0)+Jf(x0)TΔx+12ΔxTH(x0)Δx

对上面关于 ΔxΔx求导,令 f(x0+Δx)=0f′(x0+Δx)=0,可得
Δx1=H1Jf=2H1JTh(Φ0Φ)Δx1=−H−1Jf=−2H−1JhT(Φ0−Φ∗)

,这里 Φ0=h(d(x0))Φ0=h(d(x0)).
R=2H1JThΔΦ0=Φ0ΦR=−2H−1JhT,ΔΦ0=Φ0−Φ∗,于是R可看作 Δx1Δx1 ΔΦ0ΔΦ0的线性回归系数。但是,我们知道在测试阶段, ΦΦ∗是未知的,但是固定的。因此我们不再使用 ΦΦ∗做训练,而是改用下面的公式:
Δx1Δx1Δx1===2H1JTh(Φ0Φ)2H1JThΦ0+(2H1JTh)(Φ)RΦ0+b0Δx1=−2H−1JhT(Φ0−Φ∗)Δx1=−2H−1JhTΦ0+(−2H−1JhT)(−Φ∗)Δx1=RΦ0+b0

使用训练样本,我们的方法可以学习 R0,b0R0,b0.
通常这种方法不可能一步迭代完成,需要进行多步,除非f是二次的。为了处理这个非二次的方程,SDM将产生一系列的下降方向 {Rk}{Rk}和偏差 {bk}{bk}.

xk=xk1+Rk1Φk1+bk1(1)(1)(1)xk=xk−1+Rk−1Φk−1+bk−1(1)
,使得对于训练图片集, xkxk将收敛到 xx∗.

Learning for SDM

假定给定一系列人脸{di}{di}与对应的特征点{xi}{x∗i}.对于每张图片,从初始的特征点xi0x0i出发,R0,b0R0,b0可以通过求解最优化问题获得:

argR0minb0dip(xi0)||ΔxiR0Φi0b0||2dxi0argR0minb0∑di∫p(x0i)||Δxi−R0Φ0i−b0||2dx0i

这里 Δxi=xixi0,Φi0=h(di(xi0))Δxi=x∗i−x0i,Φ0i=h(di(x0i)).
我们假定 xi0x0i可以从服从正态分布的人脸检测框对齐采样。于是上面的最优化问题化为:
argR0minb0dixi0||ΔxiR0Φi0b0||2argR0minb0∑di∑x0i||Δxi−R0Φ0i−b0||2

以上方程是个线性的最优化问题,可以直接求解。
当第一步求解完毕后,代入方程式(1),可以求出 x1x1,进而又可以计算特征向量 Φik=h(di(xik))Φki=h(di(xki)) Δxki=xixikΔx∗ki=x∗i−xki.这样 Rk,bkRk,bk可以通过一个新的线性回归得到。
argRkminbkdixik||ΔxkiRkΦikbk||2argRkminbk∑di∑xki||Δx∗ki−RkΦki−bk||2

随着k的增大,误差逐渐减小,一般4到5次的迭代就可以达到比较好的效果。

Training for SDM

当我们计算出一系列的{Rk},{bk}{Rk},{bk},我们就可以通过迭代式(1)通过迭代求解特征点。一般初始的特征点可以选取训练时的初始特征点。
后续我们还会给出SDM方法的Matlab代码及相关说明,你就会看到比较清楚的步骤和效果了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国外计算机课程lab,计算机系统实验之bomblab

今天刚刚验收CSAPP实验3,趁着余温,记录一下这个实验,顺便回顾下CSAPP课程的相关知识。实验目的1.使用gdb工具反汇编出汇编代码,结合c语言文件找到每个关卡的入口函数。然后分析汇编代码,分析得到每一关的通关密码。2.熟…

SDM For Face Alignment 流程介绍及Matlab代码实现之预处理篇

SDM全称为 Supervised Descent Method,是一种机器学习的方法,可以被用来做Face Alignment. 下面我们将通过matlab代码来梳理整个实现的过程。 预处理阶段 Input: ../data/lfpw/trainset (811张图片) Output: mean_…

分享25个新鲜出炉的 Photoshop 高级教程

网络上众多优秀的 Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径。今天,我向大家分享25个新鲜出炉的 Photoshop 高级教程,提高你的设计技巧,制作时尚的图片效果。这些教程可以帮助把你的想法变成现实,并创造新的东西。 …

SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇

SDM 训练阶段的任务如下: 载入标准化的数据(包括400*400的正脸及特征点)对每一张标准化的图片,模拟人脸检测仪,产生10个扰动的人脸框及相应的初始特征点x0。求解Δx,Φ,其中Δxx∗−x0,x∗表示true shape,Φ表示每个特…

Hibernate5-多对1(n:1)-fetch=join

1.创建项目,项目名称hibernatedemo26,目录结构如图所示2.在项目中创建lib目录存储jar文件,目录结构如图所示3.在src目录中创建实体类Forum,包名(com.mycompany.demo.bean),如图所示4.实体类Forum的内容如下package com.mycompany.demo.bean;import java.util.Set;public class …

如何使用固定二级子域名公网访问多个本地Windows Web网站

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

实验 6 数组1

//输入n个整数&#xff0c;将它们存入数组a中。输出最大值和它所对应的下标。 #include<stdio.h> int main(void) {int n,i,x;int a[10];x0;printf("enter n:");scanf("%d",&n);for(i0;i<n;i){printf("enter :");scanf("%d&qu…

初中计算机职称答辩,晋升中学语文高级教师职称答辩内容举例

晋升中学语文高级教师职称答辩内容举例 晋升中学语文高级教师职称答辩秘籍 最重要的一点&#xff1a;你要对课本上的重点篇目非常熟悉&#xff01;对于现代文来说作者、题材、课文重点、重点句子词语、中心思想等你都要明了。对于文言文来说&#xff0c;要求学生掌握的&#xf…

SDM For Face Alignment流程介绍及Matlab代码实现之测试篇

测试很简单了&#xff0c;只需要载入数据&#xff0c;然后做正则化处理&#xff0c;使用训练模型产生的{Rk},就可以预测特征点了。 face_alignment.m:用来预测特征点 function shape face_alignment( ShapeModel, DataVariation,...LearnedCascadedModel, Data, img, shape,…

计算机类公务员如何提升自己,大学毕业才发现:所学专业对考公务员如此重要,4类专业上岸率高...

导语&#xff1a;毕业季来临&#xff0c;同学们是想直接找工作积累工作经验&#xff0c;还是继续考取相关证书&#xff0c;来获得更稳定职业的入场券&#xff1f;毕业抉择很多毕业生面临的第一个问题就是未来职业规划&#xff0c;因为大学毕业之后&#xff0c;就意味着一段新的…

UVA 11401 - Triangle Counting

Problem G Triangle Counting Input: Standard Input Output: Standard Output You are given n rods of length 1, 2…, n. You have to pick any 3 of them & build a triangle. How many distinct triangles can you make? Note that, two triangles will be considere…

苏州软件测试11k工资要什么水平,3个月从机械转行软件测试,他的入职薪资是11K...

原标题&#xff1a;3个月从机械转行软件测试&#xff0c;他的入职薪资是11K只要找到适合自己的学习方式&#xff0c;成功转行只是早晚的问题&#xff01;今天汇智妹给大家介绍的这位小伙伴&#xff0c;是咱们汇学联盟平台上的一位线上学员——小周。97年的小哥哥&#xff0c;19…

TCP/IP 原理--链路层

链路层作用&#xff1a; &#xff08;1&#xff09;为IP模块发送和接收IP数据报&#xff1b; &#xff08;2&#xff09;为ARP发送ARP请求和接受ARP应答 &#xff08;3&#xff09;为RARP发送RARP请求和接受ARP应答 协议&#xff1a;以太网和SLIP协议 A.以太网协议数据封装格式…

拆解凹多边形

偶遇需要拆解凹多边形 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media;namespace DrawPolygon {public static class Settings{public const float…

一个FORK的面试题

为什么80%的码农都做不了架构师&#xff1f;>>> #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for(i0; i<2; i){ fork(); printf("-"); } wait(NULL); wait(NULL); return 0; }/c 如果…

C++11系列学习之二-----lambda表达式

C11添加了一项名为lambda表达式的新功能&#xff0c;通过这项功能可以编写内嵌的匿名函数&#xff0c;而不必编写独立函数和函数对象&#xff0c;使得代码更容易理解。lambda表达式的语法如下所示&#xff1a;[capture_block](parameters) exceptions_specification -> retu…

GCPC2014 C Bounty Hunter

题意&#xff1a;给你一个平面上的点集&#xff08;x值各不相等&#xff09;&#xff0c;问你从最左边走到最右边&#xff08;只能以x递增的顺序&#xff09;&#xff0c;再从最右边回到最左边&#xff08;以x递减的顺序&#xff09;问你最短距离是多少。 解题思路&#xff1a;…

计算机启动时运行ccleaner,Ccleaner的使用方法

ccleaner是一款非常好用的系统优化工具&#xff0c;它可以提升电脑速度&#xff0c;可以对上网历史记录、临时文件夹、回收站垃圾清理、注册表进行垃圾项扫描和清理、软件卸载等功能&#xff0c;保护用户的个人浏览隐私&#xff0c;为Windows系统腾出更多硬盘空间。下面小编就为…

PLSQL Developer软件使用大全

PLSQL Developer软件使用大全 第一章 PLSQL Developer特性 PL/SQL Developer是一个集成开发环境&#xff0c;专门面向Oracle数据库存储程序单元的开发。如今&#xff0c;有越来越多的商业逻辑和应用逻辑转向了Oracle Server&#xff0c;因此&#xff0c;PL/SQL编程也成了整个开…

电脑显示器变色_电脑维修(看完后就可以开一家自己的电脑维修店!)

第二部分 常见故障判断本部分将计算机从开机一直到关机期间的故障进行分类。每一类的判断、定位过程都是第一部分中维修判断一节的有机组成部分&#xff0c;即不论使用什么方法或不论去判断什么内容&#xff0c;这两部分总是相互结合使用的。以下各故障类型中所列的故障现象只是…