我在Visual Studio中使用openCV SVM。 (OpenCV 2.4.4.0)
我训练了它:
mySVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);
保存它:
mySVM.save("classifier.xml");
我正在加载它:
CvSVM mySVM1;
mySVM1.load("C:\classifier.xml");
mySVM1.predict(testingDataMat0,result0);
我想在其他项目中使用。但是当我尝试加载分类器时,这个错误一直在颠簸:
"Bad argument (The SVM should be trained first) in CvSVM::predict"
路径正确,并且.xml似乎已正确存储。
有人知道我做错了什么或问题出在哪里?
classifier.xml:
<?xml version="1.0"?>
<opencv_storage>
<my_svm type_id="opencv-ml-svm">
<svm_type>C_SVC</svm_type>
<kernel><type>RBF</type>
<gamma>5.0625000000000009e-001</gamma></kernel>
<C>2.5000000000000000e+000</C>
<term_criteria><epsilon>2.2204460492503131e-016</epsilon>
<iterations>100</iterations></term_criteria>
<var_all>3</var_all>
<var_count>3</var_count>
<class_count>2</class_count>
<class_labels type_id="opencv-matrix">
<rows>1</rows>
<cols>2</cols>
<dt>i</dt>
<data>
-1 1</data></class_labels>
<sv_total>10</sv_total>
<support_vectors>
<_>
9.09866020e-002 5.56291997e-001 2.43510995e-002</_>
<_>
9.46519971e-001 2.94328004e-001 2.08841003e-002</_>
<_>
1. 3.68389994e-001 1.15272999e-002</_>
<_>
9.41470027e-001 3.73109013e-001 1.25126000e-002</_>
<_>
1. 2.23776996e-001 9.57737025e-003</_>
<_>
4.68845010e-001 3.62690985e-002 9.11400989e-002</_>
<_>
7.98106015e-001 2.73550004e-002 9.26491022e-002</_>
<_>
7.02144980e-001 3.98130007e-002 9.00894031e-002</_>
<_>
4.99359012e-001 4.31513004e-002 8.61563012e-002</_>
<_>
7.39947975e-001 4.39946018e-002 9.60593969e-002</_></support_vectors>
<decision_functions>
<_>
<sv_count>10</sv_count>
<rho>-5.7845965027809154e-001</rho>
<alpha>
2.5000000000000000e+000 2.5000000000000000e+000
1.4641912158132706e+000 2.5000000000000000e+000
2.5000000000000000e+000 -1.4641912158132708e+000
-2.5000000000000000e+000 -2.5000000000000000e+000
-2.5000000000000000e+000 -2.5000000000000000e+000</alpha>
<index>
0 1 2 3 4 5 6 7 8 9</index></_></decision_functions></my_svm>
</opencv_storage>
答案 0 :(得分:0)
我遇到了这个问题并发现在SVM代码中,至少在OpenCV中,预测函数使用相同的内核,用于训练函数来确定输入类。因此,当您单独运行预测时,它不知道它应该使用哪种内核。因此,我认为在预测功能之前准确运行列车功能是可以避免的。