显示形状回归算法(ESR)代码介绍
源地址:http://www.thinkface.cn/thread-3704-1-6.html
人脸对齐包括两个部分,分别为训练部分和测试部分。所有的代码基于opencv2.0.
(一)训练阶段
Step1:样本的准备:
本文采用了IMM人脸数据库作为训练集,样本大小为640x480大小的彩色人脸图片,并手工对每个样本进行手工特征点标注。
Step2:样本预处理:(包括光照、尺度归一化等)
先进行尺度归一化操作,步骤如下:
1)从训练样本中选取一个比较正的人脸最为参考人脸。
2)将所有的训练样本对齐参考人脸,采用opencv中的 函数进行仿射变换(包括人脸图片和人脸形状的变换),最终扣取人脸区域并保存为100x100的灰度人脸图像。
然后进行光照处理:
对训练样本进行直方图均衡化操作,减少光照对人脸图片的影响。
计算平均人脸形状:
对所有训练样本的人类形状进行累加,计算平均人脸形状。
Step3:进行二级形状回归训练
ESR算法封装在CESRMethod类中,提供了训练接口void ESRMethod::train(****),如下。
void ESRMethod::train(****){
1> 一些基础的变量赋值与处理。
2> 赋值多个初始人脸形状。(用于正确算法的稳定性。例如现在有10个样本,对每个样本赋值10个初始人脸形状,则变成了100个样本)。 对每个训练样本赋值50个初始人脸形状。初始形状是通过平均人脸进行旋转、收缩、平移的方式的到的。
3> 进行一级形状回归,一级形状回归包含在FernCasade类中train函数中。
}
void FernCascade::train(****){
1>特征索引的建立
在人脸区域随机参数P个点,以平均人脸作为参考,将全局坐标转换成局部坐标,形成特征索引。
2>根据训练样本当前形状还原人脸形状的真实坐标(即68个特征点的坐标),通过remap函数获取68个特征点的像素值。
3>进行二级形状回归,封装在Fern类的train函数中。
4>更新每个训练样本的人脸形状。
}
void Fern::train(****){
1> 采用随机特征选择方法,从P个坐标点中选择出F对坐标点。根据选出的F对特征点,计算所有训练样本的F对特征点的像素差值,并将其作为一个特征。
2> 然后计算平均特征。
3> 根据平均特征,对样本进行归类,总共分为2^F类,计算没类中所有样本的平均人脸调整量,
4> 循环1>-3> N次,选择收敛最快的那一次保存其人脸调整量。
}
通过二级形状回归后,得到T个弱回归量 ,并将其保存在文件中。
(二)测试阶段
Step1:加载模型文件。
Step2:图片预处理阶段
打开目标人脸图像,将其转换成灰度图片。采用opencv自带的人脸检测函数找出图片中的人脸区域,并将其扣取出来,然后进行直方图均衡化操作,减少光照的影响。同时,将平均人脸形状作为目标图片的初始人脸形状。
Step3:人脸对齐阶段
采用如下三个函数进行人脸对齐
ESRMethod::test(const cv::Mat1b &image,const cv::Mat1f &shape,int t);
FernCascade::test(const cv::Mat1b &image,const cv::Mat1f &shape);
包括如下功能:
根据当前的人脸形状和形状特征索引,获取人脸特征。
更新人脸形状。
Fern::test(const cv::Mat1b &image,const cv::Mat1f &shape,const cv::Mat1f &xyloc,cv::Mat1f &dshape);
包括如下功能:
根据当前的特征,将其进行归类,并提前类中的形状调整量。
进行多次迭代后,输出对齐的人脸形状。
显示形状回归算法(ESR)代码介绍的更多相关文章
- 机器学习之logistic回归算法与代码实现原理
Logistic回归算法原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10033567.html ...
- 第2-2-4章 常见组件与中台化-常用组件服务介绍-分布式ID-附Snowflake雪花算法的代码实现
目录 2.3 分布式ID 2.3.1 功能概述 2.3.2 应用场景 2.3.3 使用说明 2.3.4 项目截图 2.3.5 Snowflake雪花算法的代码实现 2.3 分布式ID 2.3.1 功能 ...
- SparkMLlib回归算法之决策树
SparkMLlib回归算法之决策树 (一),决策树概念 1,决策树算法(ID3,C4.5 ,CART)之间的比较: 1,ID3算法在选择根节点和各内部节点中的分支属性时,采用信息增益作为评价标准.信 ...
- 机器学习之Logistic 回归算法
1 Logistic 回归算法的原理 1.1 需要的数学基础 我在看机器学习实战时对其中的代码非常费解,说好的利用偏导数求最值怎么代码中没有体现啊,就一个简单的式子:θ= θ - α Σ [( hθ( ...
- Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS
Spark MLlib回归算法------线性回归.逻辑回归.SVM和ALS 1.线性回归: (1)模型的建立: 回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多 ...
- 【笔记】衡量线性回归法的指标 MSE,RMS,MAE以及评价回归算法 R Square
衡量线性回归法的指标 MSE,RMS,MAE以及评价回归算法 R Square 衡量线性回归法的指标 对于分类问题来说,我们将原始数据分成了训练数据集和测试数据集两部分,我们使用训练数据集得到模型以后 ...
- Lasso回归算法: 坐标轴下降法与最小角回归法小结
前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...
- 基于Python的函数回归算法验证
看机器学习看到了回归函数,看了一半看不下去了,看到能用方差进行函数回归,又手痒痒了,自己推公式写代码验证: 常见的最小二乘法是一阶函数回归回归方法就是寻找方差的最小值y = kx + bxi, yiy ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
随机推荐
- 工作随记 warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
错误信息:F:\BUILD\IDS7020\trunk\manage_src\dev\java_src\tds7030-web\Ant\build.xml:344: warning: 'include ...
- 纯CSS3实现常见多种相册效果
本文包含 1.CSS3中2D转换和3D转换的介绍. 2.在相册中的应用实例. CSS3中的转换效果和动画效果十分强大好用,可以实现一些常见的动态效果. 如此一来,CSS3便可以代替许多jQuery的功 ...
- NSStringDrawingOptions
如果options参数为NSStringDrawingUsesLineFragmentOrigin,那么整个文本将以每行组成的矩形为单位计算整个文本的尺寸.(在这里有点奇怪,因为字体高度大概是13.8 ...
- VirtualBox开发环境的搭建详解
有关VirtualBox的介绍请参考:VirtualBox_百度百科 由于VirtualBox官网提供的搭建方法不够详细,而且本人在它指导下,从下载所需的开发包,到最后生成二进制文件,中间遇到了许多的 ...
- 在Delphi开发的服务中调用指定应用程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fxh7622.blog.51cto.com/63841/529033 在很多时候 ...
- 线程知识-ThreadLocal使用详解
最近在看Spring的时候回顾了一下ThreadLocal,下面是ThreadLocal的使用说明. 概述 首先,谈到ThreadLocal的使用,我们先来了解一下ThreadLocal是什么?Thr ...
- Goodle Clean设计架构
Goodle Clean设计架构 23 * @param <P> the response type 24 */ 25 public abstract class UseCase<Q ...
- 基于visual Studio2013解决面试题之1409基数排序
题目
- Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换
public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ publ ...
- EEPlat PaaS VS Saleforce force.com
综述 EEPlatPaaS和Saleforce的Force.com都是元数据驱动应用的解决方式.整体而言,Force.com提供了更上层的解决方式,屏蔽了SQL语句.数据库:EEPlat更加底层,有更 ...