MMSegmentation 数据集扩展完全指南:自定义数据集、目录重组与多数据集混合

发布时间:2026/9/16 18:45:40
MMSegmentation 数据集扩展完全指南:自定义数据集、目录重组与多数据集混合 MMSegmentation 数据集扩展完全指南自定义数据集、目录重组与多数据集混合【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation本篇技术指南聚焦 MMSegmentation 中新增数据集的三种主流路径编写全新数据集类、按标准目录结构重组数据、借助 RepeatDataset / ConcatDataset / MultiImageMixDataset 混合多份数据。全文以 docs/en/advanced_guides/add_datasets.md 为骨架结合mmseg/datasets/下的BaseSegDataset源码与仓库内真实配置帮助你从零接入自有语义分割数据并理解底层加载、标签映射与数据增强流水线的协作机制。新增自定义数据集Add New Custom Dataset当自有数据的目录结构或标注形式无法直接套用仓库内置数据集时推荐编写一个新的数据集类。MMSegmentation 1.x 中所有数据集都通过注册器机制统一管理整体只需四步。第 1 步创建数据集类文件在 mmseg/datasets/example.py 的同级目录新建文件示例为mmseg/datasets/example.pyfrom mmseg.registry import DATASETS from .basesegdataset import BaseSegDataset DATASETS.register_module() class ExampleDataset(BaseSegDataset): METAINFO dict( classes(xxx, xxx, ...), palette[[x, x, x], [x, x, x], ...]) def __init__(self, arg1, arg2): pass要点说明DATASETS.register_module()装饰器将类注册进 mmseg/registry 中的DATASETS注册器此后配置文件中才能通过typeExampleDataset字符串构建该数据集。METAINFO是类级元信息至少需要classes类别名元组与palette每个类别对应的 RGB 可视化颜色。若未定义palette从 basesegdataset.py 的 _update_palette 实现 可以看到框架会以固定随机种子 42 自动生成调色板若palette长度与类别数不一致则会抛出ValueError。建议在__init__中显式给出数据集固定的img_suffix与seg_map_suffix。可以参考仓库中的真实案例 mmseg/datasets/isaid.pyiSAIDDataset 将img_suffix固定为.png、seg_map_suffix固定为_instance_color_RGB.png并透传ignore_index与**kwargs给父类。第 2 步在__init__.py中导入模块在 mmseg/datasets/init.py 中追加导入使注册动作在包加载时生效from .example import ExampleDataset从该文件的__all__列表可以看到仓库内置的CityscapesDataset、ADE20KDataset、PascalVOCDataset、LoveDADataset、iSAIDDataset等均遵循这一注册模式。第 3 步编写数据集配置文件在 configs/base/datasets 目录下新建example_dataset.pydataset_type ExampleDataset data_root data/example/ ...真实配置可参考 configs/base/datasets/cityscapes.py其中dataset_type即注册名data_root为数据根目录随后定义train_pipeline/test_pipeline并通过train_dataloader、val_dataloader、test_dataloader中的dataset字段传入data_prefixdict(img_path..., seg_map_path...)。BaseSegDataset会通过_join_prefix将data_root与data_prefix拼接得到完整路径其data_prefix默认值为dict(img_path, seg_map_path)对应实现见 basesegdataset.py 构造参数。第 4 步登记类别名与调色板工具函数在 mmseg/utils/class_names.py 中补充类别名、调色板函数并加入dataset_aliasesdef example_classes(): return [ xxx, xxx, ... ] def example_palette(): return [ [x, x, x], [x, x, x], ... ] dataset_aliases { example: [example, ...], ... }该文件的get_classes与get_palette会先将dataset_aliases展开成别名 → 标准名的映射再通过eval(alias2name[dataset] _classes())动态调用对应函数class_names.py 第 517-548 行。例如get_classes(voc12)会命中voc的别名列表并返回voc_classes()。登记后训练脚本与可视化工具就能按数据集别名自动获取类别与配色。注意如果新数据集不满足 MMSegmentation 的标注要求例如标签不是单通道(H, W)的 PNG、类别 ID 不连续等需要先在 tools/dataset_converters 中编写数据预处理脚本。仓库已为 Cityscapes、VOC、ADE20K、COCO-Stuff、Potsdam、Vaihingen、iSAID、LoveDA 等提供转换脚本可直接参考其文件读写与标注重映射逻辑。通过重组数据目录自定义数据集如果只想快速用上自有数据最简单的方式是不写任何代码仅把数据整理成框架约定的目录结构├── data │ ├── my_dataset │ │ ├── img_dir │ │ │ ├── train │ │ │ │ ├── xxx{img_suffix} │ │ │ │ ├── yyy{img_suffix} │ │ │ │ ├── zzz{img_suffix} │ │ │ ├── val │ │ ├── ann_dir │ │ │ ├── train │ │ │ │ ├── xxx{seg_map_suffix} │ │ │ │ ├── yyy{seg_map_suffix} │ │ │ │ ├── zzz{seg_map_suffix} │ │ │ ├── val约定规则配对规则一张训练样本由img_dir与ann_dir中除后缀外同名的两个文件组成例如xxx.jpg与xxx.png一一对应。加载逻辑BaseSegDataset.load_data_listbasesegdataset.py 第 229-271 行有两种路径——若传入了ann_file每行一个不带后缀的文件名则按文件列表加载否则递归遍历img_dir把img_path中的img_suffix替换为seg_map_suffix得到标注路径并按图片路径排序。标签格式标注图尺寸必须与输入图一致(H, W)像素值取值范围为[0, num_classes - 1]。可以使用 Pillow 的P调色板模式来生成带颜色的标注图标注中值为255的像素在损失计算时会被忽略ignore_index默认值即为 255见 basesegdataset.py 构造参数。验证集即测试集部分数据集不公开测试集标注无法在本地评测因此仓库配置中通常直接把验证集作为默认测试集test_dataloader val_dataloader见 cityscapes.py。关于如何构建自有数据集或实现新的数据集类更详细的接口说明请参考 docs/en/advanced_guides/datasets.md其中包括get_data_info返回的字段img_path、seg_map_path、label_map、reduce_zero_label、seg_fields、sample_idx以及通过metainfo裁剪类别、reduce_zero_labelTrue忽略 0 号类别ADE20K 常用等标签重映射技巧。通过混合数据集自定义Mixing DatasetMMSegmentation 还支持在训练时混合多份数据集目前提供concat拼接、repeat重复与 multi-image mix多图混合三种能力。RepeatDataset重复数据集用RepeatDataset包装器把同一数据集重复 N 遍适用于小数据集多次过采样dataset_A_train dict( typeRepeatDataset, timesN, datasetdict( # This is the original config of Dataset_A typeDataset_A, ... pipelinetrain_pipeline ) )times重复倍数。内层dataset是 Dataset_A 的完整原始配置pipeline必须显式传入训练流水线。ConcatDataset拼接数据集当需要把两份不同数据集拼在一起训练时使用ConcatDatasetdataset_A_train dict() dataset_B_train dict() concatenate_dataset dict( typeConcatDataset, datasets[dataset_A_train, dataset_B_train])一个更复杂的组合示例分别把Dataset_A重复 N 次、Dataset_B重复 M 次再拼接作为训练集同时验证/测试集保持独立dataset_A_train dict( typeRepeatDataset, timesN, datasetdict( typeDataset_A, ... pipelinetrain_pipeline ) ) dataset_A_val dict( ... pipelinetest_pipeline ) dataset_A_test dict( ... pipelinetest_pipeline ) dataset_B_train dict( typeRepeatDataset, timesM, datasetdict( typeDataset_B, ... pipelinetrain_pipeline ) ) train_dataloader dict( datasetdict( typeConcatDataset, datasets[dataset_A_train, dataset_B_train])) val_dataloader dict(datasetdataset_A_val) test_dataloader dict(datasetdataset_A_test)注意验证与测试 loader 直接使用原始数据集配置而非包装后的以保证评测数据不被重复或拼接干扰。ConcatDataset继承自 MMEngine 的BaseDataset体系其底层行为可参考 MMEngine 的基于数据集教程。MultiImageMixDataset多图混合数据集MultiImageMixDataset用于把多张图的样本在 pipeline 中混合支撑mosaic、mixup等多图数据增强。以Mosaic增强为例train_pipeline [ dict(typeRandomMosaic, prob1), dict(typeResize, img_scale(1024, 512), keep_ratioTrue), dict(typeRandomFlip, prob0.5), dict(typePackSegInputs) ] train_dataset dict( typeMultiImageMixDataset, datasetdict( typedataset_type, reduce_zero_labelFalse, img_dirdata_root images/train, ann_dirdata_root annotations/train, pipeline[ dict(typeLoadImageFromFile), dict(typeLoadAnnotations), ] ), pipelinetrain_pipeline )其工作机制可以从 mmseg/datasets/dataset_wrappers.py 的源码得到印证构造时若dataset是 dict 则通过DATASETS.build构建底层数据集pipeline中的每个 transform 通过TRANSFORMS.build实例化并记录各自的type用于skip_type_keys跳过逻辑。在__getitem__中先取回当前样本results然后逐个执行 pipeline 变换若某个 transform 实现了get_indices方法如RandomMosaic见 transforms.py 第 1190 行会从底层数据集中采样若干张图放进results[mix_results]供其拼接处理完后弹出该字段。底层dataset的 pipeline 通常只需LoadImageFromFileLoadAnnotations负责取数真正做 mosaic 等混合的变换放在外层pipeline。从配置到训练完整落地路径将上述任一种数据集配置组织好之后即可沿用 MMSegmentation 标准训练入口使用将自定义数据集配置以_base_方式引入模型配置文件可参考 configs 下各算法目录中形如ann_r50-d8_4xb2-40k_cityscapes-512x1024.py的配置写法随后运行 tools/train.py 启动训练。需要评测时使用 tools/test.py其--out与--show-dir等参数可输出预测可视化而可视化所需的类别名与调色板正是从数据集METAINFO或class_names.py中取得的。小结新增自定义数据集类注册DATASETS、导入__init__.py、编写_base_配置、登记class_names.py适用于标注形态特殊的场景。重组目录零代码按img_dir/ann_dir与文件名后缀配对即可注意标注值域与ignore_index约定。混合数据集RepeatDataset控制重复次数ConcatDataset拼接多源数据MultiImageMixDataset配合RandomMosaic等实现多图混合增强三者在 dataset_wrappers.py 与 transforms.py 中均有完整实现可供研读。【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询