Cascade Opencv -- train new model

来源:互联网 发布:硕鼠一样的软件 编辑:程序博客网 时间:2024/05/29 07:26

前言

Haar与Adaboost结合即经典的VJ人脸检测,后续衍生很多特征如LBP、HOG、SURF同Cascade(即Adaboost)结合进行对象检测;Adaboost和Cascade的算法流程图如下两图描述:


opencv将参数存储于xml文件中,在检测时直接load即可;因为需要检测新的物体(电表中的某个螺丝),所以直接需要重新训练。

编译训练环境

unbuntu 13.04 32bit

opencv2.4.11

1. 准备

新建工作目录,./traincascade/

1.1 工具

编译opencv后,生成可执行文件,opencv_createsamples 和opencv_traincascade ,并复制到./traincascade/目录下。

1.2 样本

因正样本最后完全包含待检测对象,所以使用手动鼠标划取ROI。宽高约为sampSize=260*200;获得550个尺寸在posSize附近的图像,然后
标准化至sampSize;并存储于./traincascade/pos文件夹内。

反样本使用random方式,随机生成一定的反例(不包含待检测对象);宽高也为sampSize,并存储于neg文件夹内。

最后新建./traincascade/data文件夹用于存储训练后生成的cascade.xml

1.3 信息

正例信息,需要包含正例的目录文件名以及对象在图像中的位置,因为正例图像中全部为待检测对象,所以位置可以直接设定为0,0,width,height。

ls ./pos/*.jpg > metre.info

然后使用.jpg 1 0 0 260 200 替换.jpg

反例信息,仅需要包含反例的目录文件名

ls ./neg/*.jpg > bg.txt

2. 训练

2.1 生成 *.vec

opencv_createsamples -info metre.info -num 550 -w 65 -h 50 -vec metre.vec

-w,-h根据数据库中的数据来确定,此处为260*200缩小4倍,-num后的参数550为pos文件夹内正样本的最大数量。

2.2 生成*.xml

opencv_traincascade -data data -vec metre.vec -bg bg.txt -numStages 10 -nsplits 2 -minhitrate 0.999 -maxfalsealarm 0.5 -numPos 500 -numNeg 500 -w 65 -h 50
-numStages为cascade训练的层数,-numPos 500小于opencv_createsamples生成*.vec时的数目550,一般约定为0.9
最后生成的cascad.xml在data目录下。

3. 测试

使用opencv提供的人脸检测sample,载入xml,然后测试训练后得到的xml文件能否正常工作。

4. 总结

检测结果并不理想,所以就不在这里贴图了,需要进行参数修正和样本整理。另一种思路是继续研究latent svm即cascade dmp

参考

【1】 TRAINCASCADE AND CAR DETECTION USING OPENCV

【2】 Coding Robin

【3】 OpenCV haartraining

【4】 How to train cascade properly

【5】 about traincascade paremeters, samples, and other...

【6】 haar training OpenCV assertion failed










0 0
原创粉丝点击