ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

QualityInspector 工业质检数据集准备实战:以磁砖缺陷数据为例的三种任务格式转换全指南

QualityInspector 工业质检数据集准备实战:以磁砖缺陷数据为例的三种任务格式转换全指南 人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载工业缺陷数据集通常没有统一的数据组织形式而 QualityInspector 工业质检全流程解决方案支持检测、分割、检测RoI 分割串联等多种任务方案不同方案对数据格式的要求各不相同。本文以 Magnetic-tile-defect磁砖表面缺陷公开数据集为例完整讲解如何在 QualityInspector 中把一份原始缺陷图像数据逐步转换为 PaddleSeg 全图分割、RoI 区域分割和 COCO 检测标注三种标准格式并深入解析 tools/dataset/MT_dataset.py、tools/convert_tools/ 下三个转换工具的源码实现与参数含义。读完本文你将能够独立完成任意工业质检数据集从原始标注到多任务训练输入的整理工作并知晓转换后的数据如何接入检测、RoI 分割与端到端全流程配置。一、背景工业质检数据为何需要三步转换工业质检场景数据存在两个显著特点数据集组织形式不统一不同厂商、不同产线、不同论文发布的缺陷数据集其文件组织、标签编码方式千差万别难以直接喂给统一的训练框架任务方案多样QualityInspector 支持检测、分割单模型以及检测RoI 分割串联结合后处理的解决方案见 QualityInspector README 简介每种方案需要的标注输入格式不同。因此QualityInspector 在 tools/dataset/ 和 tools/convert_tools/ 中提供了一组数据通用工具脚本以先统一为全图分割格式再按需派生其他任务格式的思路完成数据准备流程可概括为下载原始数据集了解其目录结构与标签编码转换为全图分割训练格式PaddleSeg 标准images/annos/train.txt/val.txt按需派生需要区域分割则转 RoI 格式需要检测/实例分割则转 COCO 格式 json需要标注则配合 EISeg 等工具详见 数据分析工具 与 PaddleSeg 数据标注说明 marker_cn.md。下面以磁砖缺陷数据为例逐步展开。二、公开数据集下载与原始目录结构2.1 数据集来源与类别Magnetic-tile-defect-datasets 是论文 Saliency of magnetic tile surface defects 发布的磁砖表面缺陷数据集收集了6 类常见磁砖图像其中 Free 为正常无缺陷 OK 图并提供了像素级标注分割掩码。数据集示例可视化如下图所示上、下两组分别展示各缺陷类别的原始磁砖灰度图Image与其像素级标注掩码GT白色区域精确标定缺陷位置与范围Free 类掩码为全黑。2.2 原始目录结构将下载的数据集解压保存到dataset目录后其组织方式为按缺陷类别分目录、每目录下Imgs存放图像与同名 PNG 标注Magnetic-Tile-Defect | |--MT_Blowhole | |--Imgs | | |--exp1_xxx.jpg | | |--exp1_xxx.png | | ... |--MT_Break | |--Imgs | | |--exp1_xxx.jpg | | |--exp1_xxx.png | | ... | ... |--MT_Free | |--Imgs |--MT_Uneven | |--Imgs从转换脚本源码 MT_dataset.py 可以确认 6 个类别与标签 id 的对应关系类别目录类别名称标签 id含义MT_FreeFree0无缺陷作为背景MT_BlowholeBlowhole1气孔MT_BreakBreak2断裂MT_CrackCrack3裂纹MT_FrayFray4磨损/破损MT_UnevenUneven5表面不均注意背景Free的标签 id 是 0其余 5 类缺陷 id 为 1~5。这直接决定了后续转换命令中--class_num 5的含义——class_num统计的是除背景外的缺陷类别数。三、转换为全图分割训练数据格式PaddleSeg 标准格式3.1 转换命令下载原始数据集后执行以下命令完成转换dataset_path为原始数据目录output_path为保存目录python3 tools/dataset/MT_dataset.py --dataset_path ./dataset/Magnetic-Tile-Defect --output_path ./dataset/MT_dataset/执行完成后转换结果保存在dataset/MT_dataset/路径下为标准 PaddleSeg 分割训练格式。3.2 输出目录结构MT_dataset | |--images | |--train | | |--exp1_xxx.jpg | | |--exp1_xxx.jpg | | ... | |--val | | |--exp6_xxx.jpg | | |--exp6_xxx.jpg |--annos | |--train | | |--exp1_xxx.png | | |--exp1_xxx.png | | ... | |--val | | |--exp6_xxx.png | | |--exp6_xxx.png |--train.txt |--val.txt其中train.txt和val.txt每一行保存一对原图路径 对应标签图像路径供分割训练直接读取。3.3 源码原理剖析从 MT_dataset.py 源码可以看到转换的核心逻辑训练/验证划分规则L30-L31以文件名的 exp 前缀划分TRAIN_PREFIX [exp0, exp1, exp2, exp3, exp4]归入 trainVAL_PREFIX [exp5, exp6]归入 val前缀不匹配任何集合时抛出ValueError标注二值化L92-L94用cv2.imread(..., -1)以灰度模式读取与图像同名的 PNG 标注将像素值 240的置为 0背景 240的置为当前类别的标签 id从而把原始灰度标注归一化为 0~5 的类别索引图Free 类处理Free 的标签 id 为 0其标注经过二值化后全部为 0即全黑背景图作为无缺陷负样本参与训练列表文件生成L102-L115同步向train.txt/val.txt写入图像路径 空格 标注路径。实用提示来自源码的细节源码中 L60-L65 实际创建的标注目录名为anno单数而文档示例结构写作annos。运行脚本后请以实际生成目录名为准在后续命令中正确指定--anno_path否则会因目录不存在而报错。四、全图分割数据转 RoI 分割文件若希望尝试检测RoI 分割的质检方案RoI 分割模块只对检测框裁剪出的区域做缺陷分割需要将全图分割标签转为 RoI 区域分割格式。完整工具说明见 数据转换工具。4.1 转换命令python3 tools/convert_tools/convert_mask_to_RoI.py --image_path dataset/MT_dataset/images/train --anno_path dataset/MT_dataset/annos/train --class_num 5 --output_path dataset/MT_dataset/RoI/ --suffix .png --to_binary磁砖数据除去背景共 5 类缺陷因此--class_num填 5。4.2 参数说明参数名含义默认值--image_path需要转化的原图目录必填--anno_path原图对应的分割标签目录必填--class_num除背景外的分割类别数必填--to_binary是否将标签转为 2 类0 背景 / 1 前景训练False--suffix标签文件名相对图像名的后缀含扩展名如xxx.jpg对应xxx.png时填.png.png--pad_scale裁剪框的 pad 尺度0.5--output_pathRoI 图像、标签与列表的保存目录./output/RoI/4.3 输出与源码原理转换后得到三部分产物见 convert_mask_to_RoI.pyoutput_path/images/RoI 裁剪图像文件名为原始图像名 类别 id RoI id如exp1_xxx_1_3.pngoutput_path/anno/对应的 RoI 分割标签0 为背景1 为前景指定--to_binary时output_path/RoI.txt图像与标签路径列表每行一对供分割训练直接使用。源码处理流程L108-L133对每个类别 id 构造类别掩码class_map等于该 id 的像素置 1用cv2.connectedComponentsWithStats找出每个缺陷的连通域及其包围盒调用 bbox_utils.adjust_bbox 对包围盒做先补成正方形、再按pad_scale向外扩边的处理并裁剪图像与标签--to_binary开启时将裁剪标签中所有 0的像素置 1使 RoI 分割退化为前景/背景二分类磁砖案例中即缺陷/无缺陷二分类。该输出正对应 RoI 分割训练配置的输入在 ocrnet_hrnetw18_RoI_defect_256x256_40k.yml 中train_path指向dataset/MT_dataset/RoI/train/RoI.txtval_path指向dataset/MT_dataset/RoI/val/RoI.txt且num_classes: 2。五、全图分割数据转 COCO 格式 json 文件若希望尝试检测或实例分割算法需要把全图分割标签转换为 COCO 格式的 json 标注文件。完整工具说明见 数据转换工具。5.1 转换命令python3 tools/convert_tools/convert_mask_to_coco.py --image_path dataset/MT_dataset/images/train --anno_path dataset/MT_dataset/annos/train --class_num 5 --label_file dataset/MT_dataset/mt_catIDs.json --output_name dataset/MT_dataset/train.json --suffix .png由于除去背景是 5 类缺陷--class_num同样填 5。执行后在dataset/MT_dataset/train.json得到 train 数据的 COCO 格式检测训练文件。若要生成验证集val.json将--image_path、--anno_path、--output_name中的train改为val再执行一次即可。5.2 参数说明参数名含义默认值--image_path需要转化的原图目录必填--anno_path原图对应的分割标签目录必填--class_num除背景外的分割类别数必填--label_file保存类别 id ↔ 类别名字典的 json 文件None--suffix标签文件名相对图像名的后缀含扩展名.png--output_name输出的 json 文件名coco.json5.3 输出与源码原理生成的标准 COCO json 包含images、annotations、categories三个字段见 convert_mask_to_coco.pyimages每张图像的file_name、id、宽高annotations每个缺陷实例的bbox、area、segmentation多边形轮廓点、category_id、iscrowdcategories每个类别的 id 与名称。源码实现要点L91-L122与 RoI 转换类似先按类别构造掩码并做连通域分析得到每个缺陷实例的包围盒通过cv2.findContours提取连通域轮廓flatten()后作为segmentation多边形写入标注category_id直接沿用分割标签的类别 id1~5--label_file若提供则用其字典内容覆写 categories 中的类别名称不设置时categories里类别的name直接为类别序号str(class_id)如 1、2。从源码L123-L126可以推断--label_file是一个字符串类别 id → 类别名称的 JSON 字典例如{1: Blowhole, 2: Break, 3: Crack, 4: Fray, 5: Uneven}用于让生成的 COCO 文件携带可读的类别名。六、转换结果如何接入 QualityInspector 训练与全流程数据转换的最终目的是被下游训练与推理配置消费以磁砖案例在 QualityInspector 中的使用方式为例6.1 检测任务消费 COCO jsonconfigs/det/datasets/defect_detection.yml 中TrainDataset与EvalDataset的anno_path分别指向./dataset/MT_dataset/train.json与./dataset/MT_dataset/val.jsonnum_classes: 5与转换时的--class_num 5保持一致。数据集加载器类型为COCODataSet即直接读取上一步生成的 COCO 文件进行检测训练具体训练命令见 检测分割训练与验证。6.2 RoI 分割任务消费 RoI.txtocrnet_hrnetw18_RoI_defect_256x256_40k.yml 通过train_path/val_path读取RoI.txt列表num_classes: 2对应--to_binary产生的二分类 RoI 标签配合 DiceLoss权重[0.4, 0.6]缓解前景像素稀少问题训练区域分割模型。6.3 端到端全流程串联消费两种数据在 e2e_det_RoI_seg.yml 中PipeLine依次串联Detection读取检测模型与score_threshold、CropSegmentation按pad_scale: 0.5裁剪 RoI 并送入分割模型、PostProcess按类别 id 配置score_threshold、len_thresh、area_thresh等规则做缺陷判定完整展示了检测 → RoI 裁剪 → 区域分割 → 后处理的工业质检落地方案如何复用本节准备的两种数据格式。七、数据质量检查与更多转换方向完成转换后建议先做可视化与统计检查再进入训练详见 数据分析工具COCO 数据可视化python3 tools/dataset/visualize_coco.py --json_path ./dataset/MT_dataset/train.json --root_path ./ --save_path ./show/检查 json 是否正确转换分割标签可视化python3 tools/dataset/visualize_annotation.py --file_path ./dataset/MT_dataset/train.txt --save_path ./show/检查分割数据是否对应正确类别统计与损失权重python3 tools/dataset/cal_class_weights.py --anno_path ./dataset/MT_dataset/annos/val --temperature 0.8 --num_workers 4输出各类别频率矩阵与加权权重temperature越大权重越平滑用于指导类别不平衡场景下的损失加权。此外若你的原始数据本身就是 COCO 检测标注而后续需要 RoI 分割模块可以使用第三个工具 convert_coco_to_RoI_mask.py--json_path指定 COCO 文件、--seg_classid 1 2指定需要分割的类别、--pad_scale 0.5控制裁剪 padding将 COCO 多边形标注还原为 RoI 前景二值分割其内部通过polygons_to_bitmask将多边形栅格化为掩码再按包围盒裁剪详见 conver_tools.md 3.3从而打通检测数据 → RoI 分割数据的反向转换链路。八、注意事项小结class_num语义始终为除背景外的类别数。磁砖案例背景 Free 的 id 为 05 类缺陷故所有转换命令--class_num 5目录名差异MT_dataset.py 源码实际创建标注目录anno单数而文档示例写作annos请以实际生成目录为准suffix语义指标签名相对图像名的后缀含扩展名如图像xxx.jpg、标签xxx.png时填.pngtrain/val 划分MT_dataset.py 按文件名 exp 前缀划分exp0~exp4 训练exp5~exp6 验证转换其他数据集时需仿照该脚本改写划分逻辑RoI 转换的跳过逻辑convert_mask_to_RoI.py中若整图掩码和为 0无缺陷则跳过该图符合工业质检OK 图不进入缺陷分割训练的常规做法实验性说明convert_tools 目前为实验性功能见 conver_tools.md使用中如遇问题建议结合源码排查并向项目反馈。至此一份磁砖缺陷原始数据集已经完成全图分割 → RoI 分割 → COCO 检测三种格式的转换与质量校验可直接支撑 QualityInspector 下的检测、RoI 分割及端到端全流程方案的训练与评测。其他工业质检数据集如纺织、金属、3C 电子等亦可套用本文的先统一分割格式、再按需派生方法论完成准备。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载相关推荐工业级PCB缺陷检测数据集完全指南从数据到实战应用工业级PCB缺陷检测数据集完全指南从数据到实战应用 在电子制造业智能化转型的关键时期PCB缺陷检测数据集成为推动自动化质检技术突破的核心要素。DeepPCB数据集计算机视觉工业制造whisper-timestamped测试与验证确保转录准确性的专业方法whisper timestamped测试与验证确保转录准确性的专业方法 whisper timestamped是一款强大的多语言自动语音识别工具它不仅能将语音人工智能音频DeepPCB工业级PCB缺陷检测数据集的完整实战指南DeepPCB工业级PCB缺陷检测数据集的完整实战指南 还在为PCB缺陷检测项目找不到高质量数据集而苦恼吗DeepPCB开源数据集为你提供专业级的解决方案数据集计算机视觉工业制造上一篇Infinite Scroll开发环境搭建从源码到测试的完整流程下一篇Apache APISIX SSL 协议配置指南静态与动态 TLS 版本控制实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表