您的位置:首页 > 运维架构

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

2018-02-08 14:35 316 查看

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

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

准备训练集
     首先 准备好训练集 正样本和负样本 (我做的是车牌识别  所以选取的正样本是车牌),
正样本放在positive文件夹下的img文件夹里(positive上面那个img文件夹存放的负样本,大家不要混淆了)






正样本的话 不需要相同大小 ,但是一定要相同比例 ,怕出问题的的就把正样本变成相同大小吧。我用的60*17的车牌图片
负样本的话,是指不包含正样本的其他任意图片,最好能有各种不同大小的不同场景的图片。



<
d799
/p>我将负样本放在img目录下



这个负样本是网上下的 相同大小 20*20 有点粗糙 大家不要学我 。。(最好是能有各种不同大小不同场景的!!)
样本准备好了 接下来生成路径
为正负样本生成描述文件:
 将文件夹下的图片遍历一遍 保存到txt文件里,可以用代码,也可以手动的复制粘贴路径写入txt。。
我用的java将文件夹下的图片遍历出来的 ,java代码在下面链接

资源链接



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





正样本用描述文件格式描述 如下
[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 表示宽高 




看这个红框代码 自己领悟
然后就是负样本的txt文件 负样本用集合文件格式描述

集合文件格式(collection file format)就是如下形的描述文件:[filename]我将负样本放在bg.txt文件下 




创建样本 直接上图



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



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



.vec文件生成 。



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



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



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

训练分类器



由该程序来实现,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 


然后就是回车 等待训练



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




然后就可以看到一个xml文档生成 , 底下的那个stage0.xml stage1.xml  params.xml是是每一阶段训练生成的xml,最终生成的cascade.xml 
训练过程会有很多问题 大家多尝试  正样本负样本最好 1:3 ,1:4   比如我正样本617个 负样本2300多个 
然后就是使用我们训练的xml文件了



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: