博客第一弹 ---- opencv 基于hog特征训练二分类器
成为算法工程师的第一年,很感恩csdn众多博客对我的帮助,现在也想分享一些错误纠察和训练记录,一方面方便自己理清工作思路和进展,一方面为和我一样初始进入图像算法学习的人一点小帮助。
- 基于hog特征训练二分类器;
- 样本整理;
- 代码解读;
- 结果分析;
一 基于hog特征训练二分类器:
首先选择应用最广泛使用的hog特征来训练二分类器。HOG特征是通过计算和统计图像局部区域的梯度方向直方图来构成特征。有如下优点:
1 HOG是 在图像的局部方格单元(细胞单元)上操作,所以它对图像几何和光学的形变都能保持很好的不变性,这两种形变只会出现在更大的空间领域上。
2 在粗的空域抽样、精细 的方向抽样以及较强的局部光学归一化等条件下,只要目标大体上能够保持直立的姿势,可以容许目标有一些细微变化,这些细微的动作可以被忽略而不影响 检测效果。
3 具体的hog特征提取办法百度百科非常清楚。(附网址:https://baike.so.com/doc/25062397-26034415.html)
二 样本整理:
源码及教程网址:https://www.xuebuyuan.com/3180955.html 首先以上文中所附样本做了代码测试,验证识别没有问题,代码运行正常。后整理自己样本以供训练。
1 正样本 首先做了图像裁剪,得到只包含目标物体的样本集,可以不固定尺寸,后续在代码中resize,批处理生成包含所有正样本名称的pos.txt。待检图片比较大,检测窗口做了放大,128*128,其余参数以默认值进行。
2 负样本 同样裁剪的图片及neg.txt,我的目标模型是识别待检测物体是否包含某种属性。
我有两组样本,一组为手动标定框后随机裁剪的样本a(pos:111,neg:430),一组为固定图片位置裁剪样本b(不是很准确 pos:520,neg:1050)
三 代码解读:
上文的源码比较简单标注的也很清楚,训练中开始一直有opencv错误,一般是图片路径问题或者opencv的配置问题,需要细心更正为自己的路径。后来循环计算图像特征值时,记算一张就在结尾步的大括号处奔溃,一步一步注掉代码才发现是hog.compute 有问题,后来修改配置属性—c/c+±–代码生成—运行库为MDd问题消失。
配置opencv 主要是c/c++中附加包含目录中的include ,链接器常规中的连接器依赖项lib及输入的附加依赖项。
四 结果分析:
1 样本a训练及同样本测试:模型分类失败,所有样本都识别为负样本,猜测原因是样本过少导致。
2 样本b训练及同样本测试:模型分类成功,正样本401/520,负样本 993/1050. 正样本识别率77.12%
3 样本a+样本b训练及b样本测试: 模型分类成功,正样本372/520,负样本 1000/1050. 正样本识别率71.54%下降,负样本识别率增加。
样本a+样本b训练及同样本测试: 模型分类成功,正样本378/631,负样本 1430/1480. 正样本识别率59.90%下降,负样本识别率增加。
总结:准确样本的增加反而使训练结果变差,还需再分析,到底怎么样的样本更适合此属性分类。