You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的配置规范:

  1. 所有配置变量(base_、model、data等)都定义在函数内部,属于局部变量,执行函数后这些变量不会被MMDetection的配置系统读取。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:35:26