Opencv之级联分类器(二):训练自己的分类器

Opencv之级联分类器(二):训练自己的分类器


相信看完上一篇的大家伙,一定想赶紧的训练一个自己的分类器进行目标的检测识别,下面,就是大家想要的内容哦,赶紧学习吧。
续更上一篇,主要写怎样训练自己分类器,以及训练过程中出现的错误和注意事项

训练过程

opencv_createsamples.exe
opencv_traincascade.exe
opencv_world341.dll

新建一个文件夹,从安装目录下将以下放进去,并建立如图所示:
在这里插入图片描述

数据准备

众所周知,无论什么方法,训练自己的数据,需要有大量且高质量的样本,所以说前提是收集大量的数据,包括正样本、负样本,样本数量最好是1:2以上,我这里简单测试,10张自己鼠标的正样本和14张负样本,正样本必须统一尺寸大小,负样本尺寸无需修改,但要大于正样本尺寸且不能包含正样本,正样本我修改的是20*20,名字从1-10,统一格式可以使用看图王等软件进行批量修改,或者你可以自己写个函数批量修改。
第一步:正样本
将处理好的正样本放进pos文件夹
在pos中cmd运行dir /b >pos.dat,生成pos.dat
记事本打开pos.dat,将 bmp 替换为 bmp 1 0 0 20 20并将与图片路径无关的数据删除。
在这里插入图片描述

第二步:负样本
将负样本放进neg文件夹,
在neg中cmd运行dir /b >neg.dat,生成neg.dat
记事本打开neg.dat,将每张图片路径前加上neg/,并删除无关数据
在这里插入图片描述

生成vec

主目录下cmd运行,在pos目录下生成pos.vec
opencv_createsamples.exe -info pos\pos.dat -vec pos\pos.vec -num 10 -w 20 -h 20在这里插入图片描述

开始训练

主目录下cmd运行以下命令进行训练
opencv_traincascade.exe -data data -vec pos\pos.vec -bg neg\neg.dat -numPos 10 -numNeg 14 -numStage 15 -w 20 -h 20 -minHitRate 0.9999 -maxFalseAlarmRate 0.5 -mode ALL
训练过程每一层都会被保存在data文件夹下,当训练层数达到设定或者提示Required leaf false alarm rate achieved. Branch training terminated. 即虚警率已经达标 不再继续训练
即训练结束,最终结果为data下的cascade.xml。

在这里插入图片描述

结果分析

到此训练已经结束,把cascade.xml路径放进上一篇里的测试程序进行测试即可,我这里就十张图片,但最终也是出了测出了结果,吓的我一个激灵,上图给大家看看吧。
在这里插入图片描述

运行过程中的问题

说起来全都是泪啊,大家一定按照步骤一步一步的进行下去,该放哪放哪,等你深入理解了之后,就可以为所欲为了。一开始生成的neg.dat没有修改,每张图片的路径前没有加neg/,导致训练一直出现问题,卡了老半天
个人理解应该是训练时,运行cmd是在主目录下,然后路径的话是相对主目录的路径,所以需要加上neg/
误提示:
Train dataest for temp stage can not be filled.Branch training terminated.
Cascade classifier can’t be trained. Check the used training parameters.
在这里插入图片描述

发布了27 篇原创文章 · 获赞 17 · 访问量 4163

猜你喜欢

转载自blog.csdn.net/weixin_44747240/article/details/104124063