【问题标题】:Error: Floating Point exception in OpenCV, SVM train错误:OpenCV、SVM 训练中的浮点异常
【发布时间】:2016-01-28 22:46:22
【问题描述】:

我正在尝试使用 HOG 特征提取器的描述符值来训练 svm。

//pRow, nRow, pCol, nCol are positive and negative columns and rows.
Mat posneg_descriptor_mat( pRow + nRow, pCol, CV_32FC1 );

// data is descriptor values
memcpy(posneg_descriptor_mat.data, pMat.data, sizeof(float) * pMat.cols * pMat.rows );
int startP = sizeof(float) * pMat.cols * pMat.rows;
memcpy(&(posneg_descriptor_mat.data[ startP ]), nMat.data, sizeof(float) * nMat.cols * nMat.rows );
//data labeling
Mat labels( pRow + nRow, 1, CV_32FC1, Scalar(-1.0) );
    labels.rowRange( 0, pRow ) = Scalar( 1.0 );


Ptr<SVM> svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::LINEAR);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 10000, 1e-6));

Ptr<TrainData> td =TrainData::create(posneg_descriptor_mat, ROW_SAMPLE, labels);

当代码在错误(浮点异常(核心转储))下面的行时:

svm->trainAuto(td);

【问题讨论】:

  • 是这样吗? svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 10000, 1e-6));
  • 可能与问题没有直接关系,但您确实应该避免使用memcpy。使用正确安装的Mat 构造函数,不易出错。 @jas- 是的,形式上是正确的。但我看不到PN_Descriptor_mtx 的定义位置
  • 对不起,我忘了在这个地方更新变量名。现在更新了。
  • 你能在调试中运行并得到错误信息吗?
  • 是的,错误信息是:Program received signal SIGFPE, Arithmetic exception. 0x00007ffff7b94cfd in cv::ml::SVMImpl::trainAuto(cv::Ptr&lt;cv::ml::TrainData&gt; const&amp;, int, cv::ml::ParamGrid, cv::ml::ParamGrid, cv::ml::ParamGrid, cv::ml::ParamGrid, cv::ml::ParamGrid, cv::ml::ParamGrid, bool) () from /usr/local/lib/libopencv_ml.so.3.0 Single stepping until exit from function _ZN2cv2ml7SVMImpl9trainAutoERKNS_3PtrINS0_9TrainDataEEEiNS0_9ParamGridES7_S7_S7_S7_S7_b, which has no line number information.Program terminated with signal SIGFPE, Arithmetic exception. The program no longer exists.

标签: opencv svm opencv3.0


【解决方案1】:

CV_32FC1 更改为CV_32SC1 解决了这个问题。好像response 不能是float

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-04
    • 2015-07-25
    • 2016-06-25
    • 2015-04-18
    • 2015-01-22
    • 2014-04-23
    • 2015-06-12
    相关资源
    最近更新 更多