最新版本整理完毕,见:

http://face2ai.com/MachineLearning-Haar-like-Adaboost-cascade

0:写在前面的话           写在前面的牢骚话,作为一个非主流工程师,我专业与目前工作都与这些知识相隔十万八千里,所以,我所学习和实现的完全是因为兴趣,目前还研究学习的很浅,谈不上高深,所以还是要继续努力学习。希望和大家多交流,也欢迎伪大牛,假专家板砖伺候,也希望真大牛多指点(真大牛不会啰嗦一堆来显得他知道的多,哈哈),总之,本人还在菜鸟阶段,欢迎指教。0.0本文如有错误请及时留言指出,博主会在第一时间修改,确保不会对其他读者产生副作用。
1:人脸检测与识别

  • 人脸图像采集及检测

人脸图像采集:不同的人脸图像都能通过摄像镜头采集下来,比如静态图像、动态图像、不同的位置、不同表情等方面都可以得到很好的采集。当用户在采集设备的拍摄范围内时,采集设备会自动搜索并拍摄用户的人脸图像。

       人脸检测:
       人脸检测:人脸检测在实际中主要用于人脸识别的预处理,即在图像中准确标定出人脸的位置和大小。人脸图像中包含的模式特征十分丰富,如直方图特征、颜色特征、模板特征、结构特征及Haar特征等。人脸检测就是把这其中有用的信息挑出来,并利用这些特征实现人脸检测。

       主流的人脸检测方法基于以上特征采用Adaboost学习算法,Adaboost算法是一种用来分类的方法,它把一些比较弱的分类方法合在一起,组合出新的很强的分类方法。

       人脸检测过程中使用Adaboost算法挑选出一些最能代表人脸的矩形特征(弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器,再将训练得到的若干强分类器串联组成一个级联结构的层叠分类器,有效地提高分类器的检测速度。
       主流的人脸检测方法基于以上特征采用Adaboost学习算法,Adaboost算法是一种用来分类的方法,它把一些比较弱的分类方法合在一起,组合出新的很强的分类方法。
       人脸检测过程中使用Adaboost算法挑选出一些最能代表人脸的矩形特征(弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器,再将训练得到的若干强分类器串联组成一个级联结构的层叠分类器,有效地提高分类器的检测速度。

  • 人脸图像预处理

人脸图像预处理:对于人脸的图像预处理是基于人脸检测结果,对图像进行处理并最终服务于特征提取的过程。系统获取的原始图像由于受到各种条件的限制和随机干扰,往往不能直接使用,必须在图像处理的早期阶段对它进行灰度校正、噪声过滤等图像预处理。对于人脸图像而言,其预处理过程主要包括人脸图像的光线补偿、灰度变换、直方图均衡化、归一化、几何校正、滤波以及锐化等。

  • 人脸图像特征提取

人脸图像特征提取:人脸识别系统可使用的特征通常分为视觉特征、像素统计特征、人脸图像变换系数特征、人脸图像代数特征等。人脸特征提取就是针对人脸的某些特征进行的。人脸特征提取,也称人脸表征,它是对人脸进行特征建模的过程。人脸特征提取的方法归纳起来分为两大类:一种是基于知识的表征方法;另外一种是基于代数特征或统计学习的表征方法。
       基于知识的表征方法主要是根据人脸器官的形状描述以及他们之间的距离特性来获得有助于人脸分类的特征数据,其特征分量通常包括特征点间的欧氏距离、曲率和角度等。人脸由眼睛、鼻子、嘴、下巴等局部构成,对这些局部和它们之间结构关系的几何描述,可作为识别人脸的重要特征,这些特征被称为几何特征。基于知识的人脸表征主要包括基于几何特征的方法和模板匹配法。

  • 人脸图像匹配与识别

人脸图像匹配与识别:提取的人脸图像的特征数据与数据库中存储的特征模板进行搜索匹配,通过设定一个阈值,当相似度超过这一阈值,则把匹配得到的结果输出。人脸识别就是将待识别的人脸特征与已得到的人脸特征模板进行比较,根据相似程度对人脸的身份信息进行判断。这一过程又分为两类:一类是确认,是一对一进行图像比较的过程,另一类是辨认,是一对多进行图像匹配对比的过程。
 2:检测与识别算法

  1. 基于人脸特征点的识别算法(Feature-based recognition algorithms)。
  1. 基于整幅人脸图像的识别算法(Appearance-based recognition algorithms)。
  1. 基于模板的识别算法(Template-based recognition algorithms)。
  1. 利用神经网络进行识别的算法(Recognition algorithms using neural network)。

       人脸识别理论分类:

  1. 基于光照估计模型理论:提出了基于Gamma灰度矫正的光照预处理方法,并且在光照估计模型的基础上,进行相应的光照补偿和光照平衡策略;
  1. 优化的形变统计校正理论:基于统计形变的校正理论,优化人脸姿态;
  1. 强化迭代理论:强化迭代理论是对DLFA人脸检测算法的有效扩展;
  1. 独创的实时特征识别理论:该理论侧重于人脸实时数据的中间值处理,从而可以在识别速率和识别效能之间,达到最佳的匹配效果;

详细可参考网址:http://www.face-rec.org/algorithms/所列出的常见算法。

3:机器学习

       机器学习在人脸识别中使用广泛,其理论和应用都及其有价值,Adaboost就属于一种机器学习算法,直白的理解机器学习就是通过用已知样本来不断的优化算法中的可变系数,最后来建立一种机制,该机制能够达到我们想要分类或者识别的目的。当然这不是官方定义,而是我的理解,但机器学习算法的理论基础多半是优化,寻求最优解,具体知识可以参考其他资料,这里不再赘述。
4:Haar-like特征点

       Haar-like特征点,是一种简单的特征描述,其理论相当容易理解,就是按照下图的模式来计算白色窗口的像素总和和黑色窗口像素总和的差(C中的计算为白色窗口的像素总和减去黑色窗口的像素总和的2倍),这是常用的几种计算方式。


4.1


4.2
5:Adaboost

       首先我们来介绍强分类器和弱分类器:这类似于两个鉴宝工程师,一个经验丰富,准确率高我们称为老手,一个刚刚毕业准确率低,我们称为新手,但他们和我们这群普通人的区别在于,如果有100万件古董和赝品,老手的正确鉴别率能达到90万件,而新手的鉴别率为70万件,而我们接近以随机方式给出答案,顾准确率在50万件左右。这里的老手对应强分类器,新手对应弱分类器,而我们对应瞎猜分类器(这句掐了别播)。

       Adaboost以同样原理工作,其对与已知分类的数据样本给出不同的阈值,各个阈值就是弱分类器,其准确率必须大于50%,其中样本对应的权重不同,其准确率为样本加权后的准确率,例如一百个数据,第一个数据占所有数据权重的百分之60,顾只要这个数据分类正确,其准确率肯定达标,相反肯定不达标。

       首先来看阈值选择:


       这个式子中,pj为正负1,其作用就是表示是大于号还是小于号,而西塔为我们给出的阈值,假设为新手A,例如,对于古董的一个特征f值(例如材料密度),我们可以给出其大于阈值是为古董或者小于阈值为古董。当然这个分类并不准确,因为有的赝品也可以用类似真品的材料仿造。这样新手A使用密度测定法给出了一个大于60%的识别率,同时按照A的识别率给A一个发言权重Alpha(0<Alpha<1),为了帮助新手,这100万件古董的主人(对真伪完全确定的人)决定,把新手A分错的真品和赝品调整权重(即调整密度,这都非人力所及的事啊,博主太能扯。。),然新手B来分类,依然以密度分类,然给B一个发言权重,依次迭代新手C,D,E,F,并得到各自的发言权重Alpha。最后当所有新手都有权重时,我们来最后进行表决,拿来另外一件古董(测试样本),让这些新手投票,这件宝贝是还是不是真品,每个人投票后加权(Alpha),如果加权以后超过半数,则这件判断为真品,否则为赝品。这就是完整的Adaboost过程。

       先看下实际中的数据运算过程:

step0:原始数据,解释下最左边一列,编号为数据编号,数值为特征值(上例所说的密度),标签为分类(两类,1,0,上例中的正品和赝品),权重(每个样本的“重要性”,或者说对整体的影响,初始化:正样本为1/2m,m为正样本数,负样本为1/2n,n为负样本数)。


step1:寻找一个阈值theta=4,使大于(或小于,这里为小于)其的为正样本,另一侧为负样本,这里有阴影的为正样本划分区,另外为负样本区,负样本区中的正样本为分类错误的样本(9,10)这时,我们增加其权重(其实是减小正样本的权重,但归一化后就与增加负样本的效果一致了),并计算这个阈值的误差error=0.142857。

这样我们就得到了第一个弱分类器,其theta=4,方向是小于阈值为正,话语权为alpha=1.791759。大家会有疑问,4这个阈值哪来的,我是通过穷举所有的阈值,得出error最小的阈值,也有其他算法,可以参考原文【】。


step2:第二部重复上一步,得到error,theta,alpha,更新权重

step3:继续重复


step4:

.

.

.

.

stepn:完成循环要求的次数,或其他推出条件成立时,推出,保存所有theta,alpha和error

       下面给出原文中的算法步骤:


       上述算法中,表示误差的error求出权重使用了e /(1-e),这里我们可以知道,如果e大于0.5那么整个算法就会出现问题,因为不是按照思想继续放大错分样本的权重而是减小其权重,所以这里应该有一定的说法。

具体实现代码:

最新版本整理完毕,见:http://tony4ai.com/MachineLearning-Haar-like-Adaboost-cascade

人脸检测之Haar-like,Adaboost,级联(cascade)的更多相关文章

  1. 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联

    浅析人脸检测之Haar分类器方法 一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸 ...

  2. 2、转载一篇,浅析人脸检测之Haar分类器方法

    转载地址http://www.cnblogs.com/ello/archive/2012/04/28/2475419.html 浅析人脸检测之Haar分类器方法  [补充] 这是我时隔差不多两年后, ...

  3. 第九节、人脸检测之Haar分类器

    人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来. 目前人脸检测的方法主 ...

  4. 浅谈人脸检测之Haar分类器方法

    我们要探讨的Haar分类器实际上是Boosting算法(提升算法)的一个应用,Haar分类器用到了Boosting算法中的AdaBoost算法,只是把AdaBoost算法训练出的强分类器进行了级联,并 ...

  5. 浅析人脸检测之Haar分类器方法

    一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发 ...

  6. Adaboost的几个人脸检测网站

    [1]基础学习笔记之opencv(1):opencv中facedetect例子浅析 http://www.cnblogs.com/tornadomeet/archive/2012/03/22/2411 ...

  7. OpenCV例程实现人脸检测

    前段时间看的OpenCV,其实有很多的例子程序,参考代码值得我们学习,对图像特征提取三大法宝:HOG特征,LBP特征,Haar特征有一定了解后. 对本文中的例子程序刚开始没有调通,今晚上调通了,试了试 ...

  8. win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)

    在计算机视觉和机器学习方向有一个特别好用但是比较低调的库,也就是dlib,与opencv相比其包含了很多最新的算法,尤其是深度学习方面的,因此很有必要学习一下.恰好最近换了一台笔记本,内含一块GTX1 ...

  9. 第三十七节、人脸检测MTCNN和人脸识别Facenet(附源码)

    在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haar分类器),其检测效果也是不错的,但是目前人脸检测的应用场景逐渐 ...

随机推荐

  1. DateTime.TryParse 日期时间字符串验证

    DateTime applicationDatetime = new DateTime(); bool applicationDate = DateTime.TryParse("2019-0 ...

  2. hdu 3364 高斯入门。。

    扣了一个高斯的介绍 比较全面(来自http://blog.csdn.net/duanxian0621/article/details/7408887) 高斯消元法,是线性代数中的一个算法,可用来求解线 ...

  3. javaIO——StringReader & StringWriter

    上一篇概述篇说过,一个IO对象是指一个可以被关闭的数据源或者目标,那么StringReader和StringWriter就是一个字符串源和字符串目标. 1. StringtReader: 文档说:St ...

  4. Ubuntu18.04安装MySQL与默认编码设置

    安装 打开终端直接开始,编码配置方法在后面 #通过apt更新包索引 sudo apt update #按照默认软件包安装 sudo apt install mysql-server #运行安全脚本 s ...

  5. 关于google开源的Material Design说明

    原文地址:https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/wiki/Getting-Started 源码地址:h ...

  6. JasperReport笔记

    参考: https://blog.csdn.net/dullchap/article/details/51799070 关于 ireport的初步使用 ,笔记记录

  7. Collection 和 Collections的区别

    1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Coll ...

  8. 「SNOI2019」通信 分治建图

    根据题意 每个点可以直接与S,T相连 也可以和前面的哨站相连 暴力建边的话 有n2条边 要用分治优化建边: 类似于归并排序 先对每一层分为左半边与右半边 对每一半都拿出来先排序去重后 直接排成一条链建 ...

  9. SQL 递归查询,意淫CTE递归的执行步骤

    今天用到了sql的递归查询.递归查询是CTE语句with xx as(....)实现的. 假如表Category数据如下. 我们想查找机枪这个子分类极其层次关系(通过子节点,查询所有层级节点).以下是 ...

  10. systemctl automatically restart service

    systemctl automatically restart service  Pothi Kalimuthu  Linux  October 9, 2016 0 Minutes Reference ...