我正在使用opencv的svm对两种图片进行分类。 旧项目基于opencv2.4.9,neg样本和pos样本均具有10000。 svm的参数,例如:
CvSVM *svm;
svm = new CvSVM;
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 1000, 1e-7);
params.C = 120;
svm->train(*trainHist, *labelsMat, Mat(), Mat(), params );
svm->save(modeName.c_str());
保存的模型大小约为550KB。
现在opencv升级到3.4.2, 所以我重写了火车代码,例如
Ptr<SVM> svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::LINEAR);
svm->setC(120);
svm->setTermCriteria(cvTermCriteria(CV_TERMCRIT_ITER, 1000, 1e-7));
Ptr<TrainData> tdata = TrainData::create(*trainHist, ROW_SAMPLE, *labelsMat);
svm->train(tdata);
svm->save(modeName);
我只选择neg和pos对这400张图片进行采样,那么保存的模型文件将近100MB,似乎比opencv2的模型文件大得多。
我很好奇为什么参数相同,但模型却有很大差异? 有什么需要做的额外设置吗?