Mmdetection加载自定义COCO数据集出现-1背景标注错误如何解决
MMDetection数据集统计异常问题根因
1. 配置文件类别映射不匹配
- 数据集配置里的
classes字段和自定义标注JSON中categories字段的顺序、ID、名称没有完全对齐。MMDetection加载COCO格式数据集时,会优先采用配置指定的classes列表做映射,JSON标注里的category_id如果匹配不到配置类别的对应索引,就会被标记为-1(背景类),同时匹配失败的原有类别标注数会被统计为0。 - 例如某3类数据集JSON的categories按ID排序为
[类别1, 类别2, 类别3],但配置里的classes写为[类别1, 类别3, 类别2],就会出现ID对应错位,导致类别2、3的统计数异常。
2. 自定义标注残留冗余ID
- 生成标注JSON时没有完全过滤掉不属于当前数据集类别的COCO原有标注,或者生成的
category_id存在跳号、超出当前数据集类别ID范围的情况。MMDetection的CocoDataset默认会把不在配置classes范围内的category_id对应的标注全部标记为-1背景类,统计时就会出现大量JSON中不存在的背景类数据。 - 例如制作3类数据集时,标注里残留了COCO原有ID大于3的标注,这些标注都会被识别为背景。
3. 背景类追加逻辑未显式关闭
- 部分MMDetection版本的
CocoDataset初始化时,如果没有显式将with_background参数设为False,会自动在类别列表末尾追加背景类,对应ID就是-1,统计时就会出现JSON里不存在的-1类。
快速定位方法
调用build_dataset后添加以下代码,对比输出和JSON的categories字段即可快速定位映射问题:
# 打印数据集实际生效的类别列表 print(dataset.CLASSES) # 打印数据集的类别ID到标签索引的映射关系 print(dataset.cat2label)
内容的提问来源于stack exchange,提问作者Victor Lundgren
相关产品推荐
相关产品推荐

