Step1:准备训练样本
训练样本的准备包括正样本和负样本。
正样本就是你要检测的物体图片,比如身份证识别中的国徽。负样本原则上是国徽以外的任何物体都行,这是网上教程所说的,但是实际上,负样本是每一级级联分类器自身调参优化的依据。也就是说,单级分类器的目的是寻找一组参数,让所有的正样本都通过该级分类器,只让少数不可区分开的负样本通过,到下一级分类器的时候再增加特征数目以寻求把所有负样本都kill掉,如果无法做到kill所有负样本,就增加特征进入下一级分类器。所以负样本的选取如果没有迷惑性,训练出来的分类器可能只有1级或者2级(虽然你可能预先设定了12级,但训练还有一个终止条件,就是所有的正负样本都正确地区分开),这样的效果就不是很好。最好的方法是先选取一些负样本训练出分类器,然后使用该分类器去检测,把误判的区域做成负样本重新训练。
网上的教程对正负样本的数量以及他们之间的数量比例都有一定要求,其实opencv自带的引擎对正负样本的数量倒是没有硬性规定,但是如果负样本的数目不足,或者差异性太小甚至全部相同,容易卡在一个死循环里出不来(这是opencv分类器训练引擎自己代码的问题http://blog.sina.com.cn/s/blog_75e063c10100za53.html)。所以...
训练样本要求:
1)灰度图!灰度图!灰度图!重要的事情说三遍!正负样本都是!不然就assert报错咯!
2)正样本大小要统一!比如30*30,不统一就报错!但是如果正样本太大的话,训练的过程就会耗时较长!负样本没有大小的要求
3)负样本最好不要重复,重复就是在做无用功
4)数量没有要求,但别太少,正样本至少50+吧,负样本应该更多,我用了200张左右
Step2:备齐所需文件