MMDetection 使用 VISION-Datasets 训练工业缺陷检测模型:数据集准备、COCO 配置与实战指南
MMDetection 使用 VISION-Datasets 训练工业缺陷检测模型数据集准备、COCO 配置与实战指南【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址: https://gitcode.com/gh_mirrors/mm/mmdetectionVISION Datasets 是面向视觉工业检测Vision-based InduStrial InspectiON的基准数据集包含 14 个子数据集、约 1.8 万张工业图像与 44 类缺陷标注。本文基于 MMDetection 仓库中的 projects/VISION-Datasets/README.md完整讲解该数据集的下载、解压与目录组织方法并结合仓库源码与现有 COCO 配置文件给出在 MMDetection 3.x 下接入 Mask R-CNN 等检测/实例分割模型的完整配置与训练、评测、推理实战方案。一、VISION-Datasets 是什么面向工业质检的缺陷检测基准1.1 数据集背景与设计动机在视觉检测算法持续进步的背景下真实工业场景仍面临三大痛点数据可用性不足、数据质量参差不齐、生产工艺要求复杂多变。VISION Datasets 正是针对这些问题设计的一个工业质检基准其核心特色包括14 个工业检测子数据集覆盖线缆Cable、电容Capacitor、铸造件Casting、控制台Console、圆柱件Cylinder、电子产品Electronics、沟槽Groove、半球件Hemisphere、镜片Lens、PCB 电路板PCB_1 / PCB_2、环形件Ring、螺丝Screw、木材Wood等典型工业品。总计约 1.8 万张图像、44 类缺陷力求贴近真实生产场景的多样性。所有划分split均提供标注掩码annotation masks可同时支持缺陷检测与实例分割等多种检测范式。提供实例分割标注可支撑更精确的缺陷定位与识别。数据集托管于 HuggingFace仓库 README 中给出的下载地址为https://huggingface.co/datasets/VISION-Workshop/VISION-Datasets并配套有持续进行的挑战赛以推动工业视觉检测的发展。在 MMDetection 中对 VISION 数据集的支持由 PR #10530 引入随 v3.1.0 版本一同发布见 docs/en/notes/changelog.md 中的Support VISION dataset (#10530)记录。1.2 为什么适合接入 MMDetectionMMDetection 3.x 的CocoDataset实现见 mmdet/datasets/coco.py原生支持 COCO 格式的标注而 VISION 数据集每个子集都提供_annotations.coco.json标注文件。这意味着你无需编写任何新的 Dataset 类只需把数据按 COCO 目录规范组织好再在配置文件中把dataset_type设为CocoDataset、把data_root指向对应子集即可完成接入检测与实例分割任务均可覆盖。二、数据集准备下载、解压与目录组织2.1 下载与目录放置首先从https://huggingface.co/datasets/VISION-Workshop/VISION-Datasets下载全部压缩包然后在 MMDetection 仓库根目录下建立data/VISION-Datasets/目录并按如下结构放置对应 README 中的组织方式mmdetection ├── mmdet ├── tools ├── configs ├── data │ └── VISION-Datasets │ ├── Cable.tar.gz │ ├── Capacitor.tar.gz │ ├── Casting.tar.gz │ ├── Console.tar.gz │ ├── Cylinder.tar.gz │ ├── Electronics.tar.gz │ ├── Groove.tar.gz │ ├── Hemisphere.tar.gz │ ├── Lens.tar.gz │ ├── PCB_1.tar.gz │ ├── PCB_2.tar.gz │ ├── Ring.tar.gz │ ├── Screw.tar.gz │ ├── Wood.tar.gz │ └── README.md2.2 一键解压脚本压缩包全部为.tar.gz格式。将下面的内容保存为vision_unzip.sh放在mmdetection 根目录下然后执行bash vision_unzip.sh即可完成批量解压#!/usr/bin/env bash for file in data/VISION-Datasets/*.tar.gz; do tar -xzvzf $file -C data/VISION-Datasets/ done该脚本会遍历data/VISION-Datasets/下的所有.tar.gz文件并逐个解压到同一目录。-x表示解压-z表示通过 gzip 解压-v输出详细过程便于确认-f指定文件-C指定解压目标目录。2.3 解压后的目录结构解压完成后每个子数据集以 Cable 为例内部的组织格式如下mmdetection ├── mmdet ├── tools ├── configs ├── data │ └── VISION-Datasets │ ├── Cable.tar.gz │ ├── Capacitor.tar.gz │ ├── ...其余 .tar.gz 压缩包保留 │ ├── README.md │ ├── Cable │ │ ├── train │ │ │ ├── _annotations.coco.json # COCO 格式标注文件 │ │ │ ├── 000001.png # 训练图像 │ │ │ ├── 000002.png │ │ │ └── xxxxxx.png │ │ ├── val │ │ │ ├── _annotations.coco.json # COCO 格式标注文件 │ │ │ └── xxxxxx.png # 验证图像 │ │ └── inference │ │ ├── _annotations.coco.json # 仅含未标注图像列表的 COCO 文件 │ │ └── xxxxxx.png # 推理图像 │ └── ...其余子数据集解压结果关键点每个子集train / val / inference目录下都有一个_annotations.coco.json其中train 与 val 的标注文件包含真实标注而inference 的标注文件仅包含未标注的图像列表专用于推理与测试阶段。图像文件统一为.png格式命名以000001.png依次递增以 Cable 为例。训练/验证目录结构与 COCO 标准布局天然对齐标注文件与图像位于同一目录便于通过ann_file与data_prefix直接定位。三、在 MMDetection 中配置 VISION 数据集以 Mask R-CNN 为例VISION 数据以 COCO 格式组织因此直接复用 MMDetection 的CocoDataset与CocoMetric。下面以实例分割任务为例从基础配置出发给出完整接入方法。3.1 从现有 COCO 配置出发MMDetection 为 COCO 实例分割提供的官方配置是 configs/mask_rcnn/mask-rcnn_r50_fpn_1x_coco.py它由四个基础配置拼接而成_base_ [ ../_base_/models/mask-rcnn_r50_fpn.py, ../_base_/datasets/coco_instance.py, ../_base_/schedules/schedule_1x.py, ../_base_/default_runtime.py ]对 VISION 数据集而言模型、训练计划与运行时配置均可保持不变只需重写数据集相关配置。以Cable子集为例推荐在configs/下新建配置文件并重写_base_ [ ../_base_/models/mask-rcnn_r50_fpn.py, ../_base_/schedules/schedule_1x.py, ../_base_/default_runtime.py ] dataset_type CocoDataset data_root data/VISION-Datasets/Cable/ train_pipeline [ dict(typeLoadImageFromFile, backend_argsNone), dict(typeLoadAnnotations, with_bboxTrue, with_maskTrue), dict(typeResize, scale(1333, 800), keep_ratioTrue), dict(typeRandomFlip, prob0.5), dict(typePackDetInputs) ] test_pipeline [ dict(typeLoadImageFromFile, backend_argsNone), dict(typeResize, scale(1333, 800), keep_ratioTrue), # 若没有 GT 标注删除下面这行 dict(typeLoadAnnotations, with_bboxTrue, with_maskTrue), dict( typePackDetInputs, meta_keys(img_id, img_path, ori_shape, img_shape, scale_factor)) ] train_dataloader dict( batch_size2, num_workers2, persistent_workersTrue, samplerdict(typeDefaultSampler, shuffleTrue), batch_samplerdict(typeAspectRatioBatchSampler), datasetdict( typedataset_type, data_rootdata_root, ann_filetrain/_annotations.coco.json, data_prefixdict(imgtrain/), filter_cfgdict(filter_empty_gtTrue, min_size32), pipelinetrain_pipeline, backend_argsNone)) val_dataloader dict( batch_size1, num_workers2, persistent_workersTrue, drop_lastFalse, samplerdict(typeDefaultSampler, shuffleFalse), datasetdict( typedataset_type, data_rootdata_root, ann_fileval/_annotations.coco.json, data_prefixdict(imgval/), test_modeTrue, pipelinetest_pipeline, backend_argsNone)) test_dataloader val_dataloader val_evaluator dict( typeCocoMetric, ann_filedata_root val/_annotations.coco.json, metric[bbox, segm], format_onlyFalse, backend_argsNone) test_evaluator val_evaluator3.2 关键配置项说明dataset_type CocoDatasetVISION 的标注为 COCO 格式直接使用CocoDataset注册于 mmdet/datasets/coco.py其load_data_list()通过_annotations.coco.json加载图像与标注ANN_ID_UNIQUE True会校验标注 id 唯一性若解压后的标注不符合该约束极小概率的脏数据情况训练会直接报错提示。data_root指向单个子数据集目录如data/VISION-Datasets/Cable/。注意训练某个子集时data_root应指向该子集而非整个VISION-Datasets目录。ann_file与data_prefix因为标注文件与图像位于同一子目录如train/ann_filetrain/_annotations.coco.json、data_prefixdict(imgtrain/)即可完成定位。这与 COCO 官方布局annotations/instances_train2017.jsontrain2017/略有差异但CocoDataset.parse_data_info()会通过data_prefix[img]拼接图像路径两种布局均可正常解析。metric[bbox, segm]CocoMetric同时输出框bbox与掩码segm指标对应 VISION 数据集的缺陷检测 实例分割双任务能力若只做检测可改为metric[bbox]。filter_cfgdict(filter_empty_gtTrue, min_size32)过滤掉没有 GT 或尺寸过小的样本避免空标注干扰训练。3.3 关于类别数与模型头VISION 数据集共包含 44 类缺陷但并非每个子集都包含全部类别。子集标注中的类别即该子集的缺陷类别集合。因此在使用 COCO 预训练权重微调时需要将模型头中的num_classes改为目标子集的真实缺陷类别数。以 Mask R-CNN 为例基础配置 configs/base/models/mask-rcnn_r50_fpn.py 中bbox_head的num_classes80COCO 类别数接入 VISION 时应在你的新配置中通过model字段覆盖为对应子集的类别数例如model dict( roi_headdict( bbox_headdict(num_classes你的子集缺陷类别数), mask_headdict(num_classes你的子集缺陷类别数)))提示可以通过读取子集的_annotations.coco.json中的categories字段确认实际类别数也可以在配置中使用metainfo指定类别名若标注文件缺失 categories 字段。具体类别数请以你下载数据集的标注文件为准。四、训练、评测与推理实战4.1 单卡训练配置完成后用 tools/train.py 启动训练python tools/train.py configs/vision/mask-rcnn_r50_fpn_1x_cable.py --work-dir work_dirs/mask-rcnn_cable常用参数参数说明config训练配置文件路径必填--work-dir日志与权重保存目录--amp开启自动混合精度训练--auto-scale-lr自动按 batch size 缩放学习率--resume断点续训指定 checkpoint 路径则从该权重恢复不指定则自动从 work-dir 中最新权重恢复--cfg-options命令行覆盖配置项如--cfg-options model.roi_head.bbox_head.num_classes54.2 多卡分布式训练使用仓库自带的 tools/dist_train.shbash tools/dist_train.sh configs/vision/mask-rcnn_r50_fpn_1x_cable.py 8其中8为 GPU 数量Slurm 集群用户可改用 tools/slurm_train.sh。4.3 评测用 tools/test.py 在验证集上评估python tools/test.py configs/vision/mask-rcnn_r50_fpn_1x_cable.py work_dirs/mask-rcnn_cable/best_coco_bbox_mAP_epoch_12.pth --out results.pklCocoMetric会输出bbox_mAP、segm_mAP等指标多卡评测使用 tools/dist_test.sh。由于 VISION 数据集中推理划分的_annotations.coco.json不含标注评测务必在val划分上进行。4.4 推理与可视化使用 demo/image_demo.py 进行单图推理python demo/image_demo.py data/VISION-Datasets/Cable/val/000001.png \ configs/vision/mask-rcnn_r50_fpn_1x_cable.py \ work_dirs/mask-rcnn_cable/best_coco_bbox_mAP_epoch_12.pth \ --pred-score-thr 0.3若需要对测试划分无标注批量生成推理结果可仿照 configs/base/datasets/coco_instance.py 末尾注释中的test_dataloader写法将ann_file指向inference/_annotations.coco.json并设置test_evaluator dict(typeCocoMetric, metric[bbox, segm], format_onlyTrue, outfile_prefix./work_dirs/vision_inference/test)此时不会计算指标仅输出格式化结果文件。五、源码级原理补充5.1 数据加载链路接入 VISION 数据集的整个数据流不需要任何自定义代码链路如下配置文件中指定dataset_typeCocoDataset注册器DATASETS从 mmdet/datasets/init.py 找到 CocoDataset 类CocoDataset.load_data_list()读取_annotations.coco.json通过COCOAPI见 mmdet/datasets/api_wrappers加载图像 id、标注 id 与类别映射并校验标注 id 全局唯一ANN_ID_UNIQUE Trueparse_data_info()根据data_prefix[img]拼接图像路径并解析 bbox 与 mask 标注送入训练/测试 pipeline训练时由train_pipeline中的LoadImageFromFile、LoadAnnotationswith_bboxTrue, with_maskTrue等完成读取与增强详见 mmdet/datasets/transforms。5.2 评测链路CocoMetric使用验证集标注计算bbox/segm指标底层调用 COCO API 的评估逻辑当format_onlyTrue时不计算指标而只导出结果 JSON适用于无标注的 inference 划分。六、多子集扩展如何批量训练全部 14 个子集VISION 包含 14 个子数据集若需要逐个训练最直接的做法是为每个子集复制一份配置文件仅修改data_root、ann_file、data_prefix与num_classes。也可以利用--cfg-options复用同一个模板配置例如python tools/train.py configs/vision/mask-rcnn_r50_fpn_1x_vision.py \ --cfg-options data_rootdata/VISION-Datasets/PCB_1/ \ model.roi_head.bbox_head.num_classes10 \ model.roi_head.mask_head.num_classes10 \ --work-dir work_dirs/mask-rcnn_pcb1说明data_root修改后ann_filetrain/_annotations.coco.json与data_prefixdict(imgtrain/)的相对定位依然成立各子集类别数以各自_annotations.coco.json为准训练前请务必核对并覆盖num_classes。七、引用若你在论文或报告中使用了 VISION Datasets请按 README 中给出的 BibTeX 引用article{vision-datasets, title {VISION Datasets: A Benchmark for Vision-based InduStrial InspectiON}, author {Haoping Bai, Shancong Mou, Tatiana Likhomanenko, Ramazan Gokberk Cinbis, Oncel Tuzel, Ping Huang, Jiulong Shan, Jianjun Shi, Meng Cao}, journal {arXiv preprint arXiv:2306.07890}, year {2023}, }八、参考资源数据集接入说明projects/VISION-Datasets/README.md另见 projects/VISION-Datasets/README_zh-CN.md 中文版数据集支持引入记录docs/en/notes/changelog.mdCOCO 数据集实现mmdet/datasets/coco.py官方 COCO 实例分割配置configs/mask_rcnn/mask-rcnn_r50_fpn_1x_coco.py、configs/base/datasets/coco_instance.pyMask R-CNN 模型配置configs/base/models/mask-rcnn_r50_fpn.py训练/评测/推理脚本tools/train.py、tools/test.py、tools/dist_train.sh、tools/dist_test.sh、demo/image_demo.py【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址: https://gitcode.com/gh_mirrors/mm/mmdetection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

软件开发内部培训PPT教案设计方法论

软件开发内部培训PPT教案设计方法论

简介:本资源是一份面向计算机专业本科生、软件工程初学者及转行开发者的系统性学习课件,聚焦软件工程核心概念与主流开发模型,旨在帮助读者理解并应对软件危机、掌握规范化开发流程。课件以PPTX格式呈现,共1个文件(327…

2026/9/20 3:26:19 阅读更多 →
Trae AI 与 VSCode 接入第三方中转 API 配置指南:多模型调用与报错排查

Trae AI 与 VSCode 接入第三方中转 API 配置指南:多模型调用与报错排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 3:26:19 阅读更多 →
小麦种子麦粒质量评估质检图像分类数据集2406张6类别

小麦种子麦粒质量评估质检图像分类数据集2406张6类别

数据集类型:图像分类用,不可用于目标检测无标注文件数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片图片数量(jpg文件个数):2604所在github仓库:firc-dataset分类类别数:6类别名称…

2026/9/20 3:25:19 阅读更多 →

最新新闻

C盘被 odis_download_dest 塞满?CAD与诊断软件缓存堆积清理全攻略

C盘被 odis_download_dest 塞满?CAD与诊断软件缓存堆积清理全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 4:14:02 阅读更多 →
Codex 历史会话列表消失?数据恢复与索引重建指南

Codex 历史会话列表消失?数据恢复与索引重建指南

1. 会话没丢,只是列表不见了:问题到底出在哪Codex 用久了,最让人心里一紧的场景不是模型报错,而是某天打开 CLI,发现历史会话列表空了。那一瞬间脑子里闪过的念头通常是“完了,记录被清了”。但实际情况往往…

2026/9/20 4:14:02 阅读更多 →
流媒体测试地址全解析:RTSP、RTMP、M3U8、FLV、MP4实测与本地搭建

流媒体测试地址全解析:RTSP、RTMP、M3U8、FLV、MP4实测与本地搭建

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 4:14:02 阅读更多 →
IsaacLab VSCode调试配置踩坑记:3步解决ModuleNotFoundError报错

IsaacLab VSCode调试配置踩坑记:3步解决ModuleNotFoundError报错

IsaacLab VSCode调试配置踩坑记:3步解决ModuleNotFoundError报错 【免费下载链接】IsaacLab Unified framework for robot learning with multi-physics/renderer support 项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab 概览:在Isa…

2026/9/20 4:14:02 阅读更多 →
IDEA集成Claude Code与Codex:AI编程代理实战指南

IDEA集成Claude Code与Codex:AI编程代理实战指南

1. 为什么偏偏是 IDEA:IDE 与 AI 编程助手的合体逻辑先说结论:Claude Code 和 Codex 这类终端型 AI 编程工具,单独用只是“半个神器”,真正让它们起飞的关键,是把它们塞进 IDEA 这个“老巢”里。我在过去大半年里&…

2026/9/20 4:14:02 阅读更多 →
RTX 50 显卡跑不动 IsaacLab?版本冲突根因与两条快速修复路径全解

RTX 50 显卡跑不动 IsaacLab?版本冲突根因与两条快速修复路径全解

RTX 50 显卡跑不动 IsaacLab?版本冲突根因与两条快速修复路径全解 【免费下载链接】IsaacLab Unified framework for robot learning with multi-physics/renderer support 项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab 你刚把 IsaacLab 装完…

2026/9/20 4:13:02 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →