Opencv中Adaboost的具体实现及使用资料总结
2017-07-20 10:24
253 查看
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(二)
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(二)
相关文章推荐
- 龙芯一号开发板 使用资料 总结
- [转]水晶报表的使用经验和资料总结 [http://blog.csdn.net/coolsummer1980/archive/2006/09/30/1310588.aspx]
- 正则表达式实现资料验证的技术总结 (转)
- [转]正则表达式实现资料验证的技术总结
- 使用扩展HibernateDaoSupport实现分页技术总结
- 编写“使用Ajax实现三级级联菜单”中的错误总结
- V4L编程资料总结与课题实现规划
- 使用OpenCV实现运动背景的重建
- 使用dwr实现下拉框级联和js实现动态选择option的selected状态方法总结
- 正则表达式实现资料验证的技术总结
- 网络编程资料总结(四)----一种基于UDP协议实现P2P智能穿越NAT的方案
- 水晶报表的使用经验和资料总结
- 使用Google Code项目托管实现资料共享(转载)
- 正则表达式实现资料验证的技术总结
- 使用OpenCV实现运动背景的重建
- 使用dwr实现下拉框级联和js实现动态选择option的selected状态方法总结
- 龙芯一号开发板 使用资料 总结2
- OpenCV使用的一些经验总结
- 《第五章 隐藏具体实现》总结
- 正则表达式实现资料验证的技术总结