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

opencv3.3版本训练自己的物体分类器

2018-01-09 11:04 351 查看

Opencv训练自己分类器

注:此文是我整理了网上的各方资料汇集而成,由于在实践中遇到了很多坑,所以把自己的成功训练的经验写下来做个笔记给大家做个参考

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:
负样本路径列表


posd
c350
ata.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

复制进去保存

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

 


然后双击traincascade.bat进行训练

说明:






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

 



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

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