
MMSegmentation 实战BDD100K 语义分割数据的下载、目录组织与模型训练配置指南【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentationBDD100K 是伯克利大学发布的自动驾驶场景大规模数据集覆盖 10 万张行车图像其中语义分割任务常用其 10K 子集1 万张带标注图像。本文以 MMSegmentation 仓库中projects/bdd100k_dataset项目为线索完整讲解 BDD100K 数据的注册下载、解压与目录摆放、数据集类与数据管线配置以及基于 PSPNet 的端到端训练命令帮助读者在 MMSegmentation 中快速复现 BDD100K 语义分割实验。读完本文你将掌握如何在 BDD100K 官网获取10K Images与Segmentation标注包、如何将解压结果整理成 MMSegmentation 期望的目录结构、BDD100KDataset数据类的实现原理以及如何直接运行官方提供的 PSPNet 训练配置并理解其中的关键参数。一、数据集概览与获取途径BDD100K 数据集需要先在官方网站注册账号登录后才能进入下载页面获取数据。对应语义分割任务需要下载两个压缩包10K Images1 万张行车图像包含train7000 张、val1000 张、test2000 张三个子集图像为.jpg格式Segmentation语义分割标注包压缩包名称通常为bdd100k_sem_seg_labels_trainval.zip内含训练/验证集的多种标注形式后文详述。官方数据集准备指南见 projects/bdd100k_dataset/docs/en/user_guides/2_dataset_prepare.md对应的中文版本见 projects/bdd100k_dataset/docs/zh_cn/user_guides/2_dataset_prepare.md。该指南强调语义分割实验主要使用10K 子集图像与分割标注需配套下载二者缺一不可。二、下载与解压步骤将两个压缩包下载到本地后假设放在~/目录下依次执行如下命令解压unzip ~/bdd100k_images_10k.zip -d ~/mmsegmentation/data/ unzip ~/bdd100k_sem_seg_labels_trainval.zip -d ~/mmsegmentation/data/说明-d指定解压目标目录这里直接解压到 MMSegmentation 仓库根目录下的data/文件夹与仓库中其他数据集的默认摆放位置保持一致若你的仓库路径不同请将~/mmsegmentation/替换为实际的仓库绝对路径解压后两个压缩包会自动合并出data/bdd100k/目录其中images/来自图像包labels/来自标注包。三、期望的目录结构解压完成后data/目录下应当呈现如下结构这也是 MMSegmentation 读取该数据集的默认约定mmsegmentation ├── mmseg ├── tools ├── configs ├── data │ ├── bdd100k │ │ ├── images │ │ │ └── 10k │ │ │ ├── test │ │ │ ├── train │ │ │ └── val │ │ └── labels │ │ └── sem_seg │ │ ├── colormaps │ │ │ ├── train │ │ │ └── val │ │ ├── masks │ │ │ ├── train │ │ │ └── val │ │ ├── polygons │ │ │ ├── sem_seg_train.json │ │ │ └── sem_seg_val.json │ │ └── rles │ │ ├── sem_seg_train.json │ │ └── sem_seg_val.json各子目录的含义路径内容训练时是否使用images/10k/train、images/10k/val、images/10k/test原始行车图像.jpg是train/vallabels/sem_seg/masks/train、masks/val像素级分割掩码.png类别索引编码是MMSegmentation 直接读取该目录labels/sem_seg/colormaps/train、colormaps/val带调色板着色的可视化图RGB 编码否仅用于人工查看labels/sem_seg/polygons/*.json多边形Polygon形式的标注文件否labels/sem_seg/rles/*.json游程编码RLE形式的标注文件否关键点MMSegmentation 训练/验证时实际使用的是masks下的 PNG 掩码colormaps、polygons、rles属于 BDD100K 官方提供的其他标注形态解压后保留即可无需额外转换。四、数据集类实现BDD100KDataset本项目的核心代码位于 projects/bdd100k_dataset/mmseg/datasets/bdd100k.py仅需约 30 行即可把 BDD100K 接入 MMSegmentation 的数据体系from mmseg.datasets.basesegdataset import BaseSegDataset class BDD100KDataset(BaseSegDataset): METAINFO dict( classes(road, sidewalk, building, wall, fence, pole, traffic light, traffic sign, vegetation, terrain, sky, person, rider, car, truck, bus, train, motorcycle, bicycle), palette[[128, 64, 128], [244, 35, 232], [70, 70, 70], [102, 102, 156], [190, 153, 153], [153, 153, 153], [250, 170, 30], [220, 220, 0], [107, 142, 35], [152, 251, 152], [70, 130, 180], [220, 20, 60], [255, 0, 0], [0, 0, 142], [0, 0, 70], [0, 60, 100], [0, 80, 100], [0, 0, 230], [119, 11, 32]]) def __init__(self, img_suffix.jpg, seg_map_suffix.png, reduce_zero_labelFalse, **kwargs) - None: super().__init__( img_suffiximg_suffix, seg_map_suffixseg_map_suffix, reduce_zero_labelreduce_zero_label, **kwargs)从源码结构可以提炼出以下实现细节类别与调色板METAINFO声明了 19 个语义类别road、sidewalk、building、car、person 等并给出了每个类别对应的 RGB 调色板用于可视化与结果着色该元信息会被BaseSegDataset的_load_metainfo机制加载。继承自BaseSegDataset基类实现在 mmseg/datasets/basesegdataset.py它本身继承自 mmengine 的BaseDataset负责按img_suffix与seg_map_suffix自动匹配图像与掩码文件对要求同名仅后缀不同。BDD100K 的图像是.jpg、掩码是.png与基类默认值一致。reduce_zero_labelFalseBDD100K 的掩码中类别 0 对应road是有实际语义的类别因此不能像 Cityscapes 那样把 0 视为背景并丢弃这也是 BDD100K 与 Cityscapes 在数据类实现上的关键差异。无需显式注册该数据集类通过配置文件中的custom_imports机制被动态导入见下文第六节因此源码中DATASETS.register_module()被注释掉也完全不影响使用。五、数据加载与增强管线配置数据集配置文件为 projects/bdd100k_dataset/configs/base/datasets/bdd100k.py它完整定义了训练/验证/测试三套数据管线与评测指标。5.1 训练管线dataset_type BDD100KDataset data_root data/bdd100k/ crop_size (512, 1024) train_pipeline [ dict(typeLoadImageFromFile), dict(typeLoadAnnotations), dict( typeRandomResize, scale(2048, 1024), ratio_range(0.5, 2.0), keep_ratioTrue), dict(typeRandomCrop, crop_sizecrop_size, cat_max_ratio0.75), dict(typeRandomFlip, prob0.5), dict(typePhotoMetricDistortion), dict(typePackSegInputs) ]各环节作用RandomResize以(2048, 1024)为基准尺度BDD100K 原始图像即 1280×720缩放保持宽高比ratio_range(0.5, 2.0)表示在 0.52.0 倍之间随机缩放实现尺度增强RandomCrop裁剪到(512, 1024)cat_max_ratio0.75限制单次裁剪中某一类别占比不超过 75%避免裁剪块被单一类别如大片 road主导RandomFlip50% 概率水平翻转符合自动驾驶场景的左右对称先验PhotoMetricDistortion光度扰动亮度、对比度、饱和度等提升模型对光照变化的鲁棒性。5.2 验证/测试管线与 TTAtest_pipeline [ dict(typeLoadImageFromFile), dict(typeResize, scale(2048, 1024), keep_ratioTrue), # add loading annotation after Resize because ground truth # does not need to do resize data transform dict(typeLoadAnnotations), dict(typePackSegInputs) ] img_ratios [0.5, 0.75, 1.0, 1.25, 1.5, 1.75] tta_pipeline [ dict(typeLoadImageFromFile, backend_argsNone), dict( typeTestTimeAug, transforms[ [dict(typeResize, scale_factorr, keep_ratioTrue) for r in img_ratios], [dict(typeRandomFlip, prob0., directionhorizontal), dict(typeRandomFlip, prob1., directionhorizontal)], [dict(typeLoadAnnotations)], [dict(typePackSegInputs)] ]) ]验证管线先将图像缩放到(2048, 1024)再加载标注注释明确说明标注不需要参与 resize因此LoadAnnotations必须放在Resize之后tta_pipeline定义了 6 种尺度0.51.75乘以水平翻转组合的测试时增强Test-Time Augmentation实际评测时按需启用。5.3 DataLoader 与评测器train_dataloader dict( batch_size2, num_workers2, persistent_workersTrue, samplerdict(typeInfiniteSampler, shuffleTrue), datasetdict( typedataset_type, data_rootdata_root, data_prefixdict( img_pathimages/10k/train, seg_map_pathlabels/sem_seg/masks/train), pipelinetrain_pipeline)) val_dataloader dict( batch_size1, num_workers4, persistent_workersTrue, samplerdict(typeDefaultSampler, shuffleFalse), datasetdict( typedataset_type, data_rootdata_root, data_prefixdict( img_pathimages/10k/val, seg_map_pathlabels/sem_seg/masks/val), pipelinetest_pipeline)) test_dataloader val_dataloader val_evaluator dict(typeIoUMetric, iou_metrics[mIoU]) test_evaluator val_evaluatordata_prefix中的img_path与seg_map_path正是第三节目录结构中实际生效的两个路径它们以data_root为根拼接训练采用InfiniteSampler配合 IterBasedTrainLoop 的按迭代训练模式验证/测试采用DefaultSampler且不 shuffle评测指标为标准语义分割的mIoUIoUMetric验证与测试复用同一套配置。六、模型训练配置与启动命令6.1 完整配置解析官方提供的 PSPNet 训练配置为 projects/bdd100k_dataset/configs/pspnet_r50-d8_4xb2-80k_bdd100k-512x1024.py全文如下_base_ [ ../../../configs/_base_/models/pspnet_r50-d8.py, ./_base_/datasets/bdd100k.py, ../../../configs/_base_/default_runtime.py, ../../../configs/_base_/schedules/schedule_80k.py ] custom_imports dict( imports[projects.bdd100k_dataset.mmseg.datasets.bdd100k]) crop_size (512, 1024) data_preprocessor dict(sizecrop_size) model dict(data_preprocessordata_preprocessor)关键点四个_base_继承PSPNet ResNet50-d8 模型结构configs/base/models/pspnet_r50-d8.py、第五节的数据集配置、默认运行时日志/checkpoint 钩子等见 configs/base/default_runtime.py、80k 迭代训练计划custom_imports通过imports[projects.bdd100k_dataset.mmseg.datasets.bdd100k]在配置加载阶段动态导入BDD100KDataset这是 MMSegmentationprojects/目录下自定义数据集的标准接入方式——无需修改核心包代码即可扩展新数据集data_preprocessor将输入统一归一化到(512, 1024)与crop_size保持一致。6.2 训练调度细节80k 计划来自 configs/base/schedules/schedule_80k.py优化器SGDlr0.01、momentum0.9、weight_decay0.0005学习率策略PolyLR多项式衰减power0.9、eta_min1e-4训练循环IterBasedTrainLoopmax_iters80000每 8000 迭代验证一次并保存一次 checkpoint命名含义配置文件名的4xb2表示 4 卡 × 每卡 batch_size 2与第五节batch_size2对应80k表示 8 万迭代512x1024表示输入尺寸。6.3 训练命令在 MMSegmentation 仓库根目录执行python tools/train.py projects/bdd100k_dataset/configs/pspnet_r50-d8_4xb2-80k_bdd100k-512x1024.py \ --work-dir your_work_dirtools/train.py是 MMSegmentation 的标准训练入口支持单卡多卡请使用tools/dist_train.sh--work-dir指定日志与 checkpoint 的输出目录不指定时默认输出到work_dirs/下与配置同名的目录训练前请确认data/bdd100k/目录结构正确且images/10k/train与labels/sem_seg/masks/train中存在 7000 对同名文件、val中存在 1000 对test中 2000 张图像仅供推理使用无标注。七、验证与排错建议数量核对ls data/bdd100k/images/10k/train | wc -l应为 7000val应为 1000test应为 2000后缀匹配确保图像为.jpg、掩码为.png且同名否则BaseSegDataset无法配对数据配对逻辑见 mmseg/datasets/basesegdataset.py掩码类别编码masks下的 PNG 使用类别索引018编码colormaps才是 RGB 可视化图训练配置指向的是masks不要混淆背景类别BDD100K 的 0 号类别是road而非背景reduce_zero_label必须保持False否则类别会整体错位导致指标异常。结语通过projects/bdd100k_dataset这个官方示例项目可以看到 MMSegmentation 接入新数据集的完整范式注册下载 → 解压摆放到data/约定目录 → 实现继承BaseSegDataset的数据类声明类别与调色板→ 通过custom_imports在配置中动态导入 → 复用标准 train/test pipeline 与 IoUMetric 评测。掌握这一流程后你可以轻松将其推广到其他自动驾驶或遥感自定义数据集快速开展语义分割实验。【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考