这个程序调用的是以下这个函数来训练分类器
cvCreateTreeCascadeClassifier(
dirname,
vecname,
bgname,
npos,
nneg,
nstages,
mem,
nsplits,
minhitrate,
maxfalsealarm,
weightfraction,
mode,
symmetric,
equalweights,
width,
height,
boosttype,
stumperror,
maxtreesplits,
minpos,
bg_vecfile );
这个可执行程序用来训练分类器,位于调用\opencv\build\common目录下,老版本的名字为haartraining.exe:
dirname:通过-data传入的目录名,用来存放训练好的分类器,如果不存在训练程序自行创建。
vecname:通过-vec传入的正样本.vec文件,由opencv_createsamples生成的统一尺寸的正样本集。
bgname: 通过-bg传入的负样本图片目录清单,
npos:通过-npos传入的每级分类器所需的正样本数目 。
nneg:通过-nneg传入的每组分类器所需的负样本数目,可以大于bgname文件清单中列出的负样本数目。
nstages:通过-nstages传入,想要训练的分类器的级数,每级是一个强分类器,每个强分类器又有若干弱分类器。
mem:通过-mem传入的预先计算的以MB为单位的可用内存。内存越大则训练的速度越快。
nsplits:通过-nsplits传入的每个弱分类器特征个数(一般为1) 。
minhitrate:通过-minhitrate传入,该参数决定分类器的每一级强分类器最小检测率, 默认0.995。具体实现就是针对每一个正样本累加这级强分类器的所有弱分类器的置信度,然后对所有正样本得到的累加置信度按从小到大排序,因为minhitrate决定至少要分对minhitrate*npos个正样本,所以取第(1.0-minhitrate)*npos正样本的置信度为这级强分类器的阈值,通过这个阈值将大于这个阈值的分为正类,否则分为负类。所以minhitrate这个值决定每级分类器的正样本的正检率,总的正检率为minhitrate^nstages。
maxfalsealarm:通过-maxfalsealarm传入,决定了分类器的每一级强分类器的分负样本分错的最大比例,它决定了该强分类器的弱分类器的个数。默认0.5。它具体的实现是,前面通过minhitrate参数与弱分类器的置信度累加和,得到了该强分类器的阈值后,通过这个阈值来分类负样本,负样本的分错个数不能超过numneg*maxfalsealarm,如果超过则继续训练本级强分类器,增加新弱分类器直到的阈值将负样本分错个数小于numneg*maxfalsealarm为止就跳出循环,那本级强分类器训练成功。
weightfraction:通过-weighttrimming传入,在每级强分类器的训练中每训练一个弱分类器前将所有样本中,包括正样本与负样本,按权重从小到大排列将权重最低的weightfraction*(npos+nneg)的样本去除掉,因为权重很小说明这个样本总能被正确分类了,删除这些已经能正确分类的样本,让训练更多集中于还不能正确分类的样本上,提高训练效率。默认为0.95。
mode:通过-mode传入,它指出了训练时用哪些模板haar特征,有三个枚举值,mode==0表示Viola提出的原始矩形特征,mode==1表示所有垂直的haar特征,mode==2表示所有特征。默认为0。
symmetric:通过-sym或-nonsym传入,它指出了正样本是否垂直对称。
equalweights:通过-eqw传入,如果有-ewq则equalweights值为1.否则默认为0。1表示所有样本的初始化权重相等,0表示不等。
width:通过-w传入,指出正样本的宽
height:通过-h传入,指出正样本的高
boosttype:通过-bt传入,分为四类值{ “DAB”, “RAB”, “LB”, “GAB” } :0 - Discrete AdaBoost ,1 - Real AdaBoost ,2 - LogitBoost ,3 - Gentle AdaBoost 分别代表4个应用的boost算法的种类,默认为Gab
stumperror:通过-err传入,它指出了四种在训练弱分类器时的计算阈值方法:1.misclass 2.gini 3.entropy 4.least sum of squares。
maxtreesplits: 通过-maxtreesplits传入,表示树节点数的最大值。一般为0。
minpos:能过-minpos传入,训练过程中,节点可使用的正样本数目。正样本根据节点被分类,通常来说,minpos不小于npos / nsplits
bg_vecfile:通过-bg-vecfile传入,如果有参数-bg-vecfile传入表示其值为true,则表示负样本与正样本类似是.vec文件的形式传入,否则负样本是以图片路径清单形式传入,它决定了读取负样本的形式。
感谢:::::
http://blog.csdn.net/xidianzhimeng/article/details/10470839
http://blog.csdn.net/xidianzhimeng/article/details/42147601
http://www.cnblogs.com/chensheng-zhou/p/5542887.html
http://blog.sina.com.cn/s/blog_5f853eb10100sdgn.html
http://blog.csdn.net/ding977921830/article/details/46723027
http://blog.csdn.net/u011583927/article/details/44892249