机器学习实践系列之3 - 人脸对齐(上)
人脸检测 早已比较成熟,传统的基于HOG+线性分类器 的方案检测效果已经相当不错,我们也不再过多讨论,本节重点讨论人脸特征点对齐,特征点对齐主要应用在确定关键点的位置上,并进一步用于人脸姿态或状态的判断(用在辅助驾驶、疲劳检测、AR等)。
下面介绍常用的人脸对齐算法:
• ASM
ASM(Active Shape Model)是指主观形状模型,即通过形状模型 对 目标物体进行抽象。
ASM 是一种 基于点分布模型(Point Distribution Model, PDM)的算法。在PDM中,外形相似的物体,例如 人脸、人手、心脏等的几何形状可以通过若干关键特征点(landmarks)的坐标依次串联形成一个形状向量来表示。
基于ASM的人脸 通常通过 标定好的68个关键特征点 来进行描述:
ASM算法 分为 训练过程 和 搜索过程。
一. ASM的训练:
1.1 搜集 T 个训练样本,样本数量根据需要(假定 T=100)
注:样本只需要包含人脸图像即可,大小和方向不需要限定(后续可以归一化)。
1.2 手动标记n个脸部特征点(假定 n=68)
需要配合标定软件将结果坐标存到文本文档。
1.3 构建形状向量
将记录下来的坐标点,按照顺序连成向量,每一个样本 描述为一个向量:
1.4 进行归一化和对齐(采用Procrustes方法)
可以看作是通过简单的 平移、旋转、缩放,在不改变点分布模型的基础上,将样本中多个人脸归一化到一个统一的标准。
这个统一的标准即为 平均脸。
Procrusts归一化方法一般为使用一个四元数:旋转角度a, 缩放尺度s,水平位移x, 垂直位移y 。这里仅把他看作一个变化T,具体过程为:
(1)将训练集中的所有人脸模型对齐到第一个人脸模型(典型意义,可以自主选择);
(2)计算 平均人脸模型 X0;
(3)将所有样本模型对齐到平均人脸 X0,描述为: Xi = X0 + b (b为相对于平均脸的偏置);
任意的一个脸可以由平均脸和参数b来进行描述,参数b描述了平均脸到人脸的细微变化。
(4)重复(2)(3),直至X0收敛 或者到一定时间停止。
1.5 PCA降维
PCA 降维主要作用是降低非关键维度的影响,减少数据量、提高效果,这个过程并不是必须的。
1.6 为每个特征点构建局部特征
局部特征 用于在 特征点附近进行搜索(可以在特征点附近的矩形框搜索,也可以沿法线方向搜索),以迭代的方式寻找新的特征点匹配位置。
为防止光照变化,局部特征一般采用梯度特征描述(当然也可以通过颜色、纹理等,可以参考后续AAM算法)。
对于第 i(<T)个样本,上图中的第k 个点(<n,图中k=29),沿着垂直于其相邻两个点连线(图中虚线)的垂直方向,两个各选择m个点,构成一个长度为2m+1的向量,对该向量所包含的像素灰度求导,得到一个局部纹理值 gik,对其他样本中对应点执行同样的操作,就得到第k个特征点对应的局部纹理 序列:
{ gi0, gi1, gi2, …gik…, gin }
我们用 均值 和 方差 来描述第 k 个特征点对应的局部特征:
特征点 与 样本特征的比对采用 马氏距离:
二. ASM的搜索:
1.1 初始化对齐人脸
根据HOG人脸检测结果的大致人脸位置,将前面计算得到的平均脸 X0 进行仿射变换,得到一个初始的特征点模型:
X = M ( X0 ) + b
1.2 搜索特征点
a)针对每个特征点:
在特征点邻域内进行 迭代搜索,通过局部特征点的特征匹配,获取新的特征点位置;
关于特征点搜索方式,有的方法沿着边缘的法线方向提取,有的方法在特征点附近的矩形区域提取,这里先不展开讨论。
通过特征点选择算法,选择多个 候选点,候选点 采用上面同样的方法进行特征提取,然后与样本特征点模型进行匹配,匹配采用前面提到的马氏距离,距离最小的候选点即作为新的特征点中心。
b)采用 平均人脸模型 对匹配结果进行修正;
反复执行 (a)(b),直到收敛。
用初始模型在新的图像中搜索目标形状,使搜索中的特征点和相对应的特征点最为接近,持续优化 b,计算最接近模型。
目前关于ASM 主要的工具包:
1. Asmlib-opencv
基于opencv2.0,比较老了,效果一般,起步学习用。
链接地址:https://github.com/cxcxcxcx/asmlib-opencv
2. stasm
准确度还可以,开源。
链接地址:https://github.com/juan-cardelino/stasm
• AAM
AAM 称为 主动外观模型(Active Appearance Model),AAM是在ASM的基础上,进一步对纹理(将人脸图像变换到平均形状 而得到的形状无关图像)进行统计建模,并将形状和纹理两个统计模型进一步融合为 外观模型。可以理解为:
Appreance = Shape + Texture
AAM 在对形状和纹理特征统一量纲后,建模和搜索过程和ASM基本相同。
• CLM
CLM 是有约束的局部模型(Constrained Local Model),它通过初始化平均脸的位置,然后让每个平均脸上的特征点在其邻域位置上进行搜索匹配来完成人脸点检测。前面讲到的ASM也属于CLM的一种。
CLM分别继承 ASM和AAM的优点,在ASM的效率 与 AAM的效果之间做了平衡。抛弃了AAM的全局纹理方法,在ASM的基础上,通过特征点周围的局部纹理Patch,提高了ASM仅仅依靠灰度 带来的匹配问题,引用一张老掉牙的图 说明原理:
CLM的关键在于约束(Constrains),有两个层面的意思:
1)我们的眼睛、鼻子、嘴巴 相对位置是明确的,你不需要到鼻子上面找嘴巴(这肯定是怪物对不对?),这些Patch的位置称为Shape Model;
2)对于每个Patch,对应一个Local Model,你只需要在限定的位置周围(Local Region)进行查找匹配即可;
• SDM
SDM 全名是 Supervised Descent Method,中文叫监督下降方法。
SDM 方法提出的背景就是为了更好的解决非线性优化问题,那么什么是非线性优化问题呢?非线性优化问题 就是约束条件或者目标函数是非线性的。
学界通常使用二阶导数的方法进行优化,比如牛顿法。
非线性最优化问题 通常有 2个难点:
(1)函数(方程)可能不可微,或者参数无法估计;
(2)Hessian不正定,或者维度太高导致计算量过大;
SDM 与其他方法不同的地方在于:牛顿法 每次迭代的步长 Δx 是计算得到的:
Δx =-Jf/H(参见上图牛顿法公式),也就是以 雅可比矩阵 除以 Hessian矩阵作为下降方向。
而SDM 每次的步长 Δx = R * x,R是通过对样本训练得到的:
也可以认为SDM的 步长 Δx 是通过样本学习的到 Hessian矩阵的逆 与 Jacobian矩阵的乘积 Jf/H。
OK,到这里我们知道了,SDM是一种优化方法,主要是用于目标函数的优化求解。和人脸对齐本身没什么关系,But 作者用这个方法,很好的解决了关键点的回归问题,取得了 State-Of-The-Art的效果。
下面我给出 SDM 的推导过程:
机器学习实践系列之3 - 人脸对齐(上)相关推荐
- 机器学习实践系列(三)----达观杯--北京PM2.5浓度回归分析训练赛
1.大赛地址 北京PM2.5浓度回归分析训练赛 看了很长时间机器学习算法了,从这个博客开始打算长期更新一些算法的尝试,在实践中用起来. 先从最简单的线性回归开始吧. 2.赛题说明 数据主要包括2010 ...
- 机器学习实践系列之2 - GPUImage
最近直播比较火,作者也饶有兴趣的研究了一番,有句话说的好: "每个光鲜亮丽的女主播后面,都有一个技术宅男!",这里指的就是传说中的美颜相机. 随便找了两张图,作者 ...
- 机器学习实践系列之13 - OpenCV之图像去雾
图像去雾 是图像质量保证的一个重要方面,这里要讲到的是这个领域的一个里程碑式的贡献: 来自 何凯铭 的基于 暗原色先验(dark channel prior)的单一输入图像去雾方法,这是一种简单但是有 ...
- 机器学习实践系列之5 - 目标跟踪
提到 目标跟踪(Object Tracking),很多专业人士都不陌生,它是计算机视觉里面 用于视频分析的一个很大的分类,就像目标检测一样,是视频分析算法的底层支撑. 目标跟踪的算法有很多,像 Mea ...
- 机器学习实践系列之7 - 车辆检测
车辆是视频场景中最关键的对象之一,车辆 和 人 是视频检测永恒的话题. 车辆检测 是车辆分析中关键的一步,是后续进行 车型识别.车标识别.车牌识别.车辆特征 的基础. 关于检测的方法和框架有很多,不外 ...
- 机器学习实践系列(二)----达观杯--轴承故障检测训练赛
竞赛地址 轴承故障检测训练赛 任务 轴承有3种故障:外圈故障,内圈故障,滚珠故障,外加正常的工作状态.如表1所示,结合轴承的3种直径(直径1,直径2,直径3),轴承的工作状态有10类: 参赛选手需要设 ...
- 机器学习实践系列之11 - OpenCV实战车道线检测
ADAS 在经过资本的一轮热炒之后已经不新鲜了,Mobile Eye的技术积累和效果也让很多童鞋叹为观止,然后奋起直指! 初学者为代表的童鞋,二话不说,上来就是霍夫变换,还是直接用opencv里带的, ...
- 基于Spark的机器学习实践 (九) - 聚类算法
0 相关源码 1 k-平均算法(k-means clustering)概述 1.1 回顾无监督学习 ◆ 分类.回归都属于监督学习 ◆ 无监督学习是不需要用户去指定标签的 ◆ 而我们看到的分类.回归算法 ...
- 基于Spark的机器学习实践 (七) - 回归算法
0 相关源码 1 回归分析概述 1.1 回归分析介绍 ◆ 回归与分类类似,只不过回归的预测结果是连续的,而分类的预测结果是离散的 ◆ 如此,使得很多回归与分类的模型可以经过改动而通用 ◆ 因此对于回归 ...
最新文章
- 以太坊RLP编码规则
- C#编程(四十五)----------格式字符串
- Apache Httpd常用命令
- 澳大利亚 计算机 博士,澳大利亚迪肯大学招收计算机博士
- 如何查询mysql中执行效率低的sql语句
- pclint 与vs2010结合识别预处理器定义
- 压缩等级_魔兽世界:9.0会落实等级压缩吗,简单分析一下压缩等级的好处
- 帆软 动态改变填报数据库表;数据分析亦可用此方法
- SU插件情报局 | Thom Thom:3D文本编辑器
- ZCU106 VCU Linux驱动转裸机驱动篇(一)
- golang cond
- hdu1172猜数字
- references column 'xxx' which is not in SELECT list
- GitHub 各种开源项目
- php怎么把字弄到另一张图片上,怎样把一张图片p到另外一张图片上去
- iOS7 edgesForExtendedLayout
- java网络编程实现一个聊天程序
- 中医移动医疗_搜狗切入移动医疗领域 推中医识方APP
- 外行人对软件测试的常见误解
- HALCON: 内存管理(Memory Management)
热门文章
- 迪文串口屏(DMG10600C101-03WTC)的使用测试
- xp获取计算机管理员权限,xp管理员权限的获取与防范
- win10+django开发项目day03.02
- Swift学习笔记笔记(七) UIKit常用组件的使用
- js绘制菱形(空心和实心)
- 各国语言名称英文简写对照表
- 边缘计算的100个术语
- 「Python数据分析系列」10.使用数据
- 军团要塞2正版服务器,Team Fortress 2
- WeWork中国首个创新项目即将落地武汉;中联重科新材料总部将落户湘阴 | 美通企业日报...