OpenCV中Adaboost训练的经验总结

转载 2016年08月30日 20:32:30

转载:http://blog.csdn.net/xidianzhimeng/article/details/42147601


以OpenCV训练级联Adaboost为例进行说明

numPos: 12000
numNeg: 120000
numStages: 15
precalcValBufSize[Mb] : 1000
precalcIdxBufSize[Mb] : 800
stageType: BOOST
featureType: HOG
sampleWidth: 40
sampleHeight: 40
boostType: DAB
minHitRate: 0.999
maxFalseAlarmRate: 0.7
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 150
===== TRAINING 0-stage =====
<BEGIN
POS count : consumed   12000 : 12000
NEG count : acceptanceRatio    120000 : 1
+----+---------+---------+
|  14| 0.999083| 0.684617|
+----+---------+---------+
===== TRAINING 1-stage =====
<BEGIN
POS count : consumed   12000 : 12011
NEG count : acceptanceRatio    120000 : 0.688808
+----+---------+---------+
|  24| 0.999083| 0.695967|
+----+---------+---------+
===== TRAINING 2-stage =====
<BEGIN
POS count : consumed   12000 : 12022
NEG count : acceptanceRatio    120000 : 0.470459
+----+---------+---------+
|  35| 0.999083|  0.68575|
+----+---------+---------+
===== TRAINING 3-stage =====
<BEGIN
POS count : consumed   12000 : 12033
NEG count : acceptanceRatio    120000 : 0.544413
+----+---------+---------+
|  59| 0.999083|   0.6992|
+----+---------+---------+
===== TRAINING 4-stage =====
<BEGIN
POS count : consumed   12000 : 12044
NEG count : acceptanceRatio    120000 : 0.377264
+----+---------+---------+
| 103| 0.999083| 0.671933|
+----+---------+---------+


1 正负样本比例问题:1:4或者1:5训练出来的分类器要优于1:1或者1:10
正负样本比例接近的时候1:1,对负样本的看中程度很低,在实际的生活中负样本肯定远远多于正样本
正负样本比例较大的时候1:10,对负样本多于看中而忽略了正样本的统计特性,造成正样本权重总和很小,当权重小于一定程度的时候可能很大一部分正样本都不参与训练了(在weightTrimRate=0.95时),那么假设没有正样本参与训练了,只有负样本参与后续训练,训练出来的分类器会是什么样子的呢?
不管是目标检测问题与单纯数据分类问题我们都不可以专门针对负样本进行训练,这样的训练是无意义的
因此我们只能尽可能保证不过分看中负样本的情况下尽量增加负样本的个数,对于正样本的个数,比如人脸检测至少需要上万或者几十万的正样本吧,这个没有较好的结论,如果有人知道OpenCV公开的haarcascade_frontalface_alt.xml的参数请指教一下。

2 minHitRate:影响每个强分类器阈值,当设置为0.95时如果正训练样本个数为10000个,那么其中的500个就很可能背叛别为负样本,第二次选择的时候必须多选择后面的500个,按照这种规律我们为后面的每级多增加numPos*minHitRate个正样本,根据训练的级数可以得到如下公式
numPos+(numStages-1)*numPos*(1-minHitRate)《=准备的训练样本
以上式子也只是根据训练级数和准备的正样本总和设置一个参与训练的正样本个数,只能作为估算,小于计算出来的数可能没有问题,但是大于那个数肯定有问题
现在解释下”可能有问题“是如何理解的:因为我们总是默认每次添加固定个数的正训练样本,但是有时候后面的固定个数的正训练样本中也可能存在不满足条件的样本,这些样本跟我们排除的样本类似,所以比如我们打算添加500个样本就够了,但是实际需要添加600个,这时候就出现问题了。
从上面例子的结果中可以看出,每级我们允许丢掉12000*0.001个正样本=12,需要注意的是万一第11个或者第10个跟第12个的阈值是一样的,那么我们之丢掉了前面的10个或者9个而已,因此每次增加的个数可能要小于12个,大于12个的情况就是上面所说的”可能有问题“

3 maxFalseAlarm:影响每个强分类器中弱分类器的个数,设置较大,每级可以滤除负样本的比例就较小,这样在测试过程中虚警率就较高;设置较小,每级强分类器中弱分类器的个数就较多,检测时间就会相对要长,在可以接受的检测时间下尽量降低maxFalseAlarm是我们要追求的目标
关于负样本的选择,因为每级剩下的负样本个数低于numNeg*maxFalseAlarm,在第二轮选择的时候从之前选择的负样本后面继续选择,而不是重头开始将选择过的负样本也包含进来,只有当遍历完一遍负样本列表后才重头在扫描一遍

4 weightTrimWeight:影响参与训练的样本,不管是正样本还是负样本,当更新完样本权重之后,将样本权重按照从小到大的顺序排列,当从后累加样本权重不小于weightTrimWeight时前面的样本就不参与后面的训练了,这里有一个优化是等于该阈值的样本还是参与训练的,这样可以在保证训练精度的基础上缩短检测时间,因为我们认为是样本权重很小的时候表示该样本被正确分类了,而忽略了样本很多的时候,尽管样本没有被正确分类,也可能被排除在外了。还有一种情况就是正样本比例悬殊的时候,例如1:20,当正样本完全分类正确了,那么正样本比例总和仅占4.8%,后续参与训练的正样本可能就没有了

5 maxWeakCount:决定每级强分类器中弱分类器的最大个数,当FA降不到指定的maxFalseAlarm时可以通过指定最大弱分类器个数停止单个强分类器

6 boost参数(maxDepth、bt):影响决策树构建的法则以及权重更新策略
至于Gentle AdaBoost.考虑到(AdaBoost对”不像”的正样本权值调整很高,而导致了分类器的效率下降),而产生的变种算法.它较少地强调难以分类的样本.
Rainer Lienhart, Alexander Kuranov, Vadim Pisarevsky在论文Empirical Analysis of Detection Cascades of Boosted Classifiers for Rapid Object Detection中提出在stump弱分类器(即每个弱分类器使用一个特征进行分类)上进行的对比试验中,Gentle的结果明显好于Real和 Discrete.


有不对的地方请指教!

OpenCV中Adaboost训练的经验总结

以OpenCV训练级联Adaboost为例进行说明 numPos: 12000 numNeg: 120000 numStages: 15 precalcValBufSize[Mb] : 100...

第二十一篇:OpenCV中Adaboost训练的经验总结

转载于:OpenCV中Adaboost训练的经验总结 - 梦想腾飞 - 博客频道 - CSDN.NET http://blog.csdn.net/xidianzhimeng/article/detai...

OpenCV中Adaboost训练的经验总结

本文转自:http://blog.csdn.net/xidianzhimeng/article/details/42147601。 以OpenCV训练级联Adaboost为例进行说明 numP...

OpenCV中Adaboost训练的经验总结

关于使用OpenCV训练Adaboost的经验总结,互相交流,有不对的地方请指教!

adaboost训练之经验总结

利用adaboost训练的分类器做了几个项目(当然在实际应用过程中,我对daaboost做了优化和改善), 以下纯为训练前要考虑注意的地方。 0、训练前,正样本尺寸的选择很重要。 1、训练时正样...

使用YOLO训练自己的数据样本经验总结

YOLO近一年多新出的一种object detection的方法,关于目标检测及YOLO的介绍可参见:基于深度学习的目标检测研究进展 , CVPR2016目标检测之识别效率篇:YOLO, G-CNN,...

Mac OS sierra 安装opencv2经验总结,适用于独立安装python环境的用户

首先是由于mac版本更新,QTKit/QTKit.h,两个库被替换掉了,另外brew安装opencv时,之前安装的cmake无法识别,故踩了很多坑,现总结一下。 独立安装python后有疑问可以参考...

opencv加入Visual Studio 2013,个人经验总结(参考:inkmlong)

平台:      Visual Studio 2013      openCV2.4.8 日志产生日期:      2014.1.21 步骤: 1.openCV2.4.8下载链接(百度云盘):ht...
  • yogiman
  • yogiman
  • 2014年01月21日 20:50
  • 1124

初学Opencv的认识一些经验总结

在很久很久以前,那时候还是个学生,就说过opencv,不过没接触。 工作了几年后,也一直没接触这个方面的东西。 以为此前玩过ffmpeg,简单的搞搞过。 所以在玩open...
  • Nil88
  • Nil88
  • 2016年04月26日 16:33
  • 491

opencv3.2.0+contrib3.2.0+cuda8.0经验总结

1. cmake尽量不要选最新的版本,刚开始用3.8.1版本结果一直报错,warning还是一堆乱码,后来换成3.4.3 没有乱码了 2. 最开始编译一直出错,(最关键)提示的一条错误信息为:找不到...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV中Adaboost训练的经验总结
举报原因:
原因补充:

(最多只允许输入30个字)