OpenCV3.1 SVM+HOG训练经验总结

问题一:这个问题是比较乌龙了。我的训练样本是两个类别,正确的情况下是生成一个决策函数,而我却得到了三个。运行总是出错。
                因为由 getDecisionFunction(0,svm_alpha,svm_svidx) 得到的svm_alpha出错,导致矩阵维数不能对齐 ;
原因:
        我实际负样本数是5339,我却误写为5341,导致给标识和特征的矩阵多出两行,而程序默认赋值为0,所以我本来只有-1和1两类,最终生成了-1,0,1两类。
       不能再马虎了,耽误自己的时间,还搞得心情郁闷。

问题二:在 hog_test.setSVMDetector(vec)处出现断言错误。
原因:
        特征维数与OpenCV根据HOG块大小计算出的值不匹配。默认的HOG初始参数是 hog(Size(64,128),Size(16,16),Size(8,8),Size(8,8),9) ,特征维数3780。而我改为了 hog(Size(64,64),Size(16,16),Size(8,8),Size(8,8),9),特征维数1764。而在初始化定义时我用了 HOGDescriptor hog_test;使用了默认参数初始化,导致维数不匹配,改为 HOGDescriptor hog_test(Size(64,64),Size(16,16),Size(8,8),Size(8,8),9)即可。
    网上也有说 把configuration properties -> general -> platform toolset 改为"v90",我想只是治标不治本的方法吧。

另外,网上也提出一些注意事项,暂无测试。

1.注意必须使用线性SVM进行训练,因为HogDescriptor检测函数只支持线性检测!!!

2. 注意因为svm.predict使用的是alpha*sv*another-rho,如果为负的话则认为是正样本,在HOG的检测函数中,使用rho+alpha*sv*another如果为正的话是正样本,所以需要将后者变为负数之后保存起来.
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值