gpt4 book ai didi

matlab - 如何在 mexopencv 中保存 svm 文件

转载 作者:太空宇宙 更新时间:2023-11-03 21:37:03 24 4
gpt4 key购买 nike

所以,我要训练一个分类器,需要将分类器的结果保存在 mexopencv 中。

hello  = cv.SVM;
hello.save('foo.xml')

我的 Matlab 编译器由于段错误而崩溃。 As far as I know这应该是 OpenCV 中的方式。有没有其他方法可以将通过 SVM 训练的文件保存在 mexopencv 中;或者这与 Matlab 文件写入选项有关。谢谢。

最佳答案

这实际上是 OpenCV 本身的错误,而不是 mexopencv。你应该report it ...

这是重现错误的最小 C++ 程序:

#include "opencv2/opencv.hpp"
#include "opencv2/ml/ml.hpp"
using namespace cv;

int main()
{
Ptr<SVM> svm = new SVM();
svm->save("svm.xml");

return 0;
}

在调试器下运行它,我 located违规代码:

df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1;
df = decision_func;

cvStartWriteStruct( fs, "decision_functions", CV_NODE_SEQ );
for( i = 0; i < df_count; i++ )
{
int sv_count = df[i].sv_count;
...
}

此时SVM模型是未经训练的,df是一个未初始化的指针。 class_count 等于 0,但 df_count 设置为 1,因此 df[i](i=0)导致访问冲突...

我认为这可以修复为:

df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1;
if (class_count == 0) df_count = 0;

在调试过程中将df_count更改为0,程序运行正常,我得到以下XML文件:

支持向量机.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>1.</gamma>
</kernel>
<C>1.</C>
<term_criteria>
<epsilon>1.1920928955078125e-007</epsilon>
<iterations>1000</iterations>
</term_criteria>
<var_all>0</var_all>
<var_count>0</var_count>
<sv_total>0</sv_total>
<support_vectors></support_vectors>
<decision_functions></decision_functions>
</my_svm>
</opencv_storage>

现在,您可以通过先训练模型,然后再将其保存到文件来避免该错误:)

关于matlab - 如何在 mexopencv 中保存 svm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20784648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com