目录结构
—数据
—–posdata(正样本存放)
—–negdata(负样本存放)
—–xml(分类器存放)
—–posdata.txt(第三步生成)
—–negdata.txt(第三步生成)
—–pos.vec(第四步生成)
(1)准备正样本
正样本图片是自己所检测的目标物体,故越多越好,样本间的差异越大越好。统一化大小,推荐使用20x20,处理较快。根据需要对图片进行预处理,如灰度处理等。
(2)准备负样本
负样本是正样本的背景图片,可以是任意无关的物体及背景。但也不是随意选取,最好是项目所处的环境的背景图。负样本的大小要比正样本大。
正负样本数量1:3
(3)创建样本路径及描述
3.1 进入posdata目录下,创建文本文件编辑,并更名为批处理文件XXX.bat。
内容如下:dir /b/s/p/w *.jpg > 样本描述文件.txt
双击该批处理文件,生成样本描述文件.txt
。将其剪切到上级目录下,更名为posdata.txt。
打开该文件,替换“jpg”为”jpg 1 0 0 20 20”
其中1为该文件代表的文件数量,left top(坐标原点?) width height(宽度长度,即像素20 20),
3.2进入negdata目录下,如上创建描述文件,但不用进行替换。
(4)创建正样本文件pos.vec
进入/数据目录,打开CMD,首先确保opencv已经在path路径中,输入: opencv_createsamples -info posdata.txt -vec pos.vec -num 600 -w 20 -h 20
其中info为正样本描述文件(路径 大小),-vec是生成的pos.vec文件,-num是正样本的数量,即posdata每个路径后面的1相加的和,-w -h就是像素的宽和高。
回车生成pos.vec
(5)分类
对于Opencv3.2已经放弃了haartraining文件,取而代之的是”opencv_traincascade.exe”,参数如下:
- data 训练的分类器的存储目录
- vec 正样本文件,由open_createsamples.exe生成,正样本文件后缀名为.vec
- bg 负样本说明文件,主要包含负样本文件所在的目录及负样本文件名即刚才的negdata.txt
- numPos 每级分类器训练时所用到的正样本数目,应小于vec文件中正样本的数目,具体数目限制条件为:numPos+(numStages-1)numPos(1-minHitRate)<=vec文件中正样本的数目
- numNeg 每级分类器训练时所用到的负样本数目,可以大于-bg指定的图片数目
- numStages 训练分类器的级数,强分类器的个数
- precalcValBufSize 缓存大小,用于存储预先计算的特征值,单位MB
- precalcIdxBufSize 缓存大小,用于存储预先计算的特征索引,单位MB
- baseFormatSave 仅在使用Haar特征时有效,如果指定,级联分类器将以老格式存储
- numThreads 线程数
——级联参数—— - stageType 级联类型,目前只能取BOOST 默认
- featureType 训练使用的特征类型,目前支持的特征有Haar,LBP和HOG
- w 训练的正样本的宽度,Haar特征的w和h一般为20,LBP特征的w和h一般为24,HOG特征的w和h一般为64
- h 训练的正样本的高
——BOOST参数—— - bt 训练分类器采用的Adaboost类型,Adaboost分为Getle Adaboost,Real Adaboost,Discrete Adaboost,Logit Adaboost,训练中默认采用Getle Adaboost
- minHitRate
影响每个强分类器阈值,每一级分类器最小命中率,表示每一级强分类器对正样本的的分类准确率 - maxFalseAlarm
最大虚警率,影响弱分类器的阈值,表示每个弱分类器将负样本误分为正样本的比例,一般默认值为0.5 - weightTrimRate
0-1之间的阈值,影响参与训练的样本,样本权重更新排序后(从小到大),从前面累计权重小于(1-weightTrimRate)的样本将不参与下一次训练,一般默认值为0.95 - maxDepth
每一个弱分类器决策树的深度,默认是1,是二叉树(stumps),只使用一个特征。 - maxWeakCount
每级强分类器中弱分类器的最大个数,当FA降不到指定的maxFalseAlarm时可以通过指定最大弱分类器个数停止单个强分类器
——Haar特征参数—— - mode
值为BASIC、CORE、ALL三种,根据值不同采用不同的Haar特征,BASIC是基本的Haar特征,CORE是所有的上下Haar特征,ALL是使用所有的Haar特征
——LBP特征参数—— - LBP特征,CvLBPFeatureParams继承于CvFeatureParams
无参数
——HOG特征参数—— - HOG特征,CvHOGFeatureParams继承于CvFeatureParams
无参数
输入: opencv_traincascade -data xml -vec pos.vec -bg negdata.txt -numPos 100 -numNeg 300 -numStages 20 -featureType HAAR -w 20 -h 20
回车即可生成xml形式的分类器。在Opencv中直接加载该文件即可。