OpenCV中的Haar+Adaboost(五):AdaBoost之DAB与GAB
2017-03-01 16:52
549 查看
之前的文章主要讲解了OpenCV中与检测相关的内容,包括Haar特征、积分图和检测分类器结构;之后的文章将逐步开始介绍训练相关的内容。
缩进本节主要介绍AdaBoost,以及AdaBoost中的DAB与GAB算法。
(一) AdaBoost背景介绍
缩进在了解AdaBoost之前,先介绍弱学习和强学习的概念:
缩进弱学习:识别错误率小于1/2,即准确率仅比随机猜测略高的学习算法
缩进强学习:识别准确率很高并能在多项式时间内完成的学习算法
缩进显然,无论对于任何分类问题,弱学习都比强学习容易获得的多。简单的说:AdaBoost就是一种把简单的弱学习拼装成强学习的方法。
缩进事实上,在OpenCV图像检测模块训练程序中实现了4种AdaBoost算法:DAB(Discrete AdaBoost),RAB(Real AdaBoost),LB(LogitBoost)与GAB(Gentle AdaBoost)。其中DAB即是AdaBoost.M1(AdaBoost.M2是DAB的多分类版本),GAB是opencv_traincascade.exe的默认AdaBoost方法。
(二)DAB介绍
[align=justify]缩进DAB是最常见的AdaBoost算法,其算法原理如上所示。DAB算法的核心是不断的寻找当前权重下的最优分类器,然后加大被最优分类器误判样本的权重并重新训练,直到得到强分类器。说到这里不得不佩服前辈大神的奇思妙想,在实际应用中几乎不可能直接找到有效的强分类器,而获得弱分类器则相对简单很多,DAB算法只需要通过迭代就能组合弱分类器最终得到强分类器。[/align]
[align=justify]
[/align]
缩进看完上面原理解释后,如果你还不明白DAB,那么一起来看一个例子。假设空间中分布着N=10个点,其中5个蓝色的正(+)样本点和5个红色的负(-)样本点,如图1。开始之前先初始化权重数组,即每个样本权重为wi
= 1/N = 1/10。
[align=center]图1[/align]
[align=justify]在这里限定弱分类器只能是水平or竖直的直线。那么找到一个最优弱分类器f1将样本分为2类,其中圆圈中3个样本表示被f1错误分类,此时可计算f1分类误差e1和f1的权重c1,然后更新所有的样本权重wi。[/align]
图2.1 M=1时
可以看到,当M=1循环结束时,直观上被f1误分类的样本权重变大(被f1错误分类的3个+变大),下次训练时则更加“重视”这几个样本。注意,更新权重后不要忘记权重归一化(权重具体值没有写出来,请读者自行推导)。
图2.2 M=2时
还是类似,加大被f2误分类的样本权重(这次是三个-)。
图2.3 M=3时
最后依照DAB原理中的输出F(x)公式,通过权重c1、c2和c3强弱分类器组成一个强分类器F:
F = 0.42 ×
+ 0.65 ×
+
0.92 ×
可以看出循环M次则训练M个弱分类器,并由这M个分类器最终组成强分类器。但是M是有上限的,即不大于使全部样本被正确分类所需的弱分类器数量,例如图2例中M≤3。
缩进最后给出论文中DAB的原始版本:
(三)RAB介绍
缩进在DAB中,弱分类器fm的输出为+1和-1,即绝对的判定样本为“正”或“负”;在RAB中,Pw(y=1|x)是样本为“正”的概率,再通过一个函数将概率[0,1]阈映射到实数阈R,并作为弱分类器fm的输出值。从DAB到RAB,实现了从“绝对”到“相似度”(即概率)的变化。限于篇幅,不再介绍RAB,请有兴趣的读者自行查阅论文和OpenCV代码。
(四)GAB介绍
[align=justify]缩进首先定义加权平方和误差WSE(即weighted square error)如下,其中wi表示权重,f(xi)表示弱分类器对样本xi的输出值,yi表示样本xi的标签:[/align]
惯例,列出GAB算法的官方描述:
仔细观察可以发现,GAB和DAB有2处不同,解释如下:
1. DAB和GAB使用的分类器权重误差不一样,GAB是“weighted least-squares”,也就是上面的WSE。应该比较好理解。
2. DAB和GAB的弱分类器对样本xi的f(xi)不一样。DAB的f(xi)不是+1就是-1;而GAB的f(xi)输出的是一种类似于概率的值。
缩进为了说明,不妨设有x0至x5共5个样本,某次训练中第m次循环选取了某个Feature来度量样本,对应的Feature
value为h1至h5。然后选择某个阈值t将样本分为左+右两个部分。相应的对于DAB,左边部分的f(xi)为-1,右边部分的f(xi)为+1;而GAB不同的是,此时左边部分的f(xi)为Pleft,右边部分的f(xi)为Pright,表示一种“加权离散度”。
获得f(xi)之后通过调整t的大小,使WSE最小,即可完成第m轮训练。其中最终的t就是之前的弱分类器阈值。具体GAB如何应用在训练中将在后续章节中讲解。
原文地址:http://blog.csdn.net/zy1034092330/article/details/50445726
缩进本节主要介绍AdaBoost,以及AdaBoost中的DAB与GAB算法。
(一) AdaBoost背景介绍
缩进在了解AdaBoost之前,先介绍弱学习和强学习的概念:
缩进弱学习:识别错误率小于1/2,即准确率仅比随机猜测略高的学习算法
缩进强学习:识别准确率很高并能在多项式时间内完成的学习算法
缩进显然,无论对于任何分类问题,弱学习都比强学习容易获得的多。简单的说:AdaBoost就是一种把简单的弱学习拼装成强学习的方法。
缩进事实上,在OpenCV图像检测模块训练程序中实现了4种AdaBoost算法:DAB(Discrete AdaBoost),RAB(Real AdaBoost),LB(LogitBoost)与GAB(Gentle AdaBoost)。其中DAB即是AdaBoost.M1(AdaBoost.M2是DAB的多分类版本),GAB是opencv_traincascade.exe的默认AdaBoost方法。
(二)DAB介绍
[align=justify]缩进DAB是最常见的AdaBoost算法,其算法原理如上所示。DAB算法的核心是不断的寻找当前权重下的最优分类器,然后加大被最优分类器误判样本的权重并重新训练,直到得到强分类器。说到这里不得不佩服前辈大神的奇思妙想,在实际应用中几乎不可能直接找到有效的强分类器,而获得弱分类器则相对简单很多,DAB算法只需要通过迭代就能组合弱分类器最终得到强分类器。[/align]
[align=justify]
[/align]
缩进看完上面原理解释后,如果你还不明白DAB,那么一起来看一个例子。假设空间中分布着N=10个点,其中5个蓝色的正(+)样本点和5个红色的负(-)样本点,如图1。开始之前先初始化权重数组,即每个样本权重为wi
= 1/N = 1/10。
[align=center]图1[/align]
[align=justify]在这里限定弱分类器只能是水平or竖直的直线。那么找到一个最优弱分类器f1将样本分为2类,其中圆圈中3个样本表示被f1错误分类,此时可计算f1分类误差e1和f1的权重c1,然后更新所有的样本权重wi。[/align]
图2.1 M=1时
可以看到,当M=1循环结束时,直观上被f1误分类的样本权重变大(被f1错误分类的3个+变大),下次训练时则更加“重视”这几个样本。注意,更新权重后不要忘记权重归一化(权重具体值没有写出来,请读者自行推导)。
图2.2 M=2时
还是类似,加大被f2误分类的样本权重(这次是三个-)。
图2.3 M=3时
最后依照DAB原理中的输出F(x)公式,通过权重c1、c2和c3强弱分类器组成一个强分类器F:
F = 0.42 ×
+ 0.65 ×
+
0.92 ×
可以看出循环M次则训练M个弱分类器,并由这M个分类器最终组成强分类器。但是M是有上限的,即不大于使全部样本被正确分类所需的弱分类器数量,例如图2例中M≤3。
缩进最后给出论文中DAB的原始版本:
(三)RAB介绍
缩进在DAB中,弱分类器fm的输出为+1和-1,即绝对的判定样本为“正”或“负”;在RAB中,Pw(y=1|x)是样本为“正”的概率,再通过一个函数将概率[0,1]阈映射到实数阈R,并作为弱分类器fm的输出值。从DAB到RAB,实现了从“绝对”到“相似度”(即概率)的变化。限于篇幅,不再介绍RAB,请有兴趣的读者自行查阅论文和OpenCV代码。
(四)GAB介绍
[align=justify]缩进首先定义加权平方和误差WSE(即weighted square error)如下,其中wi表示权重,f(xi)表示弱分类器对样本xi的输出值,yi表示样本xi的标签:[/align]
惯例,列出GAB算法的官方描述:
仔细观察可以发现,GAB和DAB有2处不同,解释如下:
1. DAB和GAB使用的分类器权重误差不一样,GAB是“weighted least-squares”,也就是上面的WSE。应该比较好理解。
2. DAB和GAB的弱分类器对样本xi的f(xi)不一样。DAB的f(xi)不是+1就是-1;而GAB的f(xi)输出的是一种类似于概率的值。
缩进为了说明,不妨设有x0至x5共5个样本,某次训练中第m次循环选取了某个Feature来度量样本,对应的Feature
value为h1至h5。然后选择某个阈值t将样本分为左+右两个部分。相应的对于DAB,左边部分的f(xi)为-1,右边部分的f(xi)为+1;而GAB不同的是,此时左边部分的f(xi)为Pleft,右边部分的f(xi)为Pright,表示一种“加权离散度”。
获得f(xi)之后通过调整t的大小,使WSE最小,即可完成第m轮训练。其中最终的t就是之前的弱分类器阈值。具体GAB如何应用在训练中将在后续章节中讲解。
原文地址:http://blog.csdn.net/zy1034092330/article/details/50445726
相关文章推荐
- OpenCV中的Haar+Adaboost(五):AdaBoost之DAB与GAB
- opencv机器学习 Haar特征 LBP特征 adaboost集成学习 级联分类器 支持向量机SVM 主成分分析PCA 人工神经网络(ANN) 笑脸检测 SVM分类 笑脸 检测
- OpenCV中的Haar+Adaboost(三):级联分类器结构与XML文件含义
- 使用OpenCV训练Haar like+Adaboost分类器的常见问题
- 《FAQ:OpenCV Haartraining》——使用OpenCV训练Haar like+Adaboost分类器的常见问题
- OpenCV编程->haar+adaboost识别源码
- Adaboost+Haar+Opencv博客
- OpenCV编程->haar+adaboost识别源码
- OpenCV中的Haar+Adaboost(二):积分图和45°旋转积分图
- 《FAQ:OpenCV Haartraining》——使用OpenCV训练Haar like+Adaboost分类器的常见问题
- OpenCV中的Haar+Adaboost(三):级联分类器结构与XML文件含义
- 《FAQ:OpenCV Haartraining》——使用OpenCV训练Haar like+Adaboost分类器的常见问题
- opencv haar+adaboost使用心得
- opencv haar+adaboost使用心得
- OpenCV中的Haar+Adaboost(四):利用并查集合并检测窗口(NMS)
- opencv haar+adaboost使用心得
- opencv haar+adaboost使用心得
- OpenCV中的Haar+Adaboost(六):minHitRate与maxFalseAlarm
- OpenCV中的Haar+Adaboost(七):分类器训练过程
- OpenCV Haar AdaBoost源码改进据说是比EMCV快6倍