我正在OpenCV中使用Visual Studio 2010,C ++,SVM构建OCR应用程序。当我使用181种不同的标签训练SVM时可以正常,但是当超过181种标签时它会失败。下面是IDE和OpenCV错误消息和我的代码。请帮帮我,非常感谢你!
IDE错误消息
OCR.exe中0x771e4b32的第一次机会异常:Microsoft C ++ 异常:cv ::内存位置0x0081da74的异常。线程 'Win32 Thread'(0xdac)已退出,代码为-1073741510(0xc000013a)。 程序'[2512] OCR.exe:Native'已退出,代码为-1073741510 (0xc000013a)。
OpenCV错误消息
...... \ src \ opencv \ modules \ core \ src \ datastructs.cpp:332:错误:( - 211) 请求的大小是负数还是太大
SVM的配置
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);
SVM.train( training_vectors, training_labels, cv::Mat(), cv::Mat(), params );
答案 0 :(得分:2)
libSVM
使用“one vs all”技术来表示使用二进制SVM分类器的多类问题。这意味着,如果您有N
(>2
)个标签,libSVM将生成N
个不同的分类器,每个分类器都有不同的数据标签(因此它表示“one vs all”方案)。这可能会导致您遇到的内存问题。一些其他模型,例如神经网络或knn,可以代表没有这种开销的多类分类。因此,如果您的数据很大,以libsvm的方式处理它,您至少有三种可能的选择: