问题一:这个问题是比较乌龙了。我的训练样本是两个类别,正确的情况下是生成一个决策函数,而我却得到了三个。运行总是出错。
因为由
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",我想只是治标不治本的方法吧。
另外,网上也提出一些注意事项,暂无测试。