-
前言
emmm,之前写了一篇使用OpenCV处理图像数据的文章,前段时间也用OpenCV haar训练过一个识别门把手的分类器,写一篇博客来记录一下操作过程和其中一些参数的理解。
食用环境
- python3.7
- OpenCV 3.4.6(注意:好像更高版本的OpenCV发行版中取消了haar分类器的可执行文件。)
- Windows10 1903 LTSC
- 文件目录
- 根目录下还包括OpenCV的分类器训练程序:opencv_traincascade.exe等。
- classifier,temp都是用来存放训练好的xml分类器。
- images文件夹好像没有用处。
- negative,positive文件夹分别放处理好的负,正样本文件,我使用的正样本是32x32的灰度图,负样本是48x64的背景图。
食用步骤
- 运行negTxtGen.py和posTxtGen.py,分别生成正负样本的文件路径,输出到txt中。
- 终端cd到工作根目录下,执行
./opencv_creatsamples.exe -info positives.txt -vec pos.vec -num 你的正样本数量 -w 你的正样本宽度 -h 你的正样本高度
得到pos.vec即正样本的向量。
- 同样在工作目录下,终端执行
./opencv_traincascade.exe -data 输出训练结果的文件夹 -vec pos.vec -bg 你的负样本路径文件,如negatives.txt -numPos 正样本数量 -numNeg 负样本数量(可大于你的样本数) -numStages 训练层数 -w 同上 -h 同上 - maxFlaseAlarmRate 一般取0.9-0.995
得到训练的xml文件,即可在test.py中使用。
参数分析&一些问题
- 除了以上的参数之外,还有一些可选参数:
- precalcValBufSize:缓存大小,用于存储预先计算的特征值,单位MB
- precalcIdxBufSize:缓存大小,用于存储预先计算的特征索引,单位MB
- baseFormatSave:仅在使用Haar特征时有效,如果指定,级联分类器将以老格式存储
- 参数设置不当会遇到一些问题
- 训练时候卡住不动:minHitRate和maxfalsearmrate可能设置过高,或者你的负样本数量太少,或者负样本中已经没有特征点可以达到这样的参数要求,都会导致这个问题。
- 这里给出一个参数的设置参考公式,但是实际情况也还是需要自己尝试和调整:numPos+(numStages-1) x numPos x(1-minHitRate)<=正样本
- 报错:Train dataset for temp stage can not be filled. Branch training terminated.同样是参数问题,根据上述方法调整参数,或者调整样本即可。
Comments | 0 条评论