完成了准备正负样本的工作后,就可以在命令行中输入下面的命令:
这样便可以训练生成一个车辆级联分类器文件vehicleDetector.xml。
对于给定的正样本,设置不同的参数,可以得到不同的分类器。例如,对于给定的542个车辆正样本,分别设置下面3组参数进行训练,得到的反馈信息如下。
(1)级联分类器级数为5级,每级误检率为0.5,每级命中率为0.995,特征类型为HOG。
训练过程如下所示:
可以看到,所有的542个正样本中有531个均用于每一级的训练,每级使用的正样本数计算公式为number of positive samples=floor(totalPositiveSamples/(1+(5-1)*(1-0.995))=542/1.02=531;每级使用的负样本数,系统默认为正样本数的2倍,即1 062。参与训练的正样本数高的原因是设置的级数较小且每级误检率较高。
另外,此次训练在还未到5级时就结束了,这是因为第5级还未训练结束时,分类器的整体误检率已经达到0.027 216 8,小于设置的预期虚警率(0.5)5=0.031 25,已经满足要求,因此训练提前结束,此时得到的车辆级联分类器为4级,而不是先前指定的5级。(www.daowen.com)
(2)级联分类器级数为5级,每级误检率为0.1,每级命中率为0.995,特征类型为HOG。
本例在(1)的基础上,每级误检率由0.5降至0.1,其他参数保持不变,此时顺利训练到了第5级结束。由于每级误检率降低,因此其检测精度会提高,但相对的训练时间也会大大增加。训练过程如下所示:
(3)级联分类器为10级,每级误检率为0.1,每级命中率为0.995,特征类型为HOG。
本例在(2)的基础上,增加了级数至10级,其他参数保持不变,由计算公式可知,参与训练的正样本数相比于(1)、(2)进一步减少,而级数由5增加到10,这会使得整体误检率相比前面降低,训练的时间也更长。训练过程如下所示:
需要注意的是,负样本因子默认设置为2,即用于训练每级的负样本数为用于训练的正样本数的2倍,为1 036,但从第6级开始参与训练的负样本数变少了,第7级只有122个负样本参与训练。出现这种现象的原因是往后的级,训练时是按照上一级正样本被错分的部分作为负样本。随着级数的增加,整体误检率降低,即“正样本被错分”事件发生得越来越少,导致最终负样本数量不足正样本2倍的10%,即不满足训练要求的水平。因此无法对第8级进行训练,训练至第7级就已经结束。
此时得到的车辆级联分类器为7级,而不是先前指定的10级,所得到的整体误检率为(0.1)7,而不是预期的整体误检率(0.1)10。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。