OpenCV级联分类器训练(二)——参数注解

紧接上一篇文章http://blog.csdn.net/xiao_lxl/article/details/44645969 OpenCV 级联分类器训练(一)——步骤和方法

级联分类器训练中命令行和训练过程中参数注释:

命令行:


-data: 指定生成的文件目录

-vec: vec文件名(.vec)

-bg: 负样本描述文件名(.dat)

-npos: 在每个阶段用来训练的正样本数目

-neg: 在每个阶段用来训练的负样本数目,这个值可以设置大于真正的负样本图像数目,因为程序会自动从负样本图像中切割出和正样本大小一致的图像块,这个参数一般设置为正样本数目的1~3倍。

-nstages:训练级数,推荐使用15~20,一般层数越高,耗时越长。

-mem: 程序可使用的内存,一般设为256即可。实际运行时一般不怎么占用内存,以MB为单位

-nonsym: 后面不用跟参数,用于指定目标对象是否垂直对称

-minhitrate:最小命中率,即训练目标的准确度。这里设为0.99。

-maxfalsealarm:最大虚警(误检率),每层训练到这个值小于0.5时结束,进入下一级训练。

-weighttrimming:指定是否使用权修正和使用多大的权修正,一般选择0.9.

-mode:all指定Harr类型,BASIC仅仅使用垂直特征,ALL使用垂直以及45度旋转特征

-w: 正样本图像的宽,训练样本的尺寸必须和训练样本创建的尺寸相同

-h: 正样本图像的高




注意:

1)最大虚警率-maxfalsealarm和最小命中率-minhitrate的设置的关联性。

系统首先根据命中率进行分类,然后计算虚警率,如果虚警率高于最大虚警率,则系统就抛弃该分类器,而建立下一个分类器。

虚警率和命中率是每阶训练产生的相应值级联,每阶训练结束后虚警率和命中率都会进行更新。


2)分类器训练过程中的阶数设置。训练的阶数的选择,根据提供的正负样本的数量进行设置。

如果正负样本较少,最好不要把阶数设置过大,这会使训练程序出错,训练不成功。

如果分类器效果不好,还可以在原来训练成果的分类器基础上,增加训练阶数接着进行训练,这样会使样本误判的概率下降。


3)正负样本比例问题:比例大约1:3的样子比较好,1:3或者1:4训练出来的分类器要优于1:1或者1:9,原因是正负样本比例接近时,对负样本的命中程度低(实际中负样本肯定远远多于正样本),正负样本比例较大(比如1:9)时,重视负样本的统计特性而忽略了正样本的统计特性,造成正样本权重总和小,当权重小于一定程度的时候可能很大一部分正样本都不参与训练了(在weightTrimRate=0.95时)。

4) minHitRate:分类器的每一级希望得到的最小检测率。总的检测率大约为minHitRate ^ numStages。影响每个强分类器阈值,当设置为0.95时如果正训练样本个数为12000个,那么其中的600个就很可能被判别为负样本,第二次选择的时候必须多选择后面的600个,按照这种规律我们为后面的每级多增加numPos*minHitRate个正样本,根据训练的级数可以得到如下公式

numPos+(numStages-1)*numPos*(1-minHitRate),即需要准备的训练正样本个数

5) maxFalseAlarm:分类器的每一级希望得到的最大误检率。总的误检率大约为maxFalseAlarm ^ numStages,.影响每个强分类器中弱分类器的个数,设置较大,每级可以滤除负样本的比例就较小,这样在测试过程中虚警率就较高;设置较小,每级强分类器中弱分类器的个数就较多,检测时间就会相对要长,在可以接受的检测时间下尽量降低maxFalseAlarm是我们要追求的目标

关于负样本的选择,因为每级剩下的负样本个数低于numNeg*maxFalseAlarm,在第二轮选择的时候从之前选择的负样本后面继续选择,而不是重头开始将选择过的负样本也包含进来,只有当遍历完一遍负样本列表后才重头在扫描一遍

6) weightTrimRate:影响参与训练的样本(不管是正样本还是负样本),当更新完样本权重之后,将样本权重按照从小到大的顺序排列,从后面开始累加样本权重大于weightTrimRate时,前面的样本就不参与后面的训练了

7) maxWeakCount:决定每级强分类器中弱分类器的最大个数,当FA降不到指定的maxFalseAlarm时可以通过指定最大弱分类器个数停止单个强分类器。

8) boost参数(maxDepth、bt):影响决策树构建的法则以及权重更新策略



训练过程中出现的dos窗口:


N: 训练层数

SMP: 样本占总样本个数

F:

ST.HR: 阈值

HR: 击中率

FA: 虚警,只有当每一层训练的FA低于你命令中设置的maxfalsealarm数值,才会进入下一级训练

EXP.ERR: 经验错误率

Parentnode:9 表示现在训练到第9级。


  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenCV是一个用于计算机视觉和机器学习的开源库,其中包含了许多功能强大的算法和工具。级联分类器是其中的一个重要功能,它可以用于目标检测和识别。 在训练级联分类器时,我们需要准备正样本。正样本是包含我们所关注目标的图像,比如人脸、车辆、文字等等。为了训练级联分类器,我们需要大量的正样本图像,这样才能让分类器具备更好的泛化能力。 训练级联分类器的过程可以分为以下几个步骤: 1. 收集正样本图像:我们可以通过各种方式来收集正样本图像,比如在网上下载、自己标注、从已有的数据集中提取等等。收集的正样本图像应该尽可能多样化,包含不同的姿势、光照条件、背景等等,以提高分类器的鲁棒性。 2. 创建样本描述文件:在训练级联分类器时,我们需要提供一个样本描述文件,用于描述每个样本图像的位置和标签。这个描述文件可以是一个XML文件,其中包含了每个样本图像的文件路径、位置和标签信息。 3. 训练级联分类器:在训练过程中,我们需要提供正样本图像和对应的样本描述文件,以及一些训练参数。通过迭代的方式,级联分类器会学习到目标的特征,并不断优化自身的分类能力。训练的过程通常需要较长的时间,特别是当样本数量较多时。 4. 评估和调优:在训练完成后,我们需要对训练得到的级联分类器进行评估。可以使用一部分已经标注好的测试图像来评估分类器的性能,计算准确率、召回率等指标。如果分类器的性能不理想,我们可以调整训练参数,或者增加更多的正样本进行训练,以提高分类器的性能。 通过以上步骤,我们可以利用OpenCV训练级联分类器,用于目标检测和识别任务。随着训练的迭代次数增加,分类器会逐渐提高自身的准确性和鲁棒性,从而更好地适应各种实际场景中的目标检测需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值