YOLO 训练报错:Label class x exceeds dataset class count x 问题解决方案
在使用 Ultralytics YOLO训练自定义数据集时当往数据集中增加新的分类再进行训练时可能会遇到以下报错且出现条数非常多WARNING ⚠️ ignoring corrupt image/label: Label class 5 exceeds dataset class count 4. Possible class labels are 0-3报警标签类别超过了设置的类别数量。明明已经在数据集 YAML 里把类别数nc修改正确重新运行训练却依旧报同样的错误。本文将完整复盘问题原因、排查思路并给出解决方案。一、问题现象以下是以我的例子遇到的问题现象1.我的自定义数据集标签中包含类别52.YAML 配置文件已正确设置nc: 6类别名称 0~5 齐全3.训练时 YOLO 仍提示类别总数只有 4 类合法类别仅为 0-34.使用rm /home/bing/data/AbnormalBallastBedDataset/labels/train.cache rm /home/bing/data/AbnormalBallastBedDataset/labels/val.cache rm /home/bing/data/AbnormalBallastBedDataset/labels/test.cache删除train.cache、val.cache和test.cache后问题依旧存在二、根本原因问题并不在 YAML 配置写错也不在于标签文件本身而在于YOLO 存在双重缓存机制数据集本地缓存生成在数据集labels/目录下的.cache文件记录了标签的合法性。Ultralytics 全局缓存位于用户目录~/.cache/ultralytics会长期缓存旧的数据集配置包括最早加载的nc4这类错误配置。即使修改了 YAMLYOLO 依然会优先读取全局缓存中的旧类别数导致无论怎么改配置都不生效这是该问题最隐蔽、最容易被忽略的核心原因。三、解决方案只需要同时清除数据集缓存和Ultralytics 全局缓存强制 YOLO 重新加载最新 YAML 配置即可。rm -rf ~/.cache/ultralytics数据集缓存在上面已经删除了只需要再删除全局缓存即可。执行完成后重新启动训练命令所有类别越界警告会完全消失模型正常加载全部类别并开始训练。四、总结YOLO 的类别数配置被缓存后不会自动跟随 YAML 更新只删数据集缓存不够必须清理全局缓存才能彻底刷新配置后续修改数据集nc、类别名称、路径等配置后建议直接执行上述两条命令避免缓存导致的诡异问题该方法适用于 YOLOv8、YOLOv13 等所有基于 Ultralytics 框架的模型深度学习框架的缓存机制虽然能加速加载但也常常带来 “改了配置不生效” 的迷惑性问题。遇到类别不匹配、路径不更新这类问题时优先清理缓存往往能直接解决问题省去大量排查时间。