Detectron2中DiffusionDet训练报错:已注册数据集仍提示未注册
排查Detectron2数据集注册失效问题
1. 确认注册代码的执行时机
- 确保数据集注册代码在
train_net.py启动前被执行。如果注册代码写在单独脚本里,必须让train_net.py通过import加载该脚本——比如把注册代码放在项目的dataset/__init__.py中,或者在train_net.py开头直接导入注册模块。 - 验证方法:在
train_net.py开头添加代码:
运行训练命令,查看输出里是否包含from detectron2.data import DatasetCatalog print(DatasetCatalog.list())aqua_train,如果没有,说明注册代码未被执行。
2. 检查配置文件的数据集名称匹配
- 核对config文件中
DATASETS.TRAIN的配置,确保名称和注册的aqua_train完全一致,无大小写错误、空格或额外符号。正确格式示例:DATASETS: TRAIN: ("aqua_train",) - 注意必须用元组格式,即使只有一个数据集,末尾也要加逗号。
3. 排查注册代码的逻辑问题
- 避免将注册代码放在
if __name__ == "__main__":块中,否则被其他脚本导入时不会执行。正确的注册代码示例:from detectron2.data.datasets import register_coco_instances register_coco_instances("aqua_train", {}, "/path/to/aqua_train.json", "/path/to/images_dir") - 检查是否存在多次注册覆盖的情况,确保注册逻辑是无条件执行的。
4. 清理缓存与版本兼容检查
- 清理Detectron2缓存目录(默认路径为
~/.detectron2/cache/),避免旧缓存导致的识别异常。 - 确认DiffusionDet代码与当前使用的Detectron2版本兼容,版本不匹配可能引发注册逻辑异常。
5. 验证COCO格式JSON的有效性
- 虽然
DatasetCatalog.get("aqua_train")能返回内容,仍需检查JSON格式:- 确认
images字段中的file_name是相对图片根目录的路径或绝对路径,且图片可正常访问。 - 确认
annotations字段中的category_id是从1开始的连续整数,Detectron2对COCO格式的类别ID有严格要求,不连续或缺失会导致训练逻辑无法识别数据集。
- 确认
内容的提问来源于stack exchange,提问作者LongVuBui
相关产品推荐
相关产品推荐

