训练自己的Adaboost级联分类器并识别物体(二)
来源:互联网 发布:外阴白斑知乎 编辑:程序博客网 时间:2024/05/20 11:47
本文主要用于生成基于HAAR特征的Adaboost级联分类器。本文输出为级联分类器体现为.xml文件,输入是上文描述的正样本描述文件sample_pos.vec文件和负样本描述文件sample_neg.dat文件。
本文依赖以下两个OpenCV的工具:
- 训练用的opencv_haartraining.exe,该程序封装了haar特征提取以及adaboost分类器训练过程;
- haarconv.exe(老版本命名法)或者convert_cascade.exe(新版本命名法),该程序用于合并各级分类器成为最终的xml文件。
本文建议事先阅读本文第三节注意事项,对可能出现的问题做好心理准备。
一、训练分类器
打开CMD,输入以下命令:
opencv_haartraining.exe -data ./cascade -vec ./pos/sample_pos.vec -bg ./neg/sample_neg.dat -npos 20 -nneg 60 -mem 200 -mode ALL -w 20 -h 20以上命令的参数说明如下:
-data 指定生成的文件目录, -vec vec文件名, -bg 负样本描述文件名称,也就是负样本的说明文件(.dat) -nstage 20 指定训练层数,推荐15~20,层数越高,耗时越长。-nsplits 分裂子节点数目,选取默认值 2 -minhitrate 最小命中率,即训练目标准确度。-maxfalsealarm最大虚警(误检率),每一层训练到这个值小于0.5时训练结束,进入下一层训练,-npos 在每个阶段用来训练的正样本数目,-nneg在每个阶段用来训练的负样本数目 这个值可以设置大于真正的负样本图像数目,程序可以自动从负样本图像中切割出和正样本大小一致的,这个参数一半设置为正样本数目的1~3倍
-w -h样本尺寸,与前面对应 -mem 程序可使用的内存,这个设置为256即可,实际运行时根本就不怎么耗内存,以MB为单位
-mode ALL指定haar特征的种类,BASIC仅仅使用垂直特征,ALL表示使用垂直以及45度旋转特征-sym或者-nonsym,后面不用跟其他参数,用于指定目标对象是否垂直对称,若你的对象是垂直对称的,比如脸,则垂直对称有利于提高训练速度训练结束后会在cascade目录下生成0-N的子目录。训练过程如下图
在以上训练过程图中,会出现很多参数简称,简称的具体含义如下:
BACKGROUNG PROCESSING TIME 是负样本切割时间,一般会占用很长的时间N 为训练层数%SMP 样本占总样本个数ST.THR 阈值,HR 击中率,FA 虚警,只有当每一层训练的FA低于你的命令中声明的maxfalsealarm数值才会进入下一层训练EXP.ERR 经验错误率
二、合并分类器生成xml文件
输入命令:
convert_cascade.exe --size="20x20" ./cascade haar_adaboost.xml以上如果系统中没有convert_cascade,可以搜索convert_cascade.c文件,用任一编译器编译生成可执行文件。放在识别的根目录。注意--size参数中应该是20x20,中间符号是字母x而不是星号*。应该注意加以区别。该命令即可生成.xml文件。
三、注意事项
- 训练分类器时曾经出现过“invalid background description file”提示,出现的原因是因为我之前是按照训练自己haar-like特征分类器并识别物体(1)博客的内容采集负样本,并生成负样本说明文件。该博文生成的负样本说明文件每行的基本格式为1.jpg 1 0 0 40 40,其中1 0 0 40 40是多余的,去掉之后即可正常运行命令。
- 训练时间非常久,少则秒钟,多则几天甚至一礼拜。具体的时间跟你样本的选取、样本数量、机器的性能有着直接联系。举个例子,有人正样本7097负样本2830,在8核3.2Ghz的机器上,开启了多核并行加速(MP)的情况下训练了一周时间,跑到19层。链接Adaboost训练过程使用心得 。这个真心有点久了,有点夸张。举这个例子是想跟你说明,这是一件耗时间的事情,所以请你耐心等待。
- 卡死在某一层,好像进入死循环。这种情况一般跟样本的选择有关,尤其是负样本。当剩下所有的negtive样本在临时的cascade Classifier中evaluate的结果都是0(也就是拒绝了),随机取样本的数目到几百万都是找不到误检测的neg样本了,因而没法跳出循环!解决办法是:增加负样本数目,增加负样本之间的变化。如果过程中FA已经很低,则直接Ctrl+C终止即可。
- 训练带某一层出错,报错提示下图。查看cascade目录下发现确实走到第5层。这种情况跟上一种情况其实有点类似,都是opencv_haartraining.exe无法正常terminate。而我们的关注点在于,所生成的这些子分类器能用吗?要依实际情况而定。拿下图来说,在第5层的时候FA已经很低了,0.125000,说明效果已经够用。2.中也是这个道理。
0 0
- 训练自己的Adaboost级联分类器并识别物体(二)
- 训练自己的Adaboost级联分类器并识别物体(一)
- 训练自己的Adaboost级联分类器并识别物体(三)
- 【原】训练自己的haar-like特征分类器并识别物体(3)
- 训练自己的haar-like特征分类器并识别物体(3)
- Cascade Adaboost级联分类器的训练
- OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别
- 调整基于HAAR特征的AdaBoost级联分类器的物体识别的参数
- 训练自己的harr-like特征分类器并识别物体
- 【原】训练自己haar-like特征分类器并识别物体(1)
- 【原】训练自己haar-like特征分类器并识别物体(2)
- 训练自己haar-like特征分类器并识别物体(1)
- 训练自己haar-like特征分类器并识别物体(2)
- 训练自己haar-like特征分类器并识别物体(1)
- 训练自己haar-like特征分类器并识别物体(2)
- 训练自己haar-like特征分类器并识别物体(1)
- 训练自己haar-like特征分类器并识别物体(2)
- 训练自己haar-like特征分类器并识别物体(3)
- MLlib中K-means流程
- 纯CSS实现的好看的边框
- linux系统在文件夹下查找含有指定字符串的文件的方法
- 1104. Sum of Number Segments
- 1105. Spiral Matrix
- 训练自己的Adaboost级联分类器并识别物体(二)
- tomcat中关于-Xms -Xmx -XX:PermSize -XX:MaxPermSize的理解和区别
- wireshark数据包分析
- php trait 学习笔记
- 1106. Lowest Price in Supply Chain
- scala 排序算法 直接插入排序
- 博为峰JavaEE技术文章 ——MyBatis Provider之@SelectProvider
- HTML--Position 定位
- BZOJ3612 [Heoi2014]平衡