ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PaddleSeg QualityInspector 工业质检快速上手:Magnetic-Tile 缺陷检测+RoI分割+后处理全流程实战

PaddleSeg QualityInspector 工业质检快速上手:Magnetic-Tile 缺陷检测+RoI分割+后处理全流程实战 人工智能计算机视觉预训练【免费下载链接】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点击查看免费下载本指南以 Magnetic-tile-defect-datasets磁瓦表面缺陷数据集为例演示 PaddleSeg 仓库下工业质检全流程解决方案 QualityInspector 的完整使用链路从数据集下载与格式转换到目标检测与 RoI 分割模型的训练验证再到「检测RoI分割后处理」串联方案的全流程预测以及工业级过杀/漏检指标评估与后处理参数调优。读完本文你将能够独立复现一套端到端的工业缺陷质检流水线并掌握用规则后处理算子控制 NG/OK 判定、优化落地指标的方法。1 QualityInspector 与快速开始前置知识QualityInspector 是 PaddleSeg 仓库中面向工业质检场景的全流程解决方案开发工具目标是把从数据标注到模型部署的工业质检应用做成可配置、可评估、可调优的闭环。与单独使用 PaddleSeg / PaddleDetection 不同它额外补齐了三块工业场景刚需能力统一可配置的解决方案支持检测、分割单模型以及检测RoI分割后处理串联方案通过修改 yml 配置即可组合视觉套件的模型工业级指标评估与调优直接评估工业质检项目实际落地的过杀Overkill/漏检Escape指标并可只调后处理规则参数实现指标一键调优无需重新推理数据工具链提供检测、分割 / RoI 分割任务的数据格式转化脚本以及数据分析工具。本快速开始文档以Magnetic-tile-defect-datasets公开数据集为样例数据选用目标检测Faster R-CNN HRNet RoI 分割OCRNet HRNet 后处理的串联解决方案展示完整的落地流程。所有命令均在PaddleSeg/contrib/QualityInspector/目录下执行。2 安装说明QualityInspector 的环境要求如下详见 install.mdPaddlePaddle版本不低于 2.3PaddleDetection、PaddleSeg64 位操作系统Python 33.5.1/3.6/3.7/3.8/3.964 位版本pip/pip39.0.164 位版本CUDA 10.1、cuDNN 7.6克隆 PaddleSeg 仓库并进入 QualityInspector 目录git clone https://github.com/PaddlePaddle/PaddleSeg.git cd contrib/QualityInspector/执行如下命令完成 PaddleDetection、PaddleSeg 等第三方库的安装pip install -r requirements.txt安装完成后后续所有数据准备、训练、验证、预测、评估命令均以PaddleSeg/contrib/QualityInspector/为当前工作目录。3 准备数据集三步完成工业数据格式化工业数据集没有统一组织形式QualityInspector 提供脚本把原始缺陷数据逐步转换成不同任务所需的训练格式。3.1 下载原始数据集建立dataset文件夹前往 Magnetic-tile-defect-datasets 下载数据集并放置于./dataset/路径下。该数据集来自论文 Saliency of magnetic tile surface defects收集了 6 类常见磁瓦图像其中 Free 为正常 OK 图并做了像素级标注。原始目录结构如下Magnetic-Tile-Defect | |--MT_Blowhole | |--Imgs | | |--exp1_xxx.jpg / exp1_xxx.png ... |--MT_Break | |--Imgs ... |--MT_Free | |--Imgs |--MT_Uneven | |--Imgs ...3.2 转换为全图分割训练数据格式运行 tools/dataset/MT_dataset.py 将原始数据转换为标准的 PaddleSeg 分割训练格式python3 tools/dataset/MT_dataset.py --dataset_path ./dataset/Magnetic-Tile-Defect --output_path ./dataset/MT_dataset/转换后的数据集结构如下MT_dataset | |--images | |--train / val # exp1_xxx.jpg ... |--annos | |--train / val # exp1_xxx.png像素级标注 |--train.txt / val.txt # 原图与标签图像的相对路径其中train.txt、val.txt保存了原图及其对应标签图像的相对路径PaddleSeg 的 Dataset 即通过该文件列表加载数据。3.3 转为 COCO 格式供检测训练检测任务需要 COCO 格式的 json 标注文件。运行 tools/convert_tools/convert_mask_to_coco.pypython3 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命令执行后 json 保存在dataset/MT_dataset/train.json。将--image_path、--anno_path和--output_name中的train改为val再执行一次即可得到验证集dataset/MT_dataset/val.json。3.4 切割 RoI 区域供 RoI 分割训练检测RoI 分割方案需要把全图分割标签裁切为 RoI 区域。运行 tools/convert_tools/convert_mask_to_RoI.pypython3 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/train/ --suffix .png --to_binary执行后数据保存在dataset/MT_dataset/RoI/train/同样将train改为val得到验证集 RoI 分割数据。--to_binary表示将多类别标签二值化——RoI 分割模型只需区分缺陷/非缺陷因此num_classes为 2。更完整的参数说明可参考 数据准备详细教程 与 数据转换工具文档。4 训练与验证检测 / 分割模型数据就绪后分别训练目标检测模型与 RoI 分割模型。两套算法配置文件分别位于configs/det/与configs/seg/下。4.1 训练检测模型Faster R-CNN HRNet以 HRNet 为骨干的 Faster R-CNN 为例python3 tools/det/train.py -c configs/det/hrnet/faster_rcnn_hrnetv2p_w18_3x_defect.yml --use_vdltrue --vdl_log_dir./vdl_dir/scalar --eval多卡训练以 2 卡为例CUDA_VISIBLE_DEVICES0,1 python3 -m paddle.distributed.launch tools/det/train.py -c configs/det/hrnet/faster_rcnn_hrnetv2p_w18_3x_defect.yml --use_vdltrue --vdl_log_dir./vdl_dir/scalar --eval训练模型保存在./output/faster_rcnn_hrnetv2p_w18_3x_defect/文件夹中。从 faster_rcnn_hrnetv2p_w18_3x_defect.yml 可以看到该配置基于defect_detection.yml数据集配置与faster_rcnn_hrnetv2p_w18.yml模型配置组合而成epoch: 36、LearningRate.base_lr: 0.02、采用 PiecewiseDecaymilestones [8, 11]、gamma 0.1 LinearWarmupstart_factor 0.1、steps 1000、TrainReader batch_size 16BBoxPostProcess 使用 RCNNBox 解码 MultiClassNMSkeep_top_k 100、score_threshold 0.2、nms_threshold 0.1。4.2 训练 RoI 分割模型OCRNet HRNet以 HRNet 为骨干的 OCRNet 为例RoI 训练配置为 ocrnet_hrnetw18_RoI_defect_256x256_40k.ymlpython3 tools/seg/train.py --config configs/seg/ocrnet/ocrnet_hrnetw18_RoI_defect_256x256_40k.yml --do_eval --use_vdl --save_interval 100 --save_dir ./output/RoI/多卡训练CUDA_VISIBLE_DEVICES0,1 python3 -m paddle.distributed.launch --config configs/seg/ocrnet/ocrnet_hrnetw18_RoI_defect_256x256_40k.yml --do_eval --use_vdl --save_interval 100 --save_dir ./output/RoI/关键配置项说明train_path: dataset/MT_dataset/RoI/train/RoI.txt、val_path: dataset/MT_dataset/RoI/val/RoI.txtRoI 分割训练/验证文件列表路径num_classes: 2二分类缺陷/背景模型type: OCRNet骨干HRNet_W18pretrained使用 hrnet_w18_ssld 预训练权重backbone_indices: [0]训练增强ResizeStepScaling0.5~2.0步长 0.25、RandomPaddingCrop256x256、随机水平/垂直翻转、RandomDistort损失默认使用两个DiceLossweight [0.4, 0.6]coef [1, 0.4]针对缺陷与背景像素不均衡的场景配置中同时保留了CrossEntropyLossweight [0.3, 0.7]的注释版本可供切换优化器 SGDmomentum 0.9、weight_decay 4e-5PolynomialDecay学习率lr 0.001、power 0.9。训练模型保存在./output/RoI/中。4.3 验证指标AP / mIoU检测模型验证-c指定配置文件-o覆盖配置文件中的全局变量如权重路径当前仅支持单卡评估python3 tools/det/eval.py -c configs/det/hrnet/faster_rcnn_hrnetv2p_w18_3x_defect.yml -o weights./output/faster_rcnn_hrnetv2p_w18_3x_defect/model_final.pdparamsRoI 分割模型验证使用训练中保存的best_model/model.pdparamspython3 tools/seg/val.py --config configs/seg/ocrnet/ocrnet_hrnetw18_RoI_defect_256x256_40k.yml --model_path ./output/RoI/best_model/model.pdparams4.4 说明为了简化QualityInspector 只保留了部分算法配置文件但 PaddleDetection / PaddleSeg 中集成的任意算法均可使用——只需将对应算法的 config 文件放入./configs/det/或./configs/seg/即可接入同一套训练、验证工具链。5 全流程预测检测RoI分割后处理串联推理检测 AP、分割 mIoU 只能衡量单模型能力工业落地更关心零件级的 NG/OK 判定。全流程预测通过tools/end2end/predict.py串联整条流水线输出实例级与图像级的 NG/OK 信息。5.1 准备全流程配置文件全流程配置文件按模块化定义包含环境ENV、流水线PipeLine、检测、分割/RoI 分割以及后处理等模块。configs/end2end/下提供了三种常用工业质检 PPLe2e_det.yml检测后处理e2e_seg.yml分割后处理e2e_det_RoI_seg.yml检测RoI分割后处理。本案例选用./configs/end2end/e2e_det_RoI_seg.yml完整内容如下ENV: device: gpu # 运行环境 output_dir: ./output_det_roi/ # 保存预测 json 和可视化图像的路径 save: True # 保存 json 文件 visualize: False # 是否可视化 PipeLine: - Detection: # 检测模块 config_path: ./configs/det/hrnet/faster_rcnn_hrnetv2p_w18_3x_defect.yml model_path: ./output/faster_rcnn_hrnetv2p_w18_3x_defect/model_final.pdparams score_threshold: 0.01 # 只输出置信度大于 0.01 的 bbox - CropSegmentation: # RoI 区域分割模块 pad_scale: 0.5 # 根据检测 box 裁剪 RoI 区域时边长扩大的倍数 config_path: ./configs/seg/ocrnet/ocrnet_hrnetw18_RoI_defect_256x256_40k.yml model_path: ./output/seg_roi/best_model/model.pdparams aug_pred: True # 是否多尺度Flip 推理 - PostProcess: # 后处理模块按顺序串联执行 - JudgeDetByScores: # 置信度判断 score_threshold: 1: 0.1 # {class_id: threshold}低于阈值判为 OK 5: 0.2 - JudgeByLengthWidth: # 边长判断 len_thresh: 0 # 长或宽小于该值判为 OK - JudgeByArea: # 面积判断 area_thresh: 1: 10 # 分割像素数小于该值判为 OK各模块参数作用ENV.devicegpu/cpu等运行环境save、visualize控制是否保存预测 json 与可视化图。Detection.score_threshold检测阶段过滤低置信度 bbox降低后处理负担。CropSegmentation.pad_scale按检测框外扩比例裁剪 RoI避免缺陷贴边被裁掉。PostProcess下的算子在 qinspector/ops/postprocess.py 中实现按配置顺序依次对每个预测实例执行任一规则判定为 OK 即将其isNG置 0JudgeDetByScoresscore_threshold支持 dict按category_id设置不同阈值或单一数值预测得分低于阈值判为 OKJudgeByLengthWidthbbox 的 wbbox[2]或 hbbox[3]小于len_thresh判为 OK用于过滤过小的检出JudgeByArea存在area字段分割方案输出时按分割像素数判断否则回退到 bbox 面积w×h判断用于过滤面积过小的预测。5.2 执行全流程预测使用tools/end2end/predict.py对./dataset/MT_dataset/images/val下所有图像进行预测python3 tools/end2end/predict.py --config ./configs/end2end/e2e_det_RoI_seg.yml --input ./dataset/MT_dataset/images/val --output_dir ./output_det_roi/--input也支持单张图像路径例如python3 tools/end2end/predict.py --config ./configs/end2end/e2e_det_RoI_seg.yml --input ./dataset/MT_dataset/images/val/exp5_num_10250.jpg --output_dir ./output_det_roi/脚本参数说明源码见 tools/end2end/predict.py参数名含义默认值--config全流程配置文件必填--input待预测的图像路径目录或单张图像文件必填--output_dir保存预测文件和可视化结果的路径./output/--device运行设备可选 cpu/gpu/xpu/npu/mlugpu脚本内部通过ArgsParser解析参数后构造Pipeline并调用pipeline.run(inputs)设备选择逻辑会根据 Paddle 的编译选项自动回退如未编译 CUDA 则落到 cpu。5.3 输出结果解析执行后得到预测结果 json 与可视化文件保存在./output_det_roi/。当ENV.save与ENV.visualize为True时会看到Pipeline INFO: Save prediction to ./output_det_roi/output.json Pipeline INFO: Visualize prediction to ./output_det_roi/show/output.json以每张输入图像路径为 key、预测结果为 value{ dataset/MT_dataset/images/val/exp6_num_127730.png: { isNG: 0, pred: [] }, dataset/MT_dataset/images/val/exp5_num_155415.jpg: { isNG: 1, pred: [ { category_id: 2, category_name: Break, bbox: [0.0, 6.75, 190.86, 78.03], score: 0.28, isNG: 1 }, { category_id: 5, category_name: Uneven, bbox: [0.0, 156.82, 195.0, 154.17], score: 0.01, isNG: 0 } ] } }字段说明isNG图像级该图是否存在缺陷1 为缺陷图0 为正常图pred缺陷实例级预测结果列表每项包含category_id缺陷类别 id、category_name缺陷名、bboxx, y, w, h、score预测框得分与实例级isNG若采用分割或检测RoI 分割配置输出中还会增加polygon和area字段由分割分支产出供面积类后处理算子使用。可视化图像中包含 box、polygon使用分割时、类别、置信度与 NG 信息。6 全流程评估过杀/漏检指标与 badcase 分析模型的 AP/mIoU 无法直观评估一套工业质检方案是否可落地QualityInspector 因此提供工业界常用的**过杀Overkill与漏检Escape**指标评估并支持 badcase 可视化与后处理参数调优。6.1 执行评估对./dataset/MT_dataset/val.jsonGT 为 COCO 格式中的每一张图像进行评估--pred_path为第 5 步全流程预测得到的output.jsonpython3 tools/end2end/eval.py --input_path ./dataset/MT_dataset/val.json --pred_path ./output_det_roi/output.json --config ./configs/end2end/e2e_det_RoI_seg.yml --rules_eval --image_root ./参数说明源码见 tools/end2end/eval.py参数名含义默认值--input_path带有 GT 框的 COCO 格式 json 文件必填--pred_path全流程预测得到的预测 json 文件必填--config全流程预测配置文件必填--image_root图像保存的根目录--rules_eval是否重新进行后处理判断False--instance_level是否评测实例级别漏检指标True--iou_theshold预测与 GT 框大于该阈值视作召回0.1--badcase是否进行 badcase 可视化True--output_pathbadcase 保存路径./output/6.2 三类核心指标解读过杀指标OK Evaluation对 GT 为 OK正常的图像统计被判为 NG 的比例。--------------------------------------------------------- | OK | ALL | Blowhole | Break | Crack | Fray | Uneven | --------------------------------------------------------- | Total | 318 | 318 | 318 | 318 | 318 | 318 | | OK | 267 | 316 | 306 | 318 | 318 | 281 | | NG | 51 | 2 | 12 | 0 | 0 | 37 | | Overkill | 16.04% | 0.63% | 3.77% | 0.00% | 0.00% | 11.64% | ---------------------------------------------------------Total是 OK 图像总数Overkill NG/Total每个类别下的 NG 数指包含该类别 NG 预测 box/mask 的图像数量。图像级漏检指标Image-Level Escape对 GT 为 NG 的图像统计没有任何 NG 预测的比例。-------------------------------------- | Image Level | Total | NG | OK | Escape | -------------------------------------- | Lucky Result | 132 | 118 | 14 | 10.61% | --------------------------------------Total是 NG 图像总数NG表示图像存在任意一个预测为 NG 的 box/mask不关注位置或类别是否正确可称作 Lucky RecallOK表示图像无任何 NG 预测Escape OK/Total。实例级别漏检指标Instance-Level Escape对 GT 的每个缺陷实例统计没有可匹配iou 大于--iou_theshold的 NG 预测的比例。----------------------------------------------------------- | NG | ALL | Blowhole | Break | Crack | Fray | Uneven | ----------------------------------------------------------- | Total | 151 | 39 | 41 | 24 | 13 | 34 | | NG | 127 | 36 | 31 | 20 | 12 | 28 | | OK | 24 | 3 | 10 | 4 | 1 | 6 | | Escape | 15.89% | 7.69% | 24.39% | 16.67% | 7.69% | 17.65% | -----------------------------------------------------------6.3 badcase 可视化输出badcase 输出保存在output路径下目录按过杀/漏检、类别、图像分层组织output | |--overkill # 过杀文件夹 | |--Break / Uneven ... # 预测出的过杀类别内含可视化的过杀图像 |--escape # 漏检文件夹 | |--image_level # 图像级别漏检图像没有任何预测结果 | |--instance_level # 实例级别漏检图像上某个/多个缺陷漏检 | |--Break / Uneven ... # 漏检的真实缺陷类别内含可视化图像6.4 后处理参数调优无需重新推理零件缺陷的判断标准常与缺陷位置、大小、长度等相关。为过滤不满足 NG 条件的检出、降低过杀可在全流程 yml 中配置三种后处理算子qinspector/ops/postprocess.pyJudgeDetByScores按置信度判断JudgeByLengthWidth按边长bbox 宽或高判断JudgeByArea按面积分割像素数或 bbox 面积判断。调优流程查看指标输出与 badcase 可视化后修改./configs/end2end/e2e_det_RoI_seg.yml中PostProcess模块的参数然后必须带上--config与--rules_eval重新执行评估命令才能让新的后处理参数生效模型预测结果无需重新计算。例如初次评估发现 Uneven 类别过杀高达 11.64%可调高JudgeDetByScores.score_threshold中第 5 类Uneven的阈值如 0.01 → 0.2重新评测后过杀明显下降-------------------------------------------------------- | OK | ALL | Blowhole | Break | Crack | Fray | Uneven | -------------------------------------------------------- | Total | 318 | 318 | 318 | 318 | 318 | 318 | | OK | 298 | 316 | 306 | 318 | 318 | 312 | | NG | 20 | 2 | 12 | 0 | 0 | 6 | | Overkill | 6.29% | 0.63% | 3.77% | 0.00% | 0.00% | 1.89% | --------------------------------------------------------过杀从 16.04% 降到 6.29%但通常伴随一定程度的漏失上升。用户可根据项目对漏失/过杀的目标要求在阈值间做权衡迭代。7 扩展阅读与注意事项数据准备的完整细节含MT_dataset.py转换逻辑、convert_mask_to_coco.py与convert_mask_to_RoI.py参数见 prepare_data.md 与 conver_tools.md检测/分割训练的更多说明见 train_eval.md全流程配置与预测/评估细节见 parse_config.md、predict.md、eval.md后续处理判断逻辑补充说明GT 图像是否为 NG 的判断依据是输入 json 中是否存在标注框有标注框即视为 NG 图像QualityInspector 还支持无监督异常检测算法详见 docs/uad/README.md可与本案例的监督方案互为补充当前版本暂未支持端到端部署模型部署可参考 PaddleDetection 与 PaddleSeg 的部署方案如 deploy/python/infer.py 等使用约束文中命令与配置文件均以当前仓库QualityInspector V0.5 预览版为准检测模型验证目前仅支持单卡评估。赞分享人工智能计算机视觉预训练【免费下载链接】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点击查看免费下载相关推荐3分钟上手OpenCV缺陷检测从代码到工业质检全流程3分钟上手OpenCV缺陷检测从代码到工业质检全流程 在制造业流水线中传统人工质检面临速度慢、标准不一、漏检率高等痛点。本文将通过OpenCV的分水岭算法与计算机视觉图像处理深度学习机器学习如何快速为Royal TSX打造中文界面终极汉化包使用教程如何快速为Royal TSX打造中文界面终极汉化包使用教程 Royal TSX中文汉化包是一款专为macOS平台上的Royal TSX远程连接管理工具开发的本人工智能计算机视觉预训练如何高效部署Kimi K2大模型完整本地AI助手搭建指南如何高效部署Kimi K2大模型完整本地AI助手搭建指南 想要在本地设备上运行媲美GPT 4的千亿参数AI大模型吗Kimi K2 Instruct GGUF人工智能计算机视觉预训练上一篇探秘Steam交易升级使用Steam Economy Enhancer优化您的游戏资产下一篇cuid实战教程5个真实场景教你正确使用唯一ID创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表