You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenCV trainHog示例训练INRIA数据集触发断言错误求助

解决OpenCV trainHog示例训练INRIA数据集时的断言错误问题

首先看触发断言的代码行:CV_Assert(positive_count < labels.size());,这个断言的核心要求是正样本的数量必须小于labels数组的总长度。labels数组是由正样本标签(全部为1)加上负样本标签(全部为-1)组成的,总长度应该是positive_count + negative_count,所以触发断言的本质是positive_count >= positive_count + negative_count——也就是负样本数量为0甚至负数,完全不符合训练的基本要求。

下面是最可能的几个原因和对应的排查方向:

  • 负样本加载或HOG计算完全失败
    先检查neg_lst里的负样本路径是否正确,有没有文件不存在、路径写错(比如相对路径错误、大小写不匹配)的情况。如果neg_lst本身是空的,或者computeHOGs函数处理负样本时没有生成任何有效特征,那gradient_lst.size() - positive_count得到的negative_count就是0,此时labels总长度等于positive_count,断言自然触发。

  • positive_count的统计逻辑出错
    确认positive_count的值是不是真的等于正样本的实际数量。比如有没有可能你在之前的代码里把positive_count错误赋值成了总样本数,或者正样本的HOG计算后,gradient_lst的长度统计出错,导致positive_count的数值偏差。

  • flip_samples参数引发的异常
    如果flip_samples设为true,理论上会生成翻转后的样本扩充数据集,但如果这个过程中出现异常(比如翻转时图像读取错误),可能导致负样本的扩充失败,最终negative_count还是0。

快速排查步骤

  1. 在断言代码前加几行打印,直接看关键数值的情况:
    clog << "positive_count: " << positive_count << endl;
    clog << "gradient_lst size: " << gradient_lst.size() << endl;
    clog << "negative_count: " << negative_count << endl;
    clog << "labels size: " << labels.size() << endl;
    
  2. 手动核对neg_lst里的负样本文件,确保每个路径都指向有效的图像文件。
  3. 单独测试computeHOGs处理负样本的逻辑,验证是否能正常生成HOG特征。

内容的提问来源于stack exchange,提问作者Alexandra Tupu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:00:09