首先,网上有很多网页都有说的,本文章就简述,主要详细讲解可能遇到的一些问题。
训练流程如下:
1.只做样本,肯定分为正样本和负样本,样本制作好以后,还要进行一些处理才能进行下一步,否则会出各种问题。
(a.样本要进行灰度化处理,批量灰度处理的程序可以到这里去下载,可能要自己改一下程序里面的图片路径:http://download.csdn.net/detail/u013419097/9684234;
b.我用的opencv版本是2.4.10,电脑是64位的,之前我一直用x64里面的exe结果不行,然后换成x86位的就解决了程序根本运行不了的问题。
c.用haartraining.exe训练要记得把图片归一化也就是统一图片尺寸到一个比较小的值,我原本宽和高设的是100x200,结果就会报错,后来改成25x50就可以了,否则就会出现下面的问题:
)
2.第二步,在正负样本文件夹下面生成对应的data文件。
注意:正负样本文件夹都要操作的步骤:完成上面后,分别打开.data文件,运用查找功能,去掉.data文件里面的.data那一行。ps对于正样本的.data文件,还要将里面的jpg替换成jpg 1 0 0 25 50(按照自己的尺寸设)。
3.生成vec文件。
返回到放exe和正负样本的文件夹下(ps:要把exe和正负样本文件夹放在同一个目录下。)
然后在cmd下面cd 到改目录,接着输入指令:opencv_createsamples.exe -info pos\positive.data -vec pos.vec -bg neg\negative.data -num 1822 -w 25 -h 50(1822是我的正样本数)。
如果你出现下面的错误:
那就代表你的vec没创成功,你要检查一下你的正样本的jpg 有没替换成 jpg 1 0 0 25 50.如果成功了,会出现像下图那样:
4.可以开始运行opencv_haartraining.exe开始训练了。在刚才cd到的文件夹的地方,在终端输入:opencv_haartraining.exe -data xml -vec pos.vec -bg neg/negative.data -nstages 20 -nsplits 2 -minhitrate 0.999 -maxfalsealarm 0.5 -npos 1822 -nneg 4600 -w 25 -h 50 -mem 1024 -mode ALL
注意:xml:这个是放结果的文件夹,你要在exe相同文件夹下面自己建一个,可以自己随便命名。
4600:这个是负样本数,可以大于实际样本。在用traincascade.exe训练的时候发现这个不能比正样本数大,这个数目以及-npos后的数在用traincascade.exe的时候要用一个公式计算,具体见:http://blog.csdn.net/u013419097/article/details/53186316,
最后开始训练了: