Opencv中Adaboost的具体实现及使用资料总结

来源:互联网 发布:上海 逛街 知乎 编辑:程序博客网 时间:2024/06/06 09:08

1.opencv级联分类器训练

opencv官方指南

opencv级联分类器训练

Tips:
1.opencv_createsamples可以根据需要通过图像处理生成更多正样本。
2.在利用opencv_traincascade进行训练时可适当提高precalcIdxBufSize和precalcValBufSize缓存大小,缓存越大,训练时间越短。
3.weightTrimRate:Specifies whether trimming should be used and its weight. 一个还不错的数值是0.95。影响参与训练的样本,不管是正样本还是负样本,当更新完样本权重之后,将样本权重按照从小到大的顺序排列,当从后累加样本权重不小于weightTrimWeight时前面的样本就不参与后面的训练了,这里有一个优化是等于该阈值的样本还是参与训练的,这样可以在保证训练精度的基础上缩短检测时间,因为我们认为是样本权重很小的时候表示该样本被正确分类了,而忽略了样本很多的时候,尽管样本没有被正确分类,也可能被排除在外了。还有一种情况就是正样本比例悬殊的时候,例如1:20,当正样本完全分类正确了,那么正样本比例总和仅占4.8%,后续参与训练的正样本可能就没有了

2.1 Haar特征详细介绍
Haar特征详细介绍
Tips:
1..在保存分类器的OpenCV XML文件中,每一个Haar特征都被保存在2~3个形如的标签中。
2.计算完相应的特征值后,还会检测窗口的灰度值及灰度值平方进行压缩特征值范围。

2.2 积分图和45°旋转积分图
积分图和45°旋转积分图
Tips:
Opencv对原积分图进行了“扩边”,积分图中第0行和第0列的值都为0。

2.3 级联分类器结构与XML文件含义
级联分类器结构与XML文件含义
Tips:
1.一个完整的弱分类器包括:
a.若干个Haar特征 + 和Haar特征数量相等的弱分类器阈值
b. 若干个leftValue
c. 若干个rightValue
2.弱分类器中的idx用法很精妙,注意体会!
3.一般来说,如果用用硬件实现则缩小图像更快,用软件实现算法则放大检测窗口更快?

2.4 利用并查集合并检测窗口(NMS)
利用并查集合并检测窗口(NMS)
Tips:
1.在partition函数中,体会nodes[root2][RANK] += rank == rank2(Line57)以及nodes[root][RANK] = ~nclasses++;(Line93)
思考:
使用并查集可以明显看出其算法复杂程度为o(n2),在实际应用中可以发现,其实有大量的检测框是重复的,即实际人脸数K《 检测框N!我们是否考虑在第二次循环时仅与每个集合的平均检测框进行匹配,匹配成功则更新这个集合的平均检测框数值,否则增加为新的集合,这样算法复杂度就为0(k*n).

2.5 AdaBoost之DAB与GAB
AdaBoost之DAB与GAB
Tips:
GAB和DAB有2处不同,解释如下:
1. DAB和GAB使用的分类器权重误差不一样,GAB是“weighted least-squares”,也就是上面的WSE。应该比较好理解。
2. DAB和GAB的弱分类器对样本xi的f(xi)不一样。DAB的f(xi)不是+1就是-1;而GAB的f(xi)输出的是一种类似于概率的值。

2.6 minHitRate与maxFalseAlarm
minHitRate与maxFalseAlarm
Tips:
1. 由于串联的stage数量很多,minHitRate必须非常接近1,才能保证最终检测器有较好的recall;
2. falseAlarmRate相当于对检测器的precision作了约束;
3. 相对于maxFalseAlarmRate,minHitRate更加敏感。

2.7 分类器训练过程
分类器训练过程
Tips:
整个分类器的训练过程可以分为以下几个步骤:
1. 寻找TP和FP作为训练样本
2. 计算每个Haar特征在当前权重下的Best split threshold+leftvalue+rightvalue,组成了一个个弱分类器
3. 通过WSE寻找最优的弱分类器
4. 更新权重
5. 按照minHitRate估计stageThreshold
6. 重复上述1-5步骤,直到falseAlarmRate到达要求,或弱分类器数量足够。停止循环,输出stage。
7. 进入下一个stage训练

2.8 代码分析
Opencv2.4.9源码分析——Cascade Classification(二)

原创粉丝点击