MMDetection配置报错:'ConfigDict'对象无'data'属性如何解决?
问题:MMDetection自定义数据集配置报错AttributeError: 'ConfigDict' object has no attribute 'data'
问题描述
为实现Pantograph类的图像检测,在配置MMDetection自定义数据集时反复触发错误,尝试移除代码中的自定义函数、调整文件路径等操作后仍未解决。
错误代码
from argparse import ArgumentParser from mmdet.apis import init_detector, inference_detector import mmcv from mmdet.apis import (async_inference_detector, inference_detector, init_detector, show_result_pyplot) import asyncio import torch from mmdet.apis import init_detector, async_inference_detector from mmdet.utils.contextmanagers import concurrent def data(): # The new config inherits a base config to highlight the necessary modification base_ = 'configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py' # We also need to change the num_classes in head to match the dataset's annotation # dict is a python dictionary object which is used to save or load models from PyTorch model = dict( roi_head=dict( # defining the number of classes a bounding box can go around bbox_head=dict(num_classes=1), # mask_head=dict(num_classes=1))) def dataset(): # Modify dataset related settings dataset_type = 'COCODataset' #Defining the classes classes = ('Pantograph') data = dict( train=dict( img_prefix='testing/', classes=classes, ann_file='train/Pan2_COCO.json'), val=dict( img_prefix='testing/', classes=classes, ann_file='val/Pan2_COCO.json'), test=dict( img_prefix='testing/', classes=classes, ann_file='val/Pan2_COCO.json')) def load(): # We can use the pre-trained Mask RCNN model to obtain higher performance load_from = 'testing/checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth' data() dataset() load()
报错信息
Traceback (most recent call last): File "tools/train.py", line 244, in <module> main() File "tools/train.py", line 135, in main setup_multi_processes(cfg) File "/home/dtl-admin/dev/mmdetection/mmdet/utils/setup_env.py", line 30, in setup_multi_processes workers_per_gpu = cfg.data.get('workers_per_gpu', 1) File "/home/dtl-admin/miniconda3/envs/mmtest/lib/python3.8/site-packages/mmcv/utils/config.py", line 519, in __getattr__ return getattr(self._cfg_dict, name) File "/home/dtl-admin/miniconda3/envs/mmtest/lib/python3.8/site-packages/mmcv/utils/config.py", line 50, in __getattr__ raise ex AttributeError: 'ConfigDict' object has no attribute 'data'
解决方案
错误原因
你的代码写法完全不符合MMDetection的配置规范:
- 所有配置变量(
base_、model、data等)都定义在函数内部,属于局部变量,执行函数后这些变量不会被MMDetection的配置系统读取。 - MMDetection要求配置文件是全局作用域下的Python脚本,通过继承基础配置+修改字段的方式定义,而非用函数封装。
正确配置方式
创建一个独立的配置文件(比如pantograph_mask_rcnn.py),内容如下:
# pantograph_mask_rcnn.py _base_ = 'configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py' # 修改模型头部的类别数,匹配自定义数据集 model = dict( roi_head=dict( bbox_head=dict(num_classes=1), mask_head=dict(num_classes=1) ) ) # 数据集相关配置 dataset_type = 'COCODataset' classes = ('Pantograph',) # 注意末尾的逗号,确保是元组类型 data = dict( train=dict( img_prefix='testing/', classes=classes, ann_file='train/Pan2_COCO.json' ), val=dict( img_prefix='testing/', classes=classes, ann_file='val/Pan2_COCO.json' ), test=dict( img_prefix='testing/', classes=classes, ann_file='val/Pan2_COCO.json' ) ) # 预训练模型加载路径 load_from = 'testing/checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'
启动训练
运行训练脚本时指定这个自定义配置文件:
python tools/train.py pantograph_mask_rcnn.py
内容的提问来源于stack exchange,提问作者Isaac_E
相关产品推荐
相关产品推荐

