介绍

使用级联分类器工作包括两个阶段:训练和检测。 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍。当前的指南描述了如何训练分类器:准备训练数据和运行训练程序。参考:http://jingyan.baidu.com/article/4dc40848f50689c8d946f197.html

利用OpenCV自带的haar training程序训练一个分类器,需要经过以下几个步骤:

(1)收集训练样本:

训练样本包括正样本和负样本。正样本,通俗点说,就是图片中只有你需要的目标。而负样本的图片只要其中不含有目标就可以了。但需要说明的是,负样本也并非随便选取的。例如,你需要检测的目标是汽车,那么正样本就应该是仅仅含有汽车的图片,而负样本显然不能是一些包含天空的,海洋的,风景的图片。因为你最终训练分类器的目的是检测汽车,而汽车应该出现在马路上。也就是说,分类器最终检测的图片应该是那些包含马路,交通标志,建筑物,广告牌,汽车,摩托车,三轮车,行人,自行车等在内的图片。很明显,这里的负样本应该是包含摩托车、三轮车、自行车、行人、路面、灌木丛、花草、交通标志、广告牌等。

另外,需要提醒的是,adaboost方法也是机器学习中的一个经典算法,而机器学习算法的前提条件是,测试样本和训练样本独立同分布。所谓的独立同分布,可以简单理解为:训练样本要和最终的应用场合非常接近或者一致。否则,基于机器学习的算法并不能保证算法的有效性。此外,足够的训练样本(至少得几千张正样本、几千张负样本)也是保证训练算法有效性的一个前提条件。

这里,假设所有的正样本都放在 /pos文件夹下,所有的负样本都放在 /neg文件夹下;

(2)对所有的正样本进行尺寸归一化:

上一步收集到的正样本,有很多的尺寸大小,有的是200*300,有的是500*800...尺寸归一化的目的,就是把所有的图片都缩放到同一大小。比如,都缩放到50*60的大小。(程序或者光影魔术手都可以)

(3)生成正样本描述文件:

所谓的正样本描述文件,其实就是一个文本文件,只不过,很多人喜欢将这个文件的后缀改成.dat而已。正样本描述文件中的内容包括:文件名 目标个数 目标在图片中的位置(x,y,width,height)典型的正样本描述文件如下所示:0.jpg 1 0 0 30 40….

假如,\pos文件夹下有5000个正样本图片,每个图片中仅有一个目标。命令行下 dir /b > pos.dat生成一个pos.dat文件作为正样本描述文件。

(4)创建正样本vec文件

由于haarTraining训练的时候需要输入的正样本是vec文件,所以需要使用createsamples程序来将正样本转换为vec文件。(例如:f:\pos\pos.vec)。

Createsamples程序的命令行参数:
命令行参数:
-vec <vec_file_name>
训练好的正样本的输出文件名。
-img<image_file_name>
源目标图片(例如:一个公司图标)
-bg<background_file_name>
背景描述文件。
-num<number_of_samples>
要产生的正样本的数量,和正样本图片数目相同。
-bgcolor<background_color>
背景色(假定当前图片为灰度图)。背景色制定了透明色。对于压缩图片,颜色方差量由bgthresh参数来指定。则在bgcolor-bgthresh和bgcolor+bgthresh中间的像素被认为是透明的。
-bgthresh<background_color_threshold>
-inv
如果指定,颜色会反色
-randinv
如果指定,颜色会任意反色
-maxidev<max_intensity_deviation>
背景色最大的偏离度。
-maxangel<max_x_rotation_angle>
-maxangle<max_y_rotation_angle>,
-maxzangle<max_x_rotation_angle>
最大旋转角度,以弧度为单位。
-show
如果指定,每个样本会被显示出来,按下"esc"会关闭这一开关,即不显示样本图片,而创建过程继续。这是个有用的debug选项。
-w<sample_width>
输出样本的宽度(以像素为单位)
-h《sample_height》
输出样本的高度,以像素为单位。

(5) 创建负样本描述文件

在保存负样本的文件夹下生成一个负样本描述文件,具体步骤同(3),此处不再赘叙;

(6)进行样本训练

该步骤通过调用OpenCV\bin目录下的haartraining程序(新版本的opencv改名为opencv_haartraining)来完成。其中,Haartraining的命令行参数为:
-data<dir_name>
存放训练好的分类器的路径名。
-vec<vec_file_name>
正样本文件名(由trainingssamples程序或者由其他的方法创建的)
-bg<background_file_name>
背景描述文件。
-npos<number_of_positive_samples>,
-nneg<number_of_negative_samples>
用来训练每一个分类器阶段的正/负样本。合理的值是:nPos = 7000;nNeg = 3000
-nstages<number_of_stages>
训练的级联分类器层数。
-nsplits<number_of_splits>
决定用于阶段分类器的弱分类器。如果1,则一个简单的stump classifier被使用。如果是2或者更多,则带有number_of_splits个内部节点的CART分类器被使用。
-mem<memory_in_MB>
预先计算的以MB为单位的可用内存。内存越大则训练的速度越快。
-sym(default)
-nonsym
指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。
-minhitrate《min_hit_rate》
每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate的number_of_stages次方。
-maxfalsealarm<max_false_alarm_rate>
没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate的number_of_stages次方。
-weighttrimming<weight_trimming>
指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9
-eqw
-mode<basic(default)|core|all>
选择用来训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。
-w《sample_width》
-h《sample_height》
训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同。
一个训练分类器的例子:
"D:\Program Files\OpenCV\bin\haartraining.exe"   -data data\cascade -vec data\pos.vec -bg negdata\negdata.dat -npos 49 -nneg 49 -mem 200 -mode ALL -w 20 -h 20

训练结束后,会在目录data下生成一些子目录,即为训练好的分类器。

(7) 生成xml文件

上一步在进行haartraining的时候,会在data目录下生成一些目录及txt文件,我们需要调用opencv\bin\haarconv.exe将这些txt文件转换为xml文件,也就是所谓的分类器。

至此,分类器的训练工作已完成。剩下的,就是在程序中加载xml文件,并调用相应的函数接口来实现分类检测的作用了。

其实这个方法有点老了,新一点有这个:http://blog.csdn.net/liulina603/article/details/8598681

转载于:https://www.cnblogs.com/taopanpan/p/4000875.html

如何利用OpenCV自带的级联分类器训练程序训练分类器相关推荐

  1. python利用opencv自带的颜色查找表(LUT)进行色彩风格变换

    1 LUT颜色查找表介绍 Look Up Table(LUT)查找表 1.颜色查找表就是一种像素值映射的表,如下是一个对比度改变图像的查找表,从图中可以知道: 原图中像素值为40的像素,经过查找表映射 ...

  2. Windows 技术篇-win7利用系统自带工具关闭开机启用程序,不使用杀毒软件设置开机启动项

    通过运行 msconfig 可以进入系统配置管理器,里面有开机启动程序列表,可以自由的进行设置. 如果想设置开机启动的话,就把要启动程序的快捷方式放入下面地址里即可,也可以通过开始菜单来进入. C:\ ...

  3. scala(java)利用opencv识别车辆截取并计数

    记录一下今天学习的成果,scala利用opencv识别车辆截取图片并计数,当然可以通过自己训练模型去识别各种物品,对制作机器学习训练集有很大的帮助,贴出关键的代码供大家学习参考 实现思路 利用open ...

  4. 基于OpenCV自带分类器识别人脸

    基于OpenCV自带分类器识别人脸 在VS2019下要安装适用于桌面的VC++ 2015(2017) v14 00(v14)工具集. 访问网站:https://visualstudio.microso ...

  5. CV:利用cv2自带两步法haarcascade_frontalcatface.xml实现对猫脸检测

    CV:利用cv2自带两步法haarcascade_frontalcatface.xml实现对猫脸检测 目录 输出结果 实现代码 输出结果 实现代码 @author: niu ''' import cv ...

  6. 如何用OpenCV自带的adaboost程序训练并检测目标

    http://www.cnblogs.com/easymind223/archive/2012/07/03/2574826.html OpenCV自带的adaboost程序能够根据用户输入的正样本集与 ...

  7. Python口罩识别检测全网最全OpenCV训练分类器具体步骤(以训练口罩检测分类器为例)附分类器和数据集下载地址

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/115825671 OpenCV训练口罩检测 ...

  8. 利用OpenCV实现人眼的检测与跟踪

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 本篇博文的基础是  利用OpenCV的级联分类器 ...

  9. CV:利用cv2自带两步法haarcascade_frontalface_default.xml、_smile.xml实现对人脸、笑脸同时检测

    CV:利用cv2自带两步法haarcascade_frontalface_default.xml._smile.xml实现对人脸.笑脸同时检测 目录 输出结果 实现代码 输出结果 实现代码 #CV:利 ...

最新文章

  1. 贷款利率最高多少合法?
  2. mysql handlers,2 Handlers
  3. note_maven的概念,作用
  4. 《红周刊》独家对话芒格:你可以随自己喜欢一辈子不理性,那必然承受糟糕结果
  5. zuul网关,springsecurity认证中心 和 Swagger2 整合遇到的问题
  6. JVM笔记(B站宋红康课件)
  7. java操作html和word生成pdf,可生成目录和表格
  8. Python实现图片标记分类文件夹自动归类文件的脚本
  9. WDS服务--网络安装系统(自动部署装机Windows系统)
  10. 国网青豫线特高压启动送电 与百度智能云合作电网智能巡检方案
  11. 小米html查看器 联网,小米摄像机如何连接无线路由器通过手机查看
  12. 过cloudflare,使用cfscrape,以及cfscrape挂代理的方式
  13. 姓名学中萍字无根 怎么解释_无根Buildah的工作原理:在非特权环境中构建容器
  14. 什么是自动气象站 校园气象站
  15. 群晖(docker图形化界面)使用 SpeedTest 测速
  16. 计算机毕业设计ssm动漫交流与推荐分析系统633g7系统+程序+源码+lw+远程部署
  17. cocos2dx的文章
  18. Android入门第50天-读写本地文件
  19. 转 ROS:解决Error:cannot launch node of type [map_server/map_server]: can't locate node [map_server]
  20. ui动效 unity_【FairyGUI Unity】使用动效功能实现血条UI扣血与加血的缓动效果

热门文章

  1. Python notes
  2. Java 和操作系统交互,你猜会发生什么?
  3. 出场率比较高的一道多线程安全面试题
  4. Andriod --- JetPack (二):LifeCycle 的诞生
  5. 【Python】青少年蓝桥杯_每日一题_3.19_约分
  6. 计算机一级b考试理论知识,计算机一级b-一级计算机等级考试中的“一级B”指什么?谢谢! 爱问知识人...
  7. 问答|数据中心运维管理VIP学习群
  8. 机房防雷接地的黄铜排(黄铜带)与紫铜排(紫铜带)的区别与应用
  9. linux创建mysql视图,MySQL视图入门浅析
  10. phpmyadmin忘记mysql密码_忘记phpmyadmin登录密码怎么办