OpenCV 训练分类器生成XML文件【完整过程】
在网上找了好多相关信息,有几篇写的很好的: http://blog.csdn.net/tyt2222008/article/details/5838389 http://www.52php.cn/article/p-zlgbtpmd-za.html http://www.52php.cn/article/p-nhrijrjc-da.html 通过这几篇以及我之前的学习,将今天实践的过程分享一下: 首先再次说一下整体生成的流程: 1:收集需要训练的正、负样本。 2:对正样品归一化处理,负样本不处理,但是保证负像素尺寸 >=正样品像素尺寸(或者有的人也称作缩放处理,不过我感觉还是归一化处理比较好听)。 3:生成正、负样本描述文件。 4:样本训练。
详细总结: 1:收集样品。 刚开始仅仅是做个小实验,所以数量暂时不用太多,我选择的正样品是45个,负样品是60个,一般情况下负样品尽量比正样品多,毕竟当想寻找一个东西的时候,先找到其他东西的概率更大,如果负样品比正样品少,那么就会造成“卡死”始终不出结果(详细解释http://hi.baidu.com/spmno/item/039899fe88ea0e5dc9f337f9),要想详细计划一下正负样品的数量,这个网址里边(http://bbs.csdn.net/topics/390388465)最下边一段英文或许能够帮助你,我今天没有时间具体看了,明天再看。 今天看完了这个数量介绍,纠正我之前的错误,正样品貌似经过计算比负样品多: vec-file has to contain >= (numPos + (numStages-1) * (1 - minHitRate) * numPos) + S,where S is a count of samples from vec-file that can be recognized as background right away. 例子: It worked for me. I also had same problem,I was following the famous tutorial on HAAR training but wanted to try the newer training utility with -npos 7000 -nneg 2973
2:归一化处理。 这个是一个必要条件,当分类器在你想要检测的图片上寻找目标的时候,它不能所有位置、所有大小都各种乱找,那样一张图片的执行次数就会相当的巨大,而且如果正样品的大小不统一,那么彼此之间也就没有太大的可比性和联系性了,所谓归一化处理,就是让所有图片的像素尺寸一样,比如我的正样品全部是64*64像素的,处理方法,可以看看该大神的文章:http://www.cnblogs.com/tornadomeet/archive/2012/03/27/2420088.html 3:正负描述文件。 这个很简单,仅仅需要手动弄一下,用到了CMD的dir命令(详细http://blog.csdn.net/tyt2222008/article/details/5838389) 正:
跟这里一样,第一列表示图片的名字,第二列表示该图片中有多少个正样例,一般为1,如果有很多(比如在人群中有很多人脸),那么有多少个这个参数就写几,比如是K个,那么接下来就要有4*k个数据,也就是k组数据,每组数据是这样的:x y width height。 负: 仅仅需要图片名字,不需要参数: 4:训练。 首先需要创建正样例的文件:a.vec。 命令行:opencv_createsamples.exe -info C:/Users/rockyli/Desktop/expression/anger/info.txt -vec a.vec -num 45 -w 64 -h 64 之后,再执行个命令就哦了: opencv_haartraining.exe -data xml -vec a.vec -bg C:UsersrockyliDesktopexpressionotherother.txt -npos 45 -nneg 60 -nstages 4 -nsplits 1 -sym -w 64 -h 64 -mode all -mem 1024 结果:
由于样本数量以及质量很少、以及训练使用的参数设置,检测效果很一般:
我的文档可以在这下载:http://download.csdn.net/detail/duhaomin/5988683 我也是初学者,望大神看到有什么错误的地方多多指教。 要是谁有什么不解的可以随时留言,大家一起交流才会更快的成长嘛。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |