MMDetection训练报错KeyError: mask_detectionDataset不在数据集注册表中
问题解决方案
核心原因
你的自定义数据集类没有被运行环境实际加载到注册器中,和你直接运行__init__.py报的相对导入错误无关(__init__.py是包初始化文件,本身就不支持独立运行,这个报错属于正常操作导致的,不用处理)。
排查&修复步骤
- 首先检查命名和导入配置是否正确
- 确认
mmdetection/mmdet/datasets目录下的初始化文件是**__init__.py**(前后各两个下划线,你描述里写的init.py是错误命名,会导致Python无法识别该目录为包,导入失效) - 确认你在上述
__init__.py中添加了正确的导入语句,示例如下(把文件名和类名替换成你自己的):
# 假设你的自定义数据集代码存在同目录的mask_detection.py文件中 from .mask_detection import mask_detectionDataset # 把类名添加到__all__列表中,如果已有__all__列表就追加类名,不要重复声明 __all__ = ['mask_detectionDataset']- 确认自定义数据集类上的装饰器导入来源正确,示例如下:
from mmdet.datasets.builder import DATASETS # 不要导错DATASETS的来源,且类名要和cfg中填写的type完全一致,大小写匹配 @DATASETS.register_module() class mask_detectionDataset(CustomDataset): # 你的数据集实现逻辑 - 确认
- 修复环境调用路径问题
从报错日志可以看到,你当前运行环境调用的是conda路径下预安装的mmdet包:D:\anaconda3\envs\openmmlab\lib\site-packages\mmdet\,你修改的本地F:\Project\mmdetection下的代码根本没有被环境加载,所以注册逻辑不生效。
打开命令行,切换到你本地mmdetection仓库的根目录(F:\Project\mmdetection\),执行以下命令把本地代码以可编辑模式安装到环境中:
执行完成后,你修改本地mmdet的代码会同步到环境中生效。pip install -e . - 验证注册是否生效
你可以在训练代码的最开头添加以下代码测试注册结果:
输出为from mmdet.datasets import DATASETS print('mask_detectionDataset' in DATASETS.module_dict)True即代表注册成功,再运行训练代码就不会抛出KeyError。
内容的提问来源于stack exchange,提问作者Darrell Dai
相关产品推荐
相关产品推荐

