新闻详情

新闻详情

首页 / 资讯中心 / 详情

mmdetection 中的 Pascal VOC 检测实战:数据集协议、配置解析与评测指南

发布时间:2026/9/19 20:13:37来源:尧图网络
mmdetection 中的 Pascal VOC 检测实战:数据集协议、配置解析与评测指南
mmdetection 中的 Pascal VOC 检测实战数据集协议、配置解析与评测指南【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址: https://gitcode.com/gh_mirrors/mm/mmdetectionPascal VOC 是目标检测领域最经典的数据集与评测基准之一本篇文章以 configs/pascal_voc/README.md 为核心结合 mmdetection 仓库中的数据集源码、评测实现与全套训练配置系统讲解如何在 mmdetection 中完成 VOC0712 协议的检测模型训练、验证与评测。读完本文你将掌握 VOCDataset 的加载原理、VOC0712 训练协议的细节RepeatDataset ConcatDataset 组合、11points 评测模式以及 Faster R-CNN、RetinaNet、SSD 等经典模型在 VOC 上的完整配置与运行方法。一、Pascal VOC 挑战赛与数据集简介Pascal VOCThe Pascal Visual Object Classes Challenge是由 M. Everingham 等人组织的视觉目标类别识别与检测基准挑战赛从 2005 年起每年举办为视觉与机器学习社区提供了标准的图像与标注数据集、以及标准的评测流程其论文《The Pascal Visual Object Classes (VOC) Challenge》发表于International Journal of Computer Vision2010, 88(2): 303–338。VOC 数据集及其配套评测协议已成为目标检测领域公认的基准之一。VOC 数据集的核心特点20 个目标类别aeroplane、bicycle、bird、boat、bottle、bus、car、cat、chair、cow、diningtable、dog、horse、motorbike、person、pottedplant、sheep、sofa、train、tvmonitor标准目录结构VOC2007/与VOC2012/两个子集图像位于JPEGImages/标注为 PASCAL VOC 格式的 XML 文件每个目标一个object节点包含name、difficult与bndbox坐标划分文件位于ImageSets/Main/标准评测协议以 IoU 阈值 0.5 计算 mAPVOC2007 默认使用 11 点插值11points的 AP 计算方式VOC2012 默认使用曲线下面积area方式。在 mmdetection 中VOC 相关的全部配置集中在 configs/pascal_voc/ 目录数据集实现位于 mmdet/datasets/voc.py 与 mmdet/datasets/xml_style.py评测实现位于 mmdet/evaluation/metrics/voc_metric.py。二、模型库与已发布结果Results and Models原文档给出了 mmdetection 在 VOC0712 协议0712 的 trainval 训练、07 的 test 验证下 5 个经典检测器的官方复现结果完整继承如下架构Architecture骨干网络Backbone风格Style学习率方案Lr schd显存Mem, GBbox AP配置文件ConfigFaster R-CNN C4R-50caffe18k—80.9faster-rcnn_r50-caffe-c4_ms-18k_voc0712.pyFaster R-CNNR-50pytorch1x2.680.4faster-rcnn_r50_fpn_1x_voc0712.pyRetinaNetR-50pytorch1x2.177.3retinanet_r50_fpn_1x_voc0712.pySSD300VGG16—120e—76.5ssd300_voc0712.pySSD512VGG16—120e—79.5ssd512_voc0712.py说明上述权重与训练日志由官方在训练完成后提供下载具体下载地址可在对应模型页与 model-index.yml 中检索表中的 “1x” 在 VOC 协议下实际对应 4 个 epoch 的训练循环因为训练集被重复 3 次见下文第三节SSD 的 “120e” 同理由 12 个 epoch 乘以 10 次重复得到Faster R-CNN C4 采用 caffe 风格的 R-50 骨干与 18000 iter 的迭代式训练IterBasedTrainLoop并配合多尺度随机缩放ms数据增强取得了该表中最高的 80.9 AP除表中 5 个配置外目录下还提供了 faster-rcnn_r50_fpn_1x_voc0712-cocofmt.py它演示了将 VOC 数据转换为 COCO JSON 格式后以CocoDatasetCocoMetric训练的另一种路径。三、VOC0712 训练协议数据集配置深入解析所有 VOC 配置均继承自基础数据集配置 configs/base/datasets/voc0712.py该文件集中体现了 mmdetection 在 VOC 上的训练/验证划分约定dataset_type VOCDataset data_root data/VOCdevkit/即数据集需按标准布局放置在data/VOCdevkit/下包含VOC2007/与VOC2012/两个子目录。3.1 训练集VOC2007 trainval VOC2012 trainval 拼接并重复 3 次train_dataloader dict( batch_size2, num_workers2, persistent_workersTrue, samplerdict(typeDefaultSampler, shuffleTrue), batch_samplerdict(typeAspectRatioBatchSampler), datasetdict( typeRepeatDataset, times3, datasetdict( typeConcatDataset, # VOCDataset 会向 dataset.metainfo 写入不同的 dataset_type # 直接使用 ConcatDataset 会报错添加 ignore_keys 可避免该问题。 ignore_keys[dataset_type], datasets[ dict( typedataset_type, data_rootdata_root, ann_fileVOC2007/ImageSets/Main/trainval.txt, data_prefixdict(sub_data_rootVOC2007/), filter_cfgdict(filter_empty_gtTrue, min_size32, bbox_min_size32), pipelinetrain_pipeline, backend_argsbackend_args), dict( typedataset_type, data_rootdata_root, ann_fileVOC2012/ImageSets/Main/trainval.txt, data_prefixdict(sub_data_rootVOC2012/), filter_cfgdict(filter_empty_gtTrue, min_size32, bbox_min_size32), pipelinetrain_pipeline, backend_argsbackend_args), ])))几个值得注意的实现细节拼接策略训练集由VOC2007/ImageSets/Main/trainval.txt与VOC2012/ImageSets/Main/trainval.txt两份划分通过ConcatDataset拼接共约 16551 张图像ignore_keys[dataset_type]源码 mmdet/datasets/voc.py 中VOCDataset会根据sub_data_root是否包含VOC2007在metainfo中写入不同的dataset_type直接拼接会因 metainfo 冲突报错ConcatDataset的ignore_keys参数正是为解决这一冲突而存在重复 3 次外层RepeatDataset(times3)将拼接后的训练集重复 3 次因此配置文件中写max_epochs 4时实际训练轮数 4 × 3 12 个数据全量 epochSSD 配置中times10配合 2x schedule 的 12 epoch实际为 120 轮与表内 “120e” 对应过滤规则filter_cfg中的filter_empty_gtTrue过滤无目标图像min_size32过滤短边小于 32 像素的图像bbox_min_size32在 mmdet/datasets/xml_style.py 中生效——宽或高小于 32 像素的框会被标记为ignore_flag 1而非直接丢弃。3.2 验证集VOC2007 test VOCMetric 评测val_dataloader dict( batch_size1, num_workers2, persistent_workersTrue, drop_lastFalse, samplerdict(typeDefaultSampler, shuffleFalse), datasetdict( typedataset_type, data_rootdata_root, ann_fileVOC2007/ImageSets/Main/test.txt, data_prefixdict(sub_data_rootVOC2007/), test_modeTrue, pipelinetest_pipeline, backend_argsbackend_args)) test_dataloader val_dataloader # Pascal VOC2007 默认使用 11points 评测模式而 PASCAL VOC2012 默认使用 area。 val_evaluator dict(typeVOCMetric, metricmAP, eval_mode11points) test_evaluator val_evaluator验证与测试统一使用VOC2007/ImageSets/Main/test.txt4952 张评测器为VOCMetric采用11points模式计算 mAP。3.3 数据增强管线基础配置中的训练管线为经典 Faster R-CNN 风格train_pipeline [ dict(typeLoadImageFromFile, backend_argsbackend_args), dict(typeLoadAnnotations, with_bboxTrue), dict(typeResize, scale(1000, 600), keep_ratioTrue), dict(typeRandomFlip, prob0.5), dict(typePackDetInputs) ] test_pipeline [ dict(typeLoadImageFromFile, backend_argsbackend_args), dict(typeResize, scale(1000, 600), keep_ratioTrue), # 避免 bboxes 被 Resize 改变 dict(typeLoadAnnotations, with_bboxTrue), dict(typePackDetInputs, meta_keys(img_id, img_path, ori_shape, img_shape, scale_factor)) ]训练时将图像等比例缩放到长边 1000、短边 600并随机水平翻转测试时同样缩放到 (1000, 600)。SSD 与 C4 配置则各自覆盖了不同的管线SSD 使用Expand、MinIoURandomCrop、PhotoMetricDistortion等针对小输入300/512的增强见 ssd300_voc0712.pyC4 配置使用RandomChoiceResize在 11 档短边尺度480–800间随机选择实现多尺度训练。四、模型配置详解从 Faster R-CNN 到 SSD4.1 Faster R-CNN R-50 FPN 1xpytorch 风格configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py 的结构非常精简因为它继承了三份基础配置_base_ [ ../_base_/models/faster-rcnn_r50_fpn.py, ../_base_/datasets/voc0712.py, ../_base_/default_runtime.py ] model dict(roi_headdict(bbox_headdict(num_classes20))) # 训练计划VOC 数据集在 _base_/datasets/voc0712.py 中被重复 3 次 # 因此实际 epoch 4 * 3 12 max_epochs 4 train_cfg dict(typeEpochBasedTrainLoop, max_epochsmax_epochs, val_interval1) val_cfg dict(typeValLoop) test_cfg dict(typeTestLoop) # 学习率在第 3 个 epoch 处衰减 10 倍 param_scheduler [ dict(typeMultiStepLR, begin0, endmax_epochs, by_epochTrue, milestones[3], gamma0.1) ] # 优化器SGD初始学习率 0.01 optim_wrapper dict(typeOptimWrapper, optimizerdict(typeSGD, lr0.01, momentum0.9, weight_decay0.0001)) # 自动缩放学习率设置 # - enable 表示是否默认启用自动缩放 # - base_batch_size (8 GPUs) x (2 samples per GPU) auto_scale_lr dict(enableFalse, base_batch_size16)关键点模型从 COCO 的 Faster R-CNN 基础配置继承只需将roi_head.bbox_head.num_classes改为 20 即可适配 VOCmilestones[3]表示在第 3 个 epoch即实际第 9 次全量数据时学习率衰减为原来的 0.1auto_scale_lr记录了 8 卡 × 2 样本/卡 16 的基准 batch size用于官方在卡数变化时按比例自动缩放学习率本配置默认关闭enableFalse。retinanet_r50_fpn_1x_voc0712.py 结构与上述完全同构仅将模型改为 RetinaNet 并把num_classes20写在bbox_head层级训练超参一致lr0.01、milestones[3]、4 epochs最终 box AP 为 77.3。4.2 Faster R-CNN C4 R-50caffe 风格18k 迭代configs/pascal_voc/faster-rcnn_r50-caffe-c4_ms-18k_voc0712.py 演示了与 epoch 式训练完全不同的迭代式训练方案# 训练计划18000 次迭代每 3000 次迭代验证一次 max_iter 18000 train_cfg dict(_delete_True, typeIterBasedTrainLoop, max_itersmax_iter, val_interval3000) # 学习率前 100 次迭代线性预热之后在第 12000/16000 次迭代衰减 param_scheduler [ dict(typeLinearLR, start_factor0.001, by_epochFalse, begin0, end100), dict(typeMultiStepLR, begin0, endmax_iter, by_epochFalse, milestones[12000, 16000], gamma0.1) ] # 优化器SGD初始学习率 0.02 optim_wrapper dict(typeOptimWrapper, optimizerdict(typeSGD, lr0.02, momentum0.9, weight_decay0.0001)) default_hooks dict(checkpointdict(by_epochFalse, interval3000)) log_processor dict(by_epochFalse)该配置通过_delete_True显式覆盖继承自schedule_1x.py的训练循环改为IterBasedTrainLoopdefault_hooks与log_processor同样切换为按迭代iteration工作。其训练管线覆盖为RandomChoiceResize短边 480–800 共 11 档随机选择的多尺度方案是表内 AP 最高80.9的配置。4.3 SSD300 / SSD512VGG16120 epochsssd300_voc0712.pySSD512 为其 512 输入版本演示了单阶段检测器在 VOC 上的配置model dict(bbox_headdict( num_classes20, anchor_generatordict(basesize_ratio_range(0.2, 0.9)))) input_size 300 train_dataloader dict( batch_size8, num_workers3, datasetdict( # RepeatDataset # 数据集重复 10 次训练计划为 2x因此实际 epoch 12 * 10 120 times10, ... )) # 学习率前 500 次迭代线性预热之后在第 16/20 epoch 衰减 param_scheduler [ dict(typeLinearLR, start_factor0.001, by_epochFalse, begin0, end500), dict(typeMultiStepLR, begin0, end24, by_epochTrue, milestones[16, 20], gamma0.1) ] optim_wrapper dict(typeOptimWrapper, optimizerdict(typeSGD, lr1e-3, momentum0.9, weight_decay5e-4)) custom_hooks [ dict(typeNumClassCheckHook), dict(typeCheckInvalidLossHook, interval50, priorityVERY_LOW) ] auto_scale_lr dict(base_batch_size64) # (8 GPUs) x (8 samples per GPU)SSD 的特点在于basesize_ratio_range(0.2, 0.9)控制锚框基准尺寸范围训练管线使用Expand随机扩展图像、MinIoURandomCropIoU 阈值 0.1–0.9 的随机裁剪与PhotoMetricDistortion亮度/对比度/饱和度/色相扰动来提升小目标与密集场景的鲁棒性优化器学习率降低至 1e-3 并配合 weight_decay5e-4CheckInvalidLossHook每 50 次迭代检查 loss 是否异常。五、数据集实现源码VOCDataset 与 XMLDatasetmmdetection 中 VOC 数据的解析链路由两个类组成XMLDataset通用 XML 检测数据集基类与VOCDatasetPascal VOC 专用子类。5.1 VOCDataset注册与元信息mmdet/datasets/voc.py 中VOCDataset通过DATASETS.register_module()注册其核心是METAINFO包含 20 个类别名与用于可视化的调色板paletteDATASETS.register_module() class VOCDataset(XMLDataset): METAINFO { classes: (aeroplane, bicycle, bird, boat, bottle, bus, car, cat, chair, cow, diningtable, dog, horse, motorbike, person, pottedplant, sheep, sofa, train, tvmonitor), palette: [(106, 0, 228), (119, 11, 32), (165, 42, 42), (0, 0, 192), (197, 226, 255), (0, 60, 100), (0, 0, 142), (255, 77, 255), (153, 69, 1), (120, 166, 157), (0, 182, 199), (0, 226, 252), (182, 182, 255), (0, 0, 230), (220, 20, 60), (163, 255, 0), (0, 82, 0), (3, 95, 161), (0, 80, 100), (183, 130, 88)] } def __init__(self, **kwargs): super().__init__(**kwargs) if VOC2007 in self.sub_data_root: self._metainfo[dataset_type] VOC2007 elif VOC2012 in self.sub_data_root: self._metainfo[dataset_type] VOC2012 else: self._metainfo[dataset_type] None__init__中的逻辑正是第三节提到的dataset_typemetainfo 的来源根据data_prefix.sub_data_root中是否包含VOC2007/VOC2012写入不同的数据集类型标识。5.2 XMLDatasetXML 解析与数据过滤mmdet/datasets/xml_style.py 实现了完整的解析流程其关键约定包括目录默认值图像默认存放于JPEGImages/子目录标注默认位于Annotations/子目录img_subdirJPEGImages、ann_subdirAnnotations加载方式load_data_list从ann_file逐行读取图像 ID拼接出{img_id}.jpg与{img_id}.xml路径xml_style.pyXML 解析parse_data_info使用标准库xml.etree.ElementTree解析标注读取size节点得到宽高若缺失则退回从图像解码获取并调用_parse_instance_info提取每个object的类别名、difficult标志与bndbox坐标xml_style.pyVOC 坐标约定解析时默认minus_oneTrue即所有 bbox 坐标统一减 1——这是 VOC 标注从 1 开始计数、而检测框架从 0 开始计数的历史约定difficult 与 ignore 语义difficult1的目标或尺寸小于bbox_min_size的框被标记为ignore_flag1在评测与训练中作为忽略区域处理不参与 AP 计算数据过滤filter_data根据filter_cfg中的filter_empty_gt过滤无目标图像与min_size过滤短边过小图像完成训练集清洗xml_style.py。5.3 数据准备与格式转换VOC 原始数据VOC2007/、VOC2012/需解压至data/VOCdevkit/目录mmdetection 提供了 tools/dataset_converters/pascal_voc.py 转换脚本用于将 VOC 标注转换为 COCO JSON 格式以便配合CocoDataset使用——faster-rcnn_r50_fpn_1x_voc0712-cocofmt.py 正是该用法的示例它以CocoDataset读取annotations/voc0712_trainval.json与annotations/voc07_test.json通过metainfoMETAINFO显式传入 VOC 的 20 类元信息并使用CocoMetric评测。六、评测实现VOCMetric 与 11points 协议mmdet/evaluation/metrics/voc_metric.py 中注册了VOCMetric其构造参数与默认值如下class VOCMetric(BaseMetric): default_prefix pascal_voc def __init__(self, iou_thrs: float | List[float] 0.5, scale_ranges: List[tuple] | None None, metric: str | List[str] mAP, proposal_nums: Sequence[int] (100, 300, 1000), eval_mode: str 11points, collect_device: str cpu, prefix: str | None None):iou_thrsIoU 阈值默认 0.5即 VOC 标准的 PASCAL 匹配规则metric可选mAP或recall其余值会抛出KeyErroreval_mode支持area与11points两种 AP 计算方式——area计算 PR 曲线下面积11points在召回率 [0, 0.1, ..., 1] 共 11 个点处取精度插值平均VOC2007 默认 11points、VOC2012 默认 area因此基础配置中显式写明eval_mode11pointsproposal_nums评测 recall 时使用的候选框数量100/300/1000。训练与验证阶段评测器默认挂在验证循环上配置文件中val_evaluator dict(typeVOCMetric, metricmAP, eval_mode11points)会在每个val_interval周期后计算 mAP 并输出pascal_voc/mAP指标。七、训练与测试命令VOC 配置与 COCO 配置共用 mmdetection 的训练/测试入口可直接通过命令行运行命令需在 mmdetection 仓库根目录执行# 训练 Faster R-CNN R-50 FPN单卡 python tools/train.py configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py # 分布式训练8 卡 bash tools/dist_train.sh configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py 8 # 使用训练好的权重测试并评测 python tools/test.py configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py \ work_dirs/faster-rcnn_r50_fpn_1x_voc0712/epoch_4.pth # 分布式测试 bash tools/dist_test.sh configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py \ work_dirs/faster-rcnn_r50_fpn_1x_voc0712/epoch_4.pth 8其中tools/train.py与tools/test.py分别是训练与测试的统一入口脚本默认输出目录为work_dirs/配置文件名/。若在 slurm 集群上运行可使用 tools/slurm_train.sh 与 tools/slurm_test.sh。训练前请确保 VOC 数据集已按data/VOCdevkit/VOC2007/、data/VOCdevkit/VOC2012/布局就位且安装了 requirements见 requirements.txt。八、引用本文数据与配置来源对应 VOC 挑战赛的原始论文引用信息如下Article{Everingham10, author Everingham, M. and Van~Gool, L. and Williams, C. K. I. and Winn, J. and Zisserman, A., title The Pascal Visual Object Classes (VOC) Challenge, journal International Journal of Computer Vision, volume 88, year 2010, number 2, month jun, pages 303--338, }总结Pascal VOC 作为目标检测的经典基准在 mmdetection 中拥有完整的一站式支持从 configs/base/datasets/voc0712.py 定义的 VOC0712 训练协议0712 trainval 拼接、重复 3 次、07 test 验证到VOCDataset/XMLDataset的 XML 标注解析再到VOCMetric的 11points 评测以及 Faster R-CNNFPN/C4、RetinaNet、SSD 等 5 个官方复现配置。理解这套协议与配置即可快速在 VOC 上复现经典模型结果也能为将自定义数据集迁移到 mmdetection 提供可参考的范式。【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址: https://gitcode.com/gh_mirrors/mm/mmdetection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

StarRocks ADMIN CANCEL REPAIR 详解:取消指定表/分区的高优先级副本修复调度 2026/9/19 21:04:45

StarRocks ADMIN CANCEL REPAIR 详解:取消指定表/分区的高优先级副本修复调度

数据库OLAP数据仓库大数据湖仓一体数据分析 【免费下载链接】starrocks The worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class perfo…

阅读更多 →
Slang 内存模型完全指南:地址空间、内存一致性、原子操作与内存屏障 2026/9/19 21:04:45

Slang 内存模型完全指南:地址空间、内存一致性、原子操作与内存屏障

Slang 内存模型完全指南:地址空间、内存一致性、原子操作与内存屏障 【免费下载链接】slang Making it easier to work with shaders 项目地址: https://gitcode.com/GitHub_Trending/sl/slang Slang 是一种面向 GPU 着色器与并行计算的语言,其内…

阅读更多 →
2025年AI自动生成PPT工具实测:五类工具选型与二次处理指南 2026/9/19 21:04:45

2025年AI自动生成PPT工具实测:五类工具选型与二次处理指南

1. 为什么“自动生成PPT”这件事在2025年突然变得靠谱了如果你在过去两三年里试过所谓的“AI一键生成PPT”,大概率体验不会太好:排版错位、配色辣眼、图表和正文对不上号,最后还得手动返工,比从头做还累。但到了2025年&#xff0c…

阅读更多 →
3套提示词模板讲清交通优化方案:打开提示词资源库就能改 2026/9/19 21:04:45

3套提示词模板讲清交通优化方案:打开提示词资源库就能改

3套提示词模板讲清交通优化方案:打开提示词资源库就能改 【免费下载链接】awesome-prompts Curated list of chatgpt prompts from the top-rated GPTs in the GPTs Store. Prompt Engineering, prompt attack & prompt protect. Advanced Prompt Engineering p…

阅读更多 →
随机信号处理仿真入门:从白噪声到功率谱估计的完整实践指南 2026/9/19 21:04:45

随机信号处理仿真入门:从白噪声到功率谱估计的完整实践指南

简介:南京理工大学随机信号处理仿真报告以伪随机相位编码脉冲雷达为核心案例,系统讲解伪随机编码信号原理、雷达不模糊距离与不模糊速度的制约关系、距离/速度分辨力的影响因素,以及多普勒敏感现象和多普勒容限等关键理论。实验部分通过m序列…

阅读更多 →
Hugo Page 方法 HasMenuCurrent:精准标记导航菜单祖先级高亮状态 2026/9/19 21:01:44

Hugo Page 方法 HasMenuCurrent:精准标记导航菜单祖先级高亮状态

Hugo Page 方法 HasMenuCurrent:精准标记导航菜单祖先级高亮状态 【免费下载链接】hugo The world’s fastest framework for building websites. 项目地址: https://gitcode.com/gh_mirrors/hu/hugo 导读 HasMenuCurrent 是 Hugo 模板系统中用于判断"…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞