【问题标题】:OpenCV random forest CvRTrees errorOpenCV 随机森林 CvRTrees 错误
【发布时间】:2013-12-03 04:24:39
【问题描述】:

我在 OpenCV 中使用随机森林时遇到了这个错误:

OpenCV Error: Bad argument (5273-th value of 220-th (ordered) variable (=-1.70141e+38) is too large) in CvDTreeTrainData::set_data, file /home/XXX/Downloads/opencv-2.4.6.1/modules/ml/src/tree.cpp, line 551
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/XXX/Downloads/opencv-2.4.6.1/modules/ml/src/tree.cpp:551: error: (-5) 5273-th value of 220-th (ordered) variable (=-1.70141e+38) is too large in function CvDTreeTrainData::set_data

Aborted (core dumped)

很奇怪,因为打印出来的数字没有超出浮点数范围 (-3.4E+38 到 +3.4E+38)

我发现opencv的源代码中打印在哪里,但我无法理解问题所在:

文件是tree.cpp

for( i = 0; i < sample_count; i++ )
        {
            float val = ord_nan;
            int si = sidx ? sidx[i] : i;
            if( !mask || !mask[(size_t)si*m_step] )
            {
                if( idata )
                    val = (float)idata[(size_t)si*step];
                else
                    val = fdata[(size_t)si*step];

                if( fabs(val) >= ord_nan )
                {
                    sprintf( err, "%d-th value of %d-th (ordered) "
                        "variable (=%g) is too large", i, vi, val );
                    CV_ERROR( CV_StsBadArg, err );
                }
                num_valid++;
            }

            if (is_buf_16u)
                udst[i] = (unsigned short)i; // TODO: memory corruption may be here
            else
                idst[i] = i;
            _fdst[i] = val;

        }

谁能给我一个提示?

【问题讨论】:

  • 您的帖子中可能有错误,因为您显示的是 ~400 行,但您的错误消息显示的是第 551 行。
  • 你是对的,但是代码是从互联网上获取的,我还检查了我机器上编译的opencv的来源,它是一样的。不过谢谢。

标签: c++ linux opencv random-forest


【解决方案1】:

如果您检查 tree.cpp 文件中的第 551 行,您可以看到 fabs(val) &gt;= ord_nan 是必需的 ord_nan = FLT_MAX*0.5f。所以当val == -1.70141e+38 大于这个限制时它会失败。

【讨论】:

  • 是的,但是如果您查看错误,问题是:if(val==INT_MAX),昨天晚上仔细查看,我意识到问题可能是该代码已从windows,所以之前的计算可能使用了不同的浮点精度。
  • @Bacci 我不认为你是对的。错误信息不同!如果if(val==INT_MAX) 失败,则错误消息将是“...-th (categorical) variable ...”,正如您在帖子中所包含的那样(第 418 行)。但是您收到的错误消息是“...-th (ordered) variable ...”,位于第 549 行。它们不匹配。
猜你喜欢
  • 2011-11-28
  • 2014-01-20
  • 2014-11-21
  • 2016-10-26
  • 2012-10-25
  • 2016-04-18
  • 1970-01-01
  • 2016-07-20
  • 2013-04-25
相关资源
最近更新 更多