opencv ---- opencv_haartraining 训练目标检测模型

opencv ---- opencv_haartraining 训练目标检测模型

1 样本整理
2 训练参数解读
3 测试demo书写

一 目标检测样本整理

1 使用labelimg 标注目标图像的label文件(附labelimg配置文件及教程网址:https://blog.csdn.net/mzpmzk/article/details/78287099)
2 裁剪只包含目标的图片作为正样本,通过计算iou>0.65确定为正样本(可参考mtcnn中 样本生成的方法得到正负局部样本集),还通过调整iou阈值得到一组更准确的训练样本。 两组样本分别进行训练比较结果。
3 正样本vec文件生成:先生成只包含 图像名+1+0+0+size_w+size_h的pos.txt文件 使用opencv_createsamples.exe生成正样本描述vec文件,(详细教程:https://blog.csdn.net/ding977921830/article/details/45914137)
4 负样本只需要neg.txt (绝对路径或者相对路径均可)

opencv_haartraining.exe一定要放在负样本目录下,才能正常开始训练

二 训练参数解读

Usage: opencv_haartraining.exe
-data
-vec
-bg
[-bg-vecfile]
[-npos ]
[-nneg ]
[-nstages ]
[-nsplits ]
[-mem ]
[-sym (default)] [-nonsym]
[-minhitrate ]
[-maxfalsealarm ]
[-weighttrimming ]
[-eqw]
[-mode ]
[-w ]
[-h ]
[-bt ]
[-err ]
[-maxtreesplits ]
[-minpos ]
我指定的参数如下:
-data 生成模型的存放地址,训练完成后有同名的xml文件和对应文件夹,文件夹为训练中途突然断掉,后重启继续训练提供之前的训练文件
-vec 正样本vec 文件的路径
-bg 负样本文件的路径
-npos 正样本个数(少于准备的正样本数,最好为全样本数的2/3,训练过程中会剔除不合格的样本,使样本数量逐渐减少)
-nneg 负样本个数 (之前的训练让我觉得 正:负=1:4时比较好,避免模型过拟合)
-nstages 训练层数定义 默认14,(我没有gpu用16层训了一次,,慢到你怀疑人生)
-mem 内存设置,我设置了2048
-w -h 为样本宽高。(不定义参数按默认值进行训练)

三 测试demo及结果分析

首先用小样本(pos 150,neg 250)训了一版目标检测的模型,然后就是调试测试demo了,,,由于变成能力一般,我还是先从网上down了一个基本的检测源码:(http://www.cnblogs.com/mengdd/archive/2012/08/01/2619043.html)
1 出现了无数次模型导入错误的问题,按上文方式没有问题。
2 cvHaarDetectObjects中参数设置问题,我主要修改了待检测的最小尺寸,上模型检测过拟合,只有一个目标的图片会检测出40多个框,后改size之后约束了一下,只检测到四五个,只是为了测试demo结果,后续还应等剩下两组训练完成后测试。组a(pos:300,neg:5000) 组b(pos:2000,neg:10000)

你可能感兴趣的:(opencv)