尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

工业缺陷检测实战:小样本训练与漏检控制全流程

发布时间:2026/9/29 15:09:22

资讯中心
01
ARTICLE

工业缺陷检测实战:小样本训练与漏检控制全流程

工业缺陷检测实战:小样本训练与漏检控制全流程
工业缺陷检测实战小样本训练与漏检控制全流程工业缺陷检测和通用目标检测是两回事缺陷通常极小、样本极少、漏检代价极高。用通用检测的套路堆数据、只看 mAP去做缺陷检测最常见的结局是mAP 看着还行上线后客户天天投诉漏检。这篇按做事的顺序走一遍先搞清它和通用检测的差别 → 数据怎么组织 → 建模路线怎么选 → 小样本怎么训 → 怎么评估才不骗自己。每步给可跑代码最后附排查顺序。系列导航数据格式与转换看《检测数据集制作全流程》评估指标细讲看《检测评估指标怎么看》部署上线看《检测模型部署成 Web 服务》。一、缺陷检测和通用检测差在哪三个不一样决定了后面所有做法维度通用检测工业缺陷检测目标大小通常占图 10% 以上可能只有几个像素样本量成千上万缺陷样本常只有几十张类别分布相对均衡长尾某些缺陷只有几张错误代价漏检可接受漏检 次品流出代价极高背景多变相对固定同一产线、同一相机最后一条其实是好消息背景固定意味着可以用更针对性的方法。但也意味着换一条产线就得重新做——别指望一个模型通吃所有产线。核心矛盾一句话缺陷样本天然稀缺而漏检代价极高。所有技巧都是围绕这个矛盾展开的。二、数据三类样本与标注规范缺陷检测的数据要分三类来看不能混在一起想正常样本大量容易拿。但不能只拿正常样本去训检测模型——检测模型需要正样本已知缺陷少量需人工标注。这是检测模型的学习目标未知缺陷训练时不存在上线才冒出来。这类只能靠异常检测路线兜底见下一节。数据目录组织dataset/ ├── images/ │ ├── train/ # 正常 已知缺陷 │ ├── val/ │ └── test/ └── labels/ ├── train/ # 同名 txtYOLO 格式 ├── val/ └── test/标注规范缺陷场景特有缺陷框紧贴缺陷外沿但缺陷边界往往模糊——先定一个最小可见区域的口径全组统一一张图有多个缺陷时每个都要标别只标最明显的那个类别按工艺原因分划痕 / 凹坑 / 脏污不要按外观大小分——按大小分会让模型学到尺度而不是缺陷本质边界样本拿不准是不是缺陷单独放unclear/别硬标。硬标等于教模型学错。三、建模路线检测 / 分割 / 异常检测怎么选三条路线对应三种数据条件路线需要什么数据输出适合目标检测YOLO 系缺陷框标注缺陷位置 类别缺陷类别已知、位置重要语义/实例分割缺陷轮廓标注像素级区域缺陷形状不规则、要面积异常检测无监督只要正常样本异常分数/热力图缺陷罕见、类别未知、标注成本高怎么选缺陷类别已知且稳定比如就那 3 种划痕→ 走目标检测最直接缺陷边界模糊、要算面积占比比如涂层不均→ 走分割缺陷种类未知、样本极少比如新产线只知道会有异常→ 走异常检测PatchCore、PaDiM 这类只训正常样本。最稳的做法是组合用异常检测做有没有异常的粗筛再用检测模型判是哪种缺陷。异常检测能兜住未知缺陷检测模型给出可解释的类别。四、小样本训练四招缺陷样本只有几十张时从零训必崩。四招按优先级来第一招用预训练权重做迁移学习。这是收益最大的一招。加载通用检测预训练权重让模型带着什么是边缘、什么是纹理的先验进来只学缺陷长什么样。fromultralyticsimportYOLO# 从预训练权重出发而不是从零开始modelYOLO(yolov8n.pt)# 通用预训练权重model.train(datadata.yaml,epochs100,imgsz640,batch8,lr00.001,# 小样本用小学习率别冲垮预训练特征lrf0.01,patience20,# 早停防过拟合pretrainedTrue,freeze10,# 先冻结前 10 层骨干只训检测头cacheTrue,seed42,)第二招冻结骨干先训头再微调。前若干轮冻结骨干freeze10只训练检测头等损失稳定后再解冻用小学习率整体微调。这样能避免一开始就把预训练特征冲坏。第三招增强要针对缺陷不能照搬通用增强。通用增强里的一些操作会破坏缺陷特征——比如大角度旋转可能把细划痕转出画面强模糊会把小凹坑抹平。增强配置要克制# 缺陷检测的增强几何变换温和颜色扰动适度hsv_h:0.015# 色调扰动小hsv_s:0.4hsv_v:0.3degrees:10.0# 旋转角度别太大小缺陷易转出画面translate:0.1scale:0.3fliplr:0.5flipud:0.0# 工业图像上下翻转通常不合理关掉mosaic:0.5# mosaic 对缺陷场景要慎用注意上下翻转flipud在工业场景通常不合理——划痕有方向性上下翻转会造出现实中不存在的样本。同理mosaic 拼接可能把缺陷拼到不该出现的背景上。增强的目的是模拟真实变化不是制造不可能的场景。第四招用真实缺陷做贴片增强。小样本时把已标注的真实缺陷区域裁剪出来随机贴到正常背景图上能成倍扩大缺陷样本。关键是只用真实缺陷贴片不要程序合成假缺陷importcv2,numpyasnp,randomdefpaste_defects(bg,patches,max_n3):patches: [(patch_img, cls_id)]全部来自真实标注缺陷。h,wbg.shape[:2]labels[]for_inrange(random.randint(1,max_n)):patch,cidrandom.choice(patches)ph,pwpatch.shape[:2]ifphhorpww:continuex,yrandom.randint(0,w-pw),random.randint(0,h-ph)bg[y:yph,x:xpw]patch labels.append((cid,xpw/2,yph/2,pw,ph))returnbg,labels贴片时要注意边缘融合羽化/泊松融合否则贴片边界会成为新的缺陷模型学的是拼接痕迹而不是缺陷。五、类别不平衡重采样与损失权重缺陷样本天然长尾——某类几百个、某类只有几个。直接训模型会忽略稀有类。两种处理数据层面过采样稀有类。对稀有缺陷的图做额外复制配合不同的增强让各类在每轮里的出现次数接近。别简单复制同一张图要配合增强产生差异。损失层面给稀有类加权。让稀有类的定位和分类损失权重更高模型不敢忽略。# 按类别频率的倒数给权重稀有类权重高importnumpyasnp countsnp.array([820,96,12])# 三类的框数weights(counts.max()/counts)**0.5# 开方缓和避免权重过激# 传给训练配置的 class 权重框架支持时print(weights)# [1.0, 2.92, 8.27]注意别过度加权权重拉到十几倍时模型会为了稀有类牺牲多数类误检暴增。用开方而不是直接取倒数能缓和这个问题。六、评估漏检率比 mAP 重要这是缺陷检测和通用检测最本质的区别。指标定义缺陷场景里意味着什么漏检率FNR真缺陷没被检出的比例次品流出客户投诉误检率FPR正常区域被判成缺陷的比例人工复核成本上升各类 AP每类的平均精度看稀有类有没有被忽略mAP各类 AP 的均值会被多数类拉高掩盖稀有类问题必须做的两件事一是分类看 AP不看总 mAP。某类只有 12 个框时它在 mAP 里的贡献被摊薄就算全错也看不出来。要逐类打印 AP 和召回率。二是按漏检/误检分开统计。别只看一个总分defdefect_report(model,test_dir,conf0.25):importglob,os fnfptptotal_gt0forimginglob.glob(os.path.join(test_dir,images,*)):gtcount_labels(os.path.join(test_dir,labels,os.path.splitext(os.path.basename(img))[0].txt))predslen(model.predict(img,confconf,verboseFalse)[0].boxes)total_gtgt tpmin(gt,preds)fnmax(0,gt-preds)# 漏检真值有、预测少fpmax(0,preds-gt)# 误检预测多、真值没有return{漏检率:fn/max(total_gt,1),误检率:fp/max(total_gt,1),召回率:tp/max(total_gt,1),}调阈值的取舍置信度阈值调低 → 漏检少、误检多调高 → 反之。缺陷场景通常优先保召回压漏检用人工复核消化多出来的误检。这个取舍要跟业务方明确别自己拍。七、卡住时的排查顺序先看漏检在哪—— 把漏检的图挑出来是没检出还是检出但类别错再看缺陷是不是太小—— 小缺陷先考虑提高输入分辨率或切图检测再看增强有没有帮倒忙—— 关掉增强跑一版对比尤其 mosaic 和翻转再看稀有类—— 逐类 AP稀有类是不是被忽略了再看阈值—— 是不是为了压误检把召回也压掉了最后看未知缺陷—— 测试集里有没有训练时没见过的缺陷类型那要靠异常检测兜底。一个必须接受的现实缺陷检测没有训一次管很久。产线换料、换灯、换相机分布就变了。上线后要有持续收集新样本、定期重训的机制否则模型会随时间衰减。最后一句缺陷检测的目标不是 mAP 好看是次品不流出。把评估口径从平均精度换成漏检率 逐类召回你会发现很多效果好的模型其实不达标——而这个发现比多调几轮参数有价值得多。说明文中代码基于ultralytics与opencv-python的通用用法具体 API 与参数名以所用框架版本为准。增强策略、损失权重、阈值取舍均为工程经验方向必须结合自己的产线数据回归确定。异常检测方法PatchCore、PaDiM 等请参考其原始论文与官方实现。贴片增强仅使用真实标注缺陷不引入程序合成的假缺陷。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。