OpenCV 训练分类器生成XML文件【完整过程】

在网上找了好多相关信息,有几篇写的很好的:

http://blog.csdn.net/tyt2222008/article/details/5838389

http://www.jb51.cc/article/p-zlgbtpmd-za.html

http://www.jb51.cc/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
so i did following calcs:


vec-file has to contain >= (numPos + (numStages-1) * (1 - minHitRate) * numPos) + S

7000 >= (numPos + (20-1) * (1 - 0.999) * numPos) + 2973

(7000 - 2973)/(1 + 19*0.001) >= numPos

numPos <= 4027/1.019

numPos <= 3951 ~~ 3950

and used:

-npos 3950 -nneg 2973

It works.

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:\Users\rockyli\Desktop\expression\other\other.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

我也是初学者,望大神看到有什么错误的地方多多指教。

要是谁有什么不解的可以随时留言,大家一起交流才会更快的成长嘛。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇