我无法将经过训练的 SVM 保存到 xml 文件中。这是我的错误:
OpenCV 错误:read_params,文件 /Users/build/test/opencv/modules/ml/src/svm.cpp,第 2050 行 libc++abi.dylib 中的解析错误(缺少无效的 SVM 类型):以未捕获的类型异常终止cv::Exception: /Users/build/test/opencv/modules/ml/src/svm.cpp:2050: error: (-212) 在函数 read_params 中缺少无效的 SVM 类型
我该怎么办...
- (void)saveSVM {
string oFileName = "NormParameters.xml";
svm->save(oFileName);
}
- (BOOL)loadSVM {
string oFileName = "NormParameters.xml";
svm = StatModel::load<SVM>(oFileName);
NSLog(@"COUNT: %d", svm->getVarCount());
if (svm->getVarCount() > 0) {
return YES;
}
return NO;
}
如果我得到一个新的样本,SVM 每次都会被保存。经过训练的 SVM 的加载发生在 initWithParams() 中。
- (id)initWithParams {
self = [super init];
if (self) {
// create and set SVM parameters
SVM::Params param = SVM::Params();
param.svmType = SVM::EPS_SVR; // Support Vector Regression. The distance between feature vectors from the training set and the fitting hyper-plane must be less than p. For outliers the penalty multiplier C is used.
param.kernelType = SVM::RBF; //Polynomial kernel
param.degree = 3.0; // for poly
param.gamma = 1.0; // for poly/rbf/sigmoid
param.coef0 = 0.0; // for poly/sigmoid
param.C = 256.0; // for CV_SVM_C_SVC, CV_SVM_EPS_SVR and CV_SVM_NU_SVR
param.nu = 0.1; // for CV_SVM_NU_SVC, CV_SVM_ONE_CLASS, and CV_SVM_NU_SVR
param.p = 0.00390625; // for CV_SVM_EPS_SVR
param.classWeights = NULL; // for CV_SVM_C_SVC
param.termCrit.type = CV_TERMCRIT_EPS | CV_TERMCRIT_ITER; // CV_TERMCRIT_EPS + CV_TERMCRIT_ITER
param.termCrit.maxCount = 1000;
param.termCrit.epsilon = 0.00390625; //1e-6;
// create SVM
svm = SVM::create(param);
// load svm
[self loadSVM];
// create trained data
trainedDataMat = [[MLDataMatrix alloc] init];
[trainedDataMat removeDataRow];
}
return self;
}
我是 OpenCV 的新手,可能是我设置了错误的参数(我都玩过)或者 StatModel::load 在 iOS 8.3 下不起作用?如果您知道另一种将 SVM 保存到文件的方法,请也告诉我...谢谢您的每一个回答!