MM Segmentation 训练自己的数据集

本文指导如何在MMSegmentation框架中创建新的MyDataset,包括编写mydataset.py、修改__init__.py、class_names.py及config文件。涉及步骤包括数据集类定义、初始化、注册,以及调整模型配置以适应新数据集。

在/mmsegmentation-master/mmseg/datasets路径下新建一个mydataset.py文件

# Copyright (c) OpenMMLab. All rights reserved.

from .builder import DATASETS
from .custom import CustomDataset

@DATASETS.register_module()
class MyDataset(CustomDataset):
    """My Dataset.

    """
    CLASSES = ('background', 'alpha')  # 需要修改的地方
    PALETTE = [[0, 0, 0], [255, 255, 255]]  # 需要修改的地方

    def __init__(self, **kwargs):
        super(MyDatasetDataset, self).__init__(
            img_suffix='.png',  # 需要修改的地方
            seg_map_suffix='.png', #需要修改的地方
            reduce_zero_label=False,
            **kwargs)
        assert self.file_client.exists(self.img_dir)

同时在/mmsegmentation-master/mmseg/datasets中的____init____.py添加刚刚新建的数据集

# Copyright (c) OpenMMLab. All rights reserved.
from .ade import ADE20KDataset
from .builder import DATASETS, PIPELINES, build_dataloader, build_dataset
from .chase_db1 import ChaseDB1Dataset
from .cityscapes import CityscapesDataset
from .coco_stuff import COCOStuffDataset
from .custom import CustomDataset
from .dark_zurich import DarkZurichDataset
from .dataset_wrappers import (ConcatDataset, MultiImageMixDataset,
                               RepeatDataset)
from .drive import DRIVEDataset
from .hrf import HRFDataset
from .isaid import iSAIDDataset
from .isprs import ISPRSDataset
from .loveda import LoveDADataset
from .night_driving import NightDrivingDataset
### 创建和配置自定义数据集 #### 数据集基本信息引入 为了使MMDetection能够识别并加载自定义数据集,在项目中需先导入必要的模块以及声明所用到的基础组件[^1]。 #### 修改配置文件以适配新数据集 对于特定的任务需求,比如目标检测中的分类数目变化,应当编辑对应的配置文件来匹配新的设定。例如,当使用`ms_3x_coco.py`作为基础模板时,如果自定义数据集中含有21类对象,则应在相应位置设置`num_classes=21`于`bbox_head`字段下[^2]。 ```python model = dict( roi_head=dict( bbox_head=dict(num_classes=21), # 设置类别数量为21 ) ) ``` #### 准备标注工具及其输出格式转换 采用LabelMe这类图形界面的标注软件可以方便快捷地标记图像内的物体边界框和其他属性。完成标记工作之后得到JSON格式的结果文件,这些文件还需进一步加工才能被用于训练过程——即转化为COCO或VOC标准格式之一。此步骤可通过编写脚本自动化处理,确保每张图都正确分配至训练集、测试集或是验证集合之中[^3]。 #### XML转COCO格式的具体操作指南 考虑到某些情况下原始标签可能是XML形式存储(如来自Pascal VOC),那么就需要额外一步将其转变为适合MMDetection读取的形式。这一变换可以通过Python库的帮助轻松达成,下面给出了一段示范代码片段展示如何批量执行这种类型的转换任务[^4]: ```python from xml.etree import ElementTree as ET import json import os def convert_xml_to_coco(xml_dir, output_json_path): images = [] annotations = [] categories = [{"id": i, "name": str(i)} for i in range(1, 22)] # 假设有21个类别 image_id = 0 annotation_id = 0 for filename in os.listdir(xml_dir): if not filename.endswith('.xml'): continue tree = ET.parse(os.path.join(xml_dir, filename)) root = tree.getroot() width = int(root.find('size/width').text) height = int(root.find('size/height').text) image_info = { 'file_name': f"{filename[:-4]}.jpg", 'height': height, 'width': width, 'id': image_id } images.append(image_info) for obj in root.findall('object'): category_id = int(obj.find('name').text) + 1 # 类别ID从1开始计数 bndbox = obj.find('bndbox') xmin = float(bndbox.find('xmin').text) ymin = float(bndbox.find('ymin').text) xmax = float(bndbox.find('xmax').text) ymax = float(bndbox.find('ymax').text) w = xmax - xmin h = ymax - ymin ann = { 'area': w * h, 'iscrowd': 0, 'image_id': image_id, 'category_id': category_id, 'bbox': [xmin, ymin, w, h], 'id': annotation_id, 'ignore': 0, 'segmentation': [[]] } annotations.append(ann) annotation_id += 1 image_id += 1 coco_format_data = {'images': images, 'annotations': annotations, 'categories': categories} with open(output_json_path, 'w') as outfile: json.dump(coco_format_data, outfile) convert_xml_to_coco('/path/to/xml/files', '/output/path/coco_annotations.json') ```
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值