opencv3.3 级联分类器生成xml以及遇到的一些问题

opencv3.3 训练级联分类器训练成功 来分享一波

今天遇到一位群友 对于级联分类器有点问题 于是我决定把训练的过程分享出来,并且和大家说说训练过程中可能会出现的问题。

创建样本步骤:

准备训练集

     首先 准备好训练集 正样本和负样本 (我做的是车牌识别  所以选取的正样本是车牌),

正样本放在positive文件夹下的img文件夹里(positive上面那个img文件夹存放的负样本,大家不要混淆了)

opencv3.3 级联分类器生成xml以及遇到的一些问题_第1张图片


opencv3.3 级联分类器生成xml以及遇到的一些问题_第2张图片

opencv3.3 级联分类器生成xml以及遇到的一些问题_第3张图片

正样本的话 不需要相同大小 ,但是一定要相同比例 ,怕出问题的的就把正样本变成相同大小吧。

我用的60*17的车牌图片

负样本的话,是指不包含正样本的其他任意图片,最好能有各种不同大小的不同场景的图片。

opencv3.3 级联分类器生成xml以及遇到的一些问题_第4张图片

我将负样本放在img目录下

opencv3.3 级联分类器生成xml以及遇到的一些问题_第5张图片

这个负样本是网上下的 相同大小 20*20 有点粗糙 大家不要学我 。。(最好是能有各种不同大小不同场景的!!)

样本准备好了 接下来生成路径

为正负样本生成描述文件:

 将文件夹下的图片遍历一遍 保存到txt文件里,可以用代码,也可以手动的复制粘贴路径写入txt。。

我用的java将文件夹下的图片遍历出来的 ,java代码在下面链接

资源链接



opencv3.3 级联分类器生成xml以及遇到的一些问题_第6张图片

接下来展示一下存放正样本路径的txt的内容

opencv3.3 级联分类器生成xml以及遇到的一些问题_第7张图片

opencv3.3 级联分类器生成xml以及遇到的一些问题_第8张图片

正样本用描述文件格式描述 如下

[filename] [# of objects] [[x y width height] [... 2nd object] ...]

x y指的是图片左上角坐标 width height指的是图片宽高

举个例子:

img/0001.bmp 1 0 0 60 17  

1代表一个文件 0 0 代表左上角x y坐标 60 17 表示宽高 

opencv3.3 级联分类器生成xml以及遇到的一些问题_第9张图片

看这个红框代码 自己领悟

然后就是负样本的txt文件 负样本用集合文件格式描述

集合文件格式(collection file format)就是如下形的描述文件:

[filename]

我将负样本放在bg.txt文件下 

opencv3.3 级联分类器生成xml以及遇到的一些问题_第10张图片

opencv3.3 级联分类器生成xml以及遇到的一些问题_第11张图片


创建样本 直接上图


opencv3.3 级联分类器生成xml以及遇到的一些问题_第12张图片


这就是生成样本的exe,win+R 输入cmd  进入该路径


opencv3.3 级联分类器生成xml以及遇到的一些问题_第13张图片


可以看到相关的一些参数 -vec 后面跟着要存放的路径 -num指的是正样本数量 -w是输出样本的宽 -h是输出样本的高  这就上面提到的 为什么可以大小不相同 一定要相同比例的问题


opencv3.3 级联分类器生成xml以及遇到的一些问题_第14张图片


.vec文件生成 。


opencv3.3 级联分类器生成xml以及遇到的一些问题_第15张图片


在此注意 正样本.txt需要ANSI编码,那位群友使用的C#遍历文件夹图片 使用UNICODE编码,会出现如下内容:parse errorDone. Created 0 samples 据说-num数量不对也会出现该情况


opencv3.3 级联分类器生成xml以及遇到的一些问题_第16张图片




经测试 使用utf-8编码 会出现如下情况


opencv3.3 级联分类器生成xml以及遇到的一些问题_第17张图片



.vec文件创建后 就是训练分类器了



训练分类器


opencv3.3 级联分类器生成xml以及遇到的一些问题_第18张图片


由该程序来实现,opencv2.x应该是叫haartarining.exe opencv3.x将haar和lbp整合成一个,就是上面红框标注

和上面使用opencv_createsamples.exe相同 cmd 进入该目录




使用命令 -data 是存放训练好的分类器的路径 -vec 就是存放.vec的路径 -bg 负样本描述文件 -numPos 每一阶段训练的正样本数量  -numNeg 每一阶段训练的负样本数量 (网上说-numPos的参数要比实际正样本数量小,-numNeg 的参数要比实际负样本数量大 ,具体情况不太了解) -numStages 训练阶段数 (这个参数不能太大也不能太小 下面会说到) -featureType 选择LBP还是HAAR 在此选用LBP -w -h 训练样本尺寸 和vec生成的尺寸大小相同 不然会宕机 -minHitRate  最小命中率 -maxFalseAlarmRate 最大虚警率  这两个参数下面链接有说明 在此不多说

http://www.mamicode.com/info-detail-1724988.html

对了 提醒一下  如果 -featureType选择HAAR 需要在加上 -mode ALL 



然后就是回车 等待训练


opencv3.3 级联分类器生成xml以及遇到的一些问题_第19张图片


如果卡在POS这里 不要紧张 慢慢等待 我是等了十分钟左右才跳出 如果很久都没跳出 -numStages参数说明太大 改小一点 即可 当然 如果太小的话 生成的xml文档分类效果可能就不太好 


当出现如下提示  表示训练完毕



opencv3.3 级联分类器生成xml以及遇到的一些问题_第20张图片


然后就可以看到一个xml文档生成 , 底下的那个stage0.xml stage1.xml  params.xml是是每一阶段训练生成的xml,最终生成的cascade.xml 


训练过程会有很多问题 大家多尝试  正样本负样本最好 1:3 ,1:4   比如我正样本617个 负样本2300多个 


然后就是使用我们训练的xml文件了


opencv3.3 级联分类器生成xml以及遇到的一些问题_第21张图片

 

你可能感兴趣的:(新手,opencv,机器学习)