opencv_traincascade训练分类器

1. 训练分类器简介

有如下几个需要考虑的地方:

*准备正样本:

越多越好(场景相对固定的场景下,大约1000个样本较为合理)

*准备负样本:

分为两个类别,工作场景负样本,非工作场景负样本。两者比重约为1:2

*特征选择:

本次选择LBP特征,主要考虑因素是速度。

*分类器选择:

ADB

2重要步骤:

2.1 准备正样本:

工具:*labelImg:在图像中进行目标定位和打标

*cvt_xml:将xml文件描述转换为opencv的目标描述方式

*opencv_createsamples:通过样本图像和描述文档生成.vec样本文件


      1. LabelImg的使用:

建议文件存放结构为(专为转opencv样本描述文件,对于多类打标,不必要)

--pos_imgs

--pos_1

--pos_2

--..

--pos_n



labelImg会对每一张图生成一个同名的.xml文件。



2.1.2cvt_xml的使用:



分别设置如下信息:

对象类别名称, objName

存放xml文件的路径, pathName

生成描述文件的文件名,cvDsFileName


最终生成的文件方式如下:

*红色圈内是图像的文件名。

如图,img5.bmp

*蓝色方框是该图像中样本的个数。

如图,13,表示本图中有13个绿框对应的样本

*每个绿色框表示某一个样本的Rectangle,用四个数字表示x,y, w, h

如图,有3个绿框(一共有13个,其余的没有显示)


cvt_xml的源代码:https://github.com/seanXYZ/cvt_xml


2.1.3opencv_createsamples


Tips:

https://blog.csdn.net/sean_xyz/article/details/80002266

这篇博客较为清楚地描述了opencv_createsamples的用法和坑~

    1. 准备负样本:

负样本的重要性通常容易被忽略(海量正样本确实可以),其中一个需要注意的地方是,区分分类器的使用场所,如果是固定场景内,那么负样本最好加入一定数量场景内的图像,训练的时候总的负样本可以适当少一些。这样做最终不仅训练和检测速度快,而且准确度也比较高。

工具:

*Inpaint:图像修复工具,将场景图像中的目标去掉。

*resize:对负样本进行若干个尺度的缩放。


场景内负样本:

Inpaint处理后是使用inpaint 技术消除掉目标。

但这还是有些太麻烦,毕竟inpait运算量巨大。可以直接使用黑色块抹掉正目标。


场景外负样本:       

跟样本无关的都可以

    1. 训练:

opencv_traincascade -data result -vec pos1\t0.vec -bg ./bg_com/bg_com.txt -numPos 200-numNeg 15000 -numStages 12 -featureType LBP


基本常用参数意义如下:

-dataresult 存放训练的中间结果,参数以及最终结果

-vecpos1\t0.vec 正样本文件名

-bg./bg_com/bg_com.txt 负样本描述文件,负样本是通过随机数在图像中切出来的


-numPos200 正样本个数,不超过.vec的数量

-numNeg15000 负样本个数,通常比正样本高一两个数量级

-numStages12 级联分类器层数,单一场景下,通常7~8就可以得到比较好的结果了

-featureTypeLBP 特征选择,LBP速度优势明显


其他参数:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值