opencv_traincascade检测物体的分类器正负样本怎样设置

关于数量如何设置,也可以理解为正负样本比例如何控制。首先明确一点,训练过程是增强分类器的功力,这就要求整个训练期间负样本不能动,不管总数还是内部的单个图片。以此为基础逐个stage去筛选过滤正样本。理论上是每个stage中,能区分60%以上的正样本即为合格。这被分对的60%正样本被丢弃,认错的40%连同新补充的正样本一起进入下一个stage。(反之筛选负样本同理)打个比方,有个电影叫《初恋50次》,但50次是同一个人。训练的50个stage(实际上不需要这么多stage)的正样本都不完全相同,上一任的经验几乎带不到下一任,所以有点像《搭讪50次》。参与训练的样本数量,提个建议仅供题主参考——正负样本数量相当。这也是我的经验,没有绝对的道理,但是想想会觉得很自然。具体多少数量没有的定论,不一定要达到数十万。两个问题也请题主思认真考下,这会决定样本的收集和取舍1:分类器需要适用于多大的场景?2:如何考虑样本之间冗余问题?
■网友
上图中Stage-6中FA(FalseAlarm,虚警率)为0,说明负样本已全部被正确分类了,也就不会有负样本继续参与下一轮的训练了,所以就卡住了,而我用的OpenCV-2.4.10版本,出现这种状况的时候会提示,Train dataset for temp stage can not be filled. Branch training terminated。详见,OpenCV样本训练经验 - PeakJin的博客 - CSDN博客处的tip5\u0026amp;tip6。
【opencv_traincascade检测物体的分类器正负样本怎样设置】 收集的原始负样本可以在和正样本相关的情况下尽量的多,但多的同时要尽量保证这些原始负样本的尺寸足够大(是正样本尺寸的许多倍,因为正样本的尺寸大小就是滑动窗口的尺寸大小),这样才会保证在训练的过程中一直有可用的能参与训练的负样本,也就不会出现FA为0的情况。记住numNeg和你收集到的原始负样本的数量间并没有多大联系,numNeg个训练用负样本会从尺寸足够大的原始负样本集上滑动和scale得到,但一定要尽量保持numPos:numNeg = 1:3,这样才能得到最优的训练效果。

■网友
谢邀首先我没用过opencv的traincascade,不过写过boosting训练卡住的话我觉得应该是负样本的数量不够,你3000正样本,4000负样本太少了,如果你观察训练过程就会发现,越到后面的stage对负样本的筛选就越难,可能需要数十万个负样本才能满足要求。
■网友
上一阶N=2时FA就到0了,HR还是1,用的正负样本是不是区分度太大了?正样本要有固定规则,负样本要丰富多样性,这应该不是设置的问题了,多找几个数据集扒负样本进去吧。

■网友
请问这个问题怎么解决的啊
■网友
你好,我也遇到了相同的问题,不过我用的是HAAR特特征。我发现问题是出在样本的数量和质量上,。不知道你发现没有,在出现卡住的上一个stage中,FA最终都为0了,也就是说对负样本的虚警率(每个弱分类器将负样本误分为正样本的比例)已经达到了0,可能是程序不再继续往下分类了。提高正样本和负样本的数量可以训练出更多的stage,但是具体的关系本人也没搞清楚,忘相互学习。


    推荐阅读