参考博文:

1、http://blog.csdn.net/wuxiaoyao12/article/details/39227189

2、http://www.cnblogs.com/easymind223/archive/2012/07/03/2574826.html

3、http://blog.csdn.net/liulina603/article/details/8197889

使用的经验总结:

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对”不像”的正样本权值调整很高,而导致了分类器的效率下降),而产生的变种算法.它较少地强调难以分类的样本.

如何用OpenCV自带的adaboost程序训练并检测目标的更多相关文章

  1. 如何利用OpenCV自带的级联分类器训练程序训练分类器

    介绍 使用级联分类器工作包括两个阶段:训练和检测. 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍.当前的指南描述了如何训练分类器:准备训练数 ...

  2. 利用opencv源代码和vs编程序训练分类器haartraining.cpp

    如需转载请注明本博网址:http://blog.csdn.net/ding977921830/article/details/47733363. 一  训练框架 训练人脸检測分类器须要三个步骤: (1 ...

  3. OpenCV探索之路(二十七):皮肤检测技术

    好久没写博客了,因为最近都忙着赶项目和打比赛==| 好吧,今天我打算写一篇关于使用opencv做皮肤检测的技术总结.那首先列一些现在主流的皮肤检测的方法都有哪些: RGB color space Yc ...

  4. 【计算机视觉】如何使用opencv自带工具训练人脸检测分类器

    前言 使用opencv自带的分类器效果并不是很好,由此想要训练自己的分类器,正好opencv有自带的工具进行训练.本文就对此进行展开. 步骤 1.查找工具文件: 2.准备样本数据: 3.训练分类器: ...

  5. OpenCV原则解读HAAR+Adaboost

    因为人脸检测项目.用途OpenCV在旧分类中的训练效果.因此该检测方法中所使用的分类归纳.加上自己的一些理解.重印一些好文章记录. 文章http://www.61ic.com/Article/DaVi ...

  6. Opencv——级联分类器(AdaBoost)

    API说明: cv::CascadeClassifier::detectMultiScale(InputArray image,//输入灰度图像 CV_OUT std::vector<Rect& ...

  7. 基于Opencv自带BP网络的车标简易识别

    代码地址如下:http://www.demodashi.com/demo/12966.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1.准备工作 1.1 训练集和测 ...

  8. OpenCV学习笔记(2)——如何用OpenCV处理视频

    如何用OpenCV处理视频 读取视频文件,显示视频,保存视频文件 从摄像头获取并显示视频 1.用摄像头捕获视频 为了获取视频,需要创建一个VideoCapature对象.其参数可以是设备的索引号,也可 ...

  9. DotNetBar for Windows Forms 12.7.0.10_冰河之刃重打包版原创发布-带官方示例程序版

    关于 DotNetBar for Windows Forms 12.7.0.10_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版------------- ...

随机推荐

  1. c++中string类型用下标初始化后str.size()为0 输出string值为空

    你的string list是个默认构造函数,这样就没有为list分配空间,自然list[i]就会报出超出string范围的错误,可以简单更改为string list(6, '\0'),事先为list指 ...

  2. thinkphp ajax添加及删除

    写在前面的话:应客户需求需要给后台增加自助添加电影名称和链接的功能,添加后在微信前台能自动读取显示.开发步骤:1.由于是给后台添加一个增加电影及电影链接的功能,所以控制器在Admin下.在路径 App ...

  3. C# ServiceStack.Redis 操作对象List

    class Car { public Int32 Id { get; set; } public String Name { get; set; } static void Main(string[] ...

  4. swift项目中引入OC框架

  5. virtualbox 不能为虚拟电脑打开一个新任务/VT-x features locked or unavailable in MSR.

    确保了主机的BIOS中开启了Intel Virtual Technology,虚拟机配置中勾选了“启用VT-x/AMD-V”. 这是因为CPU不支持VT-X技术或者VT-X技术被锁定. 如果不打开虚拟 ...

  6. Android Studio-AndroidStudio目录结构

    最近,Google已经打算废弃Eclipse,而要大力支持他的亲生儿子AndroidStudio了,已经不在维护Eclipse了,也就是说在Eclipse上面出了什么问题,Google已经不在会管了, ...

  7. [bug]The file ‘/xxx/xxx.aspx’ has not been pre-compiled, and cannot be requested

    今天莫名奇妙的出现了这个问题,查找很多资料最后解决了. 发现编译的时候,少了一个dll,导致预编译失败. 参考资料 https://blogs.msdn.microsoft.com/asiatech/ ...

  8. C++中的异常处理(一)

     来自:CSDN 卡尔  后续有C++中的异常处理(二)和C++中的异常处理(三),C++中的异常处理(二)是对动态分配内存后内部发生错误情况的处理方法,C++中的异常处理(三)中是使用时的异常说明. ...

  9. Serenity框架官方文档翻译(1-2开始、安装和界面)

    1.开始 最好的和最快速地上手Serenity的方法是使用SERENE,它是一个示例应用程序模板. 您有2个选项来安装SERENE 模板到您的Visual Studio: 从Visual Studio ...

  10. 关于showModalDialog()对话框点击按钮弹出新页面的问题

    页面a.aspx上,单击按钮a,走脚本,弹出showModalDialog("b.aspx",....) 在b.aspx上有个服务器控件按钮b,单击按钮,更新数据后,会弹出一个新的 ...