原文地址丢失,请谅解!

1.准备训练样本图片

1.1样本的采集:

      样本图片最好使用灰度图,且最好根据实际情况做一定的预处理;样本数量越多越好,尽量高于1000,样本间差异性越大越好

正负样本比例为1:3最佳;尺寸为20x20最佳。

1.1.1正样本

        训练样本的尺寸为20*20(opencv推荐的最佳尺寸),且所有样本的尺寸必须一致。如果不一致的或者尺寸较大的,可以先将所有样本统一缩放到20*20。

 以下就是我用来训练的正样本:

1.1.2负样本

 这里要提醒一下,虽然负样本就是样本中不存在正样本的内容。但也不能随意的找些图片来作为负样本,比如什么天空,大海,森林等等。最好是根据不同的项目选择不同的负样本,比如一个项目是做机场的人脸检测,那么就最好从现场拍摄一些图片数据回来,从中采集负样本。其实正样本的采集也应该这样。不同的项目,就采集不同的正样本和负样本。因为项目不同,往往相机的安装规范不同,场景的拍摄角度就不同。

1.1.3 准备好工作目录

negdata目录: 放负样本的目录

posdata目录: 放正样本的目录

xml目录: 新建的一个目录,为之后存放分类器文件使用

negdata.txt: 负样本路径列表

posdata.txt: 正样本路径列表

pos.vec: 后续自动生成的样本描述文件

opencv_createsamples.exe: 生成样本描述文件的可执行程序(opencv自带)

opencv_haartraining.exe: 样本训练的可执行程序(opencv自带)

将下图中的所有文件拷贝到样本同级目录

1.1.4生成样本描述文件

1,生成正样本描述文件

进入posdata目录

执行dir /b/s/p/w *.jpg > pos.txt

2,生成负样本描述文件

进入negdata目录

执行dir /b/s/p/w *.jpg > neg.txt

打开正负样本描述文件如图:

将jpg全部替换成下面的格式

图中划线处为图片像素大小

将正负样本描述文件拷贝到与opencv_createsamples.exe文件同一目录

1.1.5生成.vec文件

opencv_createsamples.exe -vec pos.vec -info pos.txt -num 18500 -w 20 -h 20

opencv_createsamples.exe -vec neg.vec -info neg.txt -num 10500 -w 50 -h 50

出现以下信息即是生成成功(样本不标准会出错)

 

说明:

-info,指样本说明文件

-vec,样本描述文件的名字及路径

-num,总共几个样本,要注意,这里的样本数是指标定后的20x20的样本数,而不是大图的数目,其实就是样本说明文件第2列的所有数字累加

-w -h指明想让样本缩放到什么尺寸。这里的奥妙在于你不必另外去处理第1步中被矩形框出的图片的尺寸,因为这个参数帮你统一缩放!(我们这里准备的样本都是20*20)

 

1.1.6训练样本

新建文件traincascade.bat

opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 500 -numNeg 656 -numStages 20 -w 20 -h 20 -mode ALL

pause

复制进去保存

准备好数据后,就该训练了,根据官网参数的提示进行设置。一下是我的设置,可参考:
opencv_traincascade -data cascade_license_dir -vec licenseVec -bg LicenseText.txt -numPos 800 -numNeg 4000 -numStages 15 -featureType LBP -w 45 -h 25 -minHitRate 0.99 -maxFalseAlarmRate 0.3 -bt DAB -maxDepth 2 
1
记得-w 和-h就是小写的,还有-minHitRate和-maxFlaseAlarmRate参数,不然训练速度很快,而且训练的效果不理想。 -numNeg会比实际准备的负样本个数大两三倍,并且-w和-h和用opencv_createsamples中用的-w和-h保持一致,不然会报错。

训练完之后,进行测试,分类器效果还是不够理想,会把相近的都选中,降低 -maxFlaseAlarmRate的参数,提高-numPos参数,以及把负样本也做一次直方图均衡化,在加些标准的负样本。再次进行训练。
中途报错:Can not get new positive sample.The most possible reason id insufficient count of samples is given veg-file.

出现这种错的原因提示中很明显,正样本的数目不够,也就是-numPos设置的大了。加入正样本的数目一共有1900张,-numPos设置的是1800张,那么在第一级分类器中,会在1900张图片中选择1800张,在准确率达到0.99时结束第一级训练,那么分类器认为正样本还有18000.99张;到了第二级分类器,依旧需要输入1800张图片,那么还得从剩余的(1900-1800)张图片中选择(1800-18000.99)张,加上第一级分类器筛选出的正样本一起去训练,依次类推,假如你剩余的样本少于分类器需要的正样本数目,就会报错。所以设置-numPos的时候尽量是正样本数目的80%左右。

错误:Train dataset for temp stage can not be filled. Branch training terminated.

若出现这种错误,是负样本的路径有问题,-bg 后面的参数只能是文件名称,不能是路径+文件名称,需要把负样本的txt文件放到当前目录下,并在txt文件中的路径加上负样本图片的文件名。

把pos.txt和neg.txt改回如图格式(注意:这一步至关中重要)

然后双击traincascade.bat进行训练

说明:

 点击训练后会出现如图所示代表正确训练中

 

训练结束后会在xml目录下生成如图文件(其中cascade.xml就是我们训练得到的分类器)

Opencv训练自己分类器相关推荐

  1. 使用opencv训练cascade分类器进行目标检测

    文章目录 0.建立训练目录 1.建立正负样本 2.生成正负样本的txt文件 3.生成 pos.vec描述文件 4.训练cascade分类器 5.目标检测 总结 0.建立训练目录 文件夹: train/ ...

  2. OpenCV训练分类器

    OpenCV训练分类器 一.简介     目标检测方法最初由Paul Viola [Viola01]提出,并由Rainer Lienhart [Lienhart02]对这一方法进行了改善.该方法的基本 ...

  3. Python+OpenCV:训练级联分类器(Cascade Classifier Training)

    Python+OpenCV:训练级联分类器(Cascade Classifier Training) Introduction Working with a boosted cascade of we ...

  4. OpenCV训练分类器制作xml文档

    opencv 2.1网上查的另一种资料 训练分类器成功,在此与大家分享. 参考英文资料网址: http://note.sonots.com/SciSoftware/haartraining.html# ...

  5. 使用OpenCV训练好的级联分类器识别人脸

    一.使用OpenCV训练好的级联分类器来识别图像中的人脸 当然还有很多其他的分类器,例如表情识别,鼻子等,具体可在这里下载: OpenCV分类器 import cv2 # 矩形颜色和描边 color ...

  6. OpenCV - 训练分类器

    一.收集样本 正样本:待检目标样本 负样本:其它任意图片 PS.所有样本图片都应该有同一尺寸,如20 * 20 ACDSee软件:对图像批量处理为20x20大小的图片 1.把所有正样本图片放在posd ...

  7. Qt +opencv 通过级联分类器训练的模型进行识别(车辆识别+人脸识别)

    有不对的或更好的方法欢迎交流 一些内容可参照这篇文章:https://blog.csdn.net/m0_64596200/article/details/126748697?spm=1001.2014 ...

  8. OpenCV的级联分类器训练

    使用增强级联的弱分类器包括两个主要阶段:训练和检测阶段.对象检测教程中有描述使用基于 HAAR 或 LBP 模型的检测阶段.这里主要介绍训练增强分类器级联所需的功能,包括:准备训练数据.执行实际模型训 ...

  9. 用opencv训练LBP特征分类器生成xml文件

    用opencv训练LBP特征分类器生成xml文件 需要工具:opencv_createsamples.exe .opencv_traincascade.exe .opencv_world3414.dl ...

最新文章

  1. Unity2D游戏开发和C#编程大师班
  2. Microbiome:南土所褚海燕组揭示长期施肥抑制根际微生物固氮的作用机制
  3. 10个美丽的例子,插图在网页设计中的应用
  4. 关于NTDDI_VERSION,_WIN32_WINNT,WINVER的含义
  5. MapServer WinForm开发成功
  6. 记一次node+react项目发布过程(一)--webpack生产环境打包优化
  7. 个人推动团队项目进展_推动者和关守者对开发团队的价值
  8. 进程同步与信号量机制的应用
  9. Qt6.0开发环境搭建
  10. 恩尼格码机的原理以及破解方法
  11. 3d模型 vv5_你也想做锦鲤信小呆?WEY VV5升级款这就来满足你!
  12. 对类模板特化和函数模板重载的一点理解
  13. flutter全屏背景图(包括appbar和状态栏)以及沉浸状态栏的设置
  14. 论文阅读笔记《Siamese Convolutional Neural Network for Camera Pose Estimation and Visual Servoing》
  15. F. Equalize the Array
  16. (第二场网络赛J题)Leaking Roof(bfs)
  17. 连接mongodb提示目标计算机拒绝,MongoDB 由于目标计算机积极拒绝,无法连接 2014-07-25T11:00:48.634+0...
  18. XNA游戏:各种输入测试 上
  19. 激活win10 2016企业版
  20. 蓝海讯通年中总结大会,陈旭总结2018上半年工作要点

热门文章

  1. bilinear 神经网络_bilinear model bilinear pooling(一)
  2. 数据交换平台的架构设计
  3. ROS URDF添加传感器模型
  4. Hyper-V支持加密狗的方法
  5. MWC2023现场直击-1
  6. ASUS华硕天选3笔记本电脑FA507RM6800原装出厂Windows11系统恢复原厂OEM系统
  7. Java算法-滑动窗口算法(Sliding Window)(十)
  8. 拿来把你,挖掘实战之基本挖掘流程【建议收藏】
  9. mysql myisam 详解_Mysql InnoDB和MyISAM区别原理解析
  10. php define 获取,php define常量调用