【BUG】‘DetDataSample‘ object has no attribute ‘_gt_sem_seg‘

问题: 使用mmdetection框架使用COCO格式训练自定义数据集时,其中模型使用HTC模型时出现如下问题:

AttributeError: ‘DetDataSample’ object has no attribute ‘_gt_sem_seg’. Did you mean: ‘gt_sem_seg’?
results = self(**data, mode=mode)

阅读Hybrid Task Cascade for Instance SegmentationMMDetection的指导文档中数据集准备中发现,需要我们在COCO格式数据集基础上,提供一个stuffthingmaps文件夹,包含原始图像对应的语义分割标签。

解决方法:

  1. 新建文件夹存储原始图像对应的语义分割标签;
  2. train_dataloaderval_dataloaderdata_prefix=dict(img='train_img/', seg='train_seg/')处补充seg=‘your_path’
    • train_img是图像地址
    • train_seg是图像对应语义分割标签地址

mmdet/configs/_base_/datasets/coco_instance.py文件中修改train_dataloaderval_dataloader部分,具体如下:

train_dataloader = dict(
    batch_size=8,
    num_workers=2,
    persistent_workers=True,
    sampler=dict(type='DefaultSampler', shuffle=True),
    batch_sampler=dict(type='AspectRatioBatchSampler'),
    dataset=dict(
        type=dataset_type,
        data_root=data_root,
        ann_file='annotations/annotation_train.json',
        data_prefix=dict(img='train_img/', seg='train_seg/'),
        filter_cfg=dict(filter_empty_gt=True, min_size=32),
        pipeline=train_pipeline,
        backend_args=backend_args))
        
val_dataloader = dict(
    batch_size=1,
    num_workers=2,
    persistent_workers=True,
    drop_last=False,
    sampler=dict(type='DefaultSampler', shuffle=False),
    dataset=dict(
        type=dataset_type,
        data_root=data_root,
        ann_file='annotations/annotation_valid.json',
        data_prefix=dict(img='val_img/', seg='val_seg/'),
        test_mode=True,
        pipeline=test_pipeline,
        backend_args=backend_args))
### 解决 'DetDataSample' 对象没有 '_gt_sem_seg' 属性的问题 在 MMDetection 中遇到 `'DetDataSample' object has no attribute '_gt_sem_seg'` 的错误通常是因为版本兼容性问题或是配置文件设置不当所致[^1]。 MMDetection 是一个模块化设计的目标检测工具箱,在不同版本之间可能存在 API 变更。如果使用的是较新的 MMDetection 版本,则某些旧版中存在的属性可能已被移除或重命名。对于 `_gt_sem_seg` 这一特定情况,该属性主要用于语义分割任务中的标注数据存储,而在目标检测任务中并不一定存在此字段[^2]。 为了修复这个问题: #### 方法 1: 更新至最新稳定版本 确保所使用的 MMDetection 和其依赖库均为最新的稳定版本,这可以避免由于版本差异引起的各种潜在问题。 ```bash pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10/index.html pip install mmdet ``` #### 方法 2: 修改配置文件 检查并调整配置文件以匹配当前使用的模型和任务需求。如果是基于实例分割或者全景分割的任务,确认 `data_preprocessor` 配置项已正确设置了相应的参数。 ```yaml model = dict( ... data_preprocessor=dict( type='DetDataPreprocessor', mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], bgr_to_rgb=True, pad_size_divisor=32), ... ) ``` #### 方法 3: 自定义 Data Sample 类 当确实需要扩展默认的数据样本类来支持额外的功能时,可以通过继承原有类的方式实现自定义功能而不破坏现有结构。 ```python from mmdet.structures import DetDataSample class CustomDetDataSample(DetDataSample): @property def gt_sem_seg(self): if not hasattr(self, "_gt_sem_seg"): self._gt_sem_seg = None return self._gt_sem_seg @gt_sem_seg.setter def gt_sem_seg(self, value): setattr(self, "_gt_sem_seg", value) # 使用新创建的CustomDetDataSample替代原有的DetDataSample ``` 通过上述方法之一应该能够有效解决 `'DetDataSample' object has no attribute '_gt_sem_seg'` 错误。具体选择哪种方式取决于实际应用场景以及项目的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值