在MATLAB中,计算机视觉工具箱(Computer Vision Toolbox)提供了一个trainCascade ObjectDetector函数来训练自定义分类器。函数的语法为:
function trainCascadeObjectDetector(name,pos_image,neg_image,varargin)
该函数的输入为:需保存的分类器名称(name)、正样本集(pos_image)和负样本集(neg_image),另外可以设置级联分类器级数(NumCascadeStages)、每级误检率(FalseAlarmRate)、每级命中率(TruePositiveRate)、检测特征类型(FeatureType)、负样本因子(NegativeSamplesFactor)和正样本归一化尺寸(ObjectTrainingSize),最终输出为分类器文件。
针对这些可选参数的设置,可以从以下几个方面考虑。
1.NumCascadeStages(级联分类器级数)
增加级数会使分类器更准确,但也会增加训练时间。级数越多,需要的训练图像越多,因为在每级,一定数量的正样本和负样本会被消除。
2.FeatureType(检测特征类型)
特征类型会影响训练时长,通常使用Haar特征要比使用LBP或HOG特征花费更长的训练时间。
3.ObjectTrainingSize(正样本归一化尺寸)
正样本归一化尺寸过小,容易造成特征缺失;正样本归一化尺寸过大,容易增加训练时长。
4.NegativeSamplesFactor(负样本因子)(www.daowen.com)
每级使用的负样本数=NegativeSamplesFactor×[该级使用的正样本数],通常负样本因子默认为2。
只要用于训练某一阶段的负样本数大于计算得出的负样本数的10%,训练就继续进行。
5.FalseAlarmRate(每级误检率)
较低的误检率值增加了每级的复杂性,增加复杂性可以实现更少的错误检测,但可能导致更长的训练和检测时间。而较高的误检率值则可能需要更多的级数才能达到合理的检测精度。
6.TruePositiveRate(每级命中率)
较高的命中率值增加了每级的复杂性,增加的复杂性可以实现更多的正确检测,但可能导致更长的训练和检测时间。
通过上述对每级误检率和每级命中率的介绍,可知在级联分类器中,假设各个强分类器的检测命中率为p1,p2,…,pM,误检率为r1,r2,…,rM,由于各强分类器以串联的形式排列,因此最终的检测命中率为∏1<i<M pi,最终误检率为∏1<i<M ri。若某一级联分类器有10级,每级的命中率为0.995,误检率为0.5,则经过10个强分类器,最终命中率为0.99510=0.95,误检率为0.510=0.000 9。
另外,trainCascadeObjectDetector函数能够自动计算训练每级的正样本的数量,该数目基于用户提供的正样本总数以及每级命中率(TruePositiveRate)和级数(NumCascadeStages)的值,具体公式如下:
只要用于训练某一阶段的正样本数大于式(2-14)计算得出的样本数的10%,训练就继续进行。如果没有足够的正样本,训练就会停止,函数会发出警告。如果训练停止,可以选择添加更多的正样本、增加每级命中率或是减少级数,但级数的减少也会导致较高的整体误检率。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。