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

Colab运行YOLOv5报c10::CUDAError及索引越界错误如何解决

故障诱发原因
  • 核心触发原因是类别索引配置不匹配,也是两类CUDA报错的直接来源。调整减少类别数量后,没有同步修改全链路的类别配置,导致标签索引越界:比如模型配置文件中的nc(类别总数)参数、数据集配置文件中的类别名列表长度、标注文件内的实际类别ID三者没有对齐。举个例子,如果当前配置nc=4(合法类别ID范围是0~3),但标注文件里还残留之前多类别配置下ID≥4的标签,GPU读取标签做索引计算时就会触发越界断言,连带抛出c10::CUDAError的进程崩溃错误。
  • 报错随机出现的特性和当前数据集分布直接相关:总样本3400个但单类别仅70个样本,这类低占比类别的错误标注不会在每个训练batch中被采样到,只有当加载到包含非法ID标注的batch时才会触发崩溃,因此表现为随机报错。
  • 次要诱因是旧缓存干扰:调整类别配置前生成的标签缓存文件(后缀为.cache)没有被清理,训练时直接读取旧缓存中存储的多类别时代的标签索引,也会触发索引越界。
修复方案
  • 做全链路类别一致性校验
    • 核对数据集配置文件中的nc参数值,确保和同文件下names列表的长度完全相等,例如nc=3时names必须恰好包含3个类别名,对应合法ID范围0~2。
    • 批量遍历所有标注txt文件,统计所有出现过的类别ID,把所有超出0~nc-1范围的非法ID修正为正确值,或者直接删除对应无效标注。重点排查删掉的那些旧类别对应的标注,这类标注最容易残留未修改的高ID值。
  • 清理全部旧缓存
    • 进入数据集的images、labels目录,删除目录下所有后缀为.cache的文件,YOLOv5会在下次训练启动时自动重新生成匹配当前配置的新缓存,避免读取到旧的多类别标签数据。
  • 针对性适配少样本场景
    • 先核查仅70个样本的类别的标注准确率,排除漏标、错标问题;训练时可以适当调高该类别的损失权重,或者开启类别过采样降低训练不稳定的概率。排查阶段可以把训练参数--workers设为0,关闭多进程数据加载,排除多进程下的随机索引读取异常,更快定位问题。
  • 重置CUDA上下文
    • 每次触发CUDA断言报错后,Colab的CUDA运行上下文会处于损坏状态,直接重启Colab运行时再启动修改后的训练即可,不要在已崩溃的会话中反复重试。

内容的提问来源于stack exchange,提问作者Nikita Belooussov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:15:51