尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

工业缺陷检测小样本训练与漏检控制:YOLOv8实战全链路指南

工业缺陷检测小样本训练与漏检控制:YOLOv8实战全链路指南 1. 工业缺陷检测的底层逻辑与方案选型1.1 为什么工业缺陷检测和常规目标检测完全不是一回事做过COCO数据集上YOLO训练的人第一次进工厂产线做缺陷检测大概率会被现实打脸。我当年从通用目标检测转到工业质检前三个月基本都在踩坑。核心原因在于工业缺陷检测和常规目标检测在问题定义上就有本质区别。常规目标检测面对的是猫、狗、车、人这类语义明确、边界清晰的物体COCO80类别里每一类都有大量标注样本模型见过几千张猫的图片后对猫的形态有充分认知。但工业缺陷是什么是划痕、脏污、气泡、缺料、毛刺、色差、裂纹——这些缺陷的形态千变万化同一种缺陷在不同光照、不同角度、不同批次物料上呈现的视觉特征可能完全不同。更致命的是产线上良品率通常在95%以上意味着缺陷样本天然稀少你能收集到的缺陷图片可能只有几十张甚至几张。这就引出了工业缺陷检测的两大核心难题小样本训练和漏检控制。前者解决样本不够怎么训的问题后者解决训完了怎么保证不漏的问题。这两个问题不解决模型在实验室里mAP再高上了产线也是废铁。我见过太多团队拿着几百张缺陷图直接套YOLO官方训练脚本结果模型要么过拟合到死记硬背那几张图要么把正常纹理波动全判成缺陷误检率飙到30%以上。所以这篇文章我想把从数据准备到模型部署的完整链路拆开讲重点说清楚小样本场景下每一步该怎么调整以及漏检控制到底该在哪些环节下手。1.2 小样本场景下的技术路线选择面对小样本业界主要有三条路线数据增强路线、迁移学习路线、异常检测路线。这三条路不是互斥的实际项目中往往是组合使用但侧重点不同。数据增强路线是最直观的。既然缺陷样本少那就通过旋转、翻转、裁剪、色彩抖动、Cutout、MixUp、Mosaic等手段把少量样本撑成大量样本。YOLO系列自带的Mosaic增强本身就是一种强力的小样本扩充手段它把四张图拼成一张让模型在一张图里看到更多上下文。但数据增强有个天花板它只能改变已有缺陷的呈现方式不能创造新的缺陷形态。如果你的缺陷类型本身就没覆盖全增强再多也是白搭。迁移学习路线是主流做法。用COCO预训练权重做初始化然后在自己的小样本数据集上微调。这里的关键是冻结策略和学习率调度。我的经验是如果缺陷样本少于200张冻结Backbone的前80%层只训练Neck和Head学习率设到预训练阶段的1/10甚至1/100。如果样本在200到1000张之间可以解冻Backbone的后半部分用余弦退火调度学习率。样本超过1000张才考虑全网络微调。异常检测路线是近两年工业界越来越重视的方向。它的核心思想是不直接学习缺陷长什么样而是学习正常长什么样然后任何偏离正常分布的区域都判为异常。这条路线对缺陷样本数量的要求极低理论上只需要正常样本就能训练。但它的缺点是解释性差你很难告诉产线工人这个区域为什么被判为异常而且对阈值极其敏感。实际项目中我通常把异常检测作为YOLO的补充YOLO负责检出已知类型的缺陷异常检测负责兜底未知类型的异常。提示不要迷信单一方案。我做过的一个PCB板缺陷检测项目最终方案是YOLOv8负责检测划痕和缺孔两类已知缺陷PatchCore异常检测负责兜底其他未知异常两者结果做加权融合漏检率从单模型的4.2%降到了1.1%。1.3 YOLO版本选型与工业场景适配YOLO系列迭代到v8、v9、v10甚至v11每个版本在工业场景下的表现差异很大。我实测下来的结论是YOLOv8在工业缺陷检测中综合表现最稳原因有三。第一YOLOv8的Anchor-Free设计对不规则形状的缺陷更友好。工业缺陷很多是细长划痕、不规则脏污Anchor-Based的YOLOv5需要精心设计Anchor尺寸而YOLOv8直接预测中心点和宽高省去了Anchor聚类的麻烦。第二YOLOv8的C2f模块和解耦头在保持精度的同时参数量可控640分辨率下推理速度在T4上能跑到120FPS以上满足大多数产线节拍。第三Ultralytics的工程化做得最好从训练到导出ONNX到TensorRT部署一条龙脚本齐全省去了大量造轮子的时间。YOLOv9的GELAN结构理论上精度更高但参数量上去了T4上640分辨率推理掉到80FPS左右对于多路视频流场景压力较大。YOLOv10的NMS-Free设计确实降低了后处理延迟但工业场景下缺陷目标通常不多NMS耗时占比很小收益不明显。所以我的建议是除非你有明确的精度瓶颈且算力充裕否则YOLOv8是工业缺陷检测的默认选择。至于Efficient Head YOLO这类改进核心思路是轻量化检测头减少Head部分的参数量和计算量。在缺陷类型少比如只有3到5类的场景下标准Head确实有冗余换成Efficient Head能提速10%到15%精度损失通常在0.5%mAP以内。但要注意如果你的缺陷类型超过10类或者缺陷尺度差异极大轻量化Head可能会掉点。2. 小样本训练的核心细节与实操要点2.1 数据集的构建与标注规范小样本训练的第一道坎不是模型是数据。我见过太多项目死在数据上标注不一致、漏标、错标、类别定义模糊。工业缺陷检测的数据集构建有几个铁律。类别定义必须可操作化。不要用脏污这种模糊词要定义清楚面积大于多少像素、灰度差异超过多少、形状是点状还是片状。我通常会和产线质检员一起坐下来把缺陷样本投到大屏上逐张讨论这个算不算缺陷这个算哪一类形成一份书面的判定标准。这份标准后来会成为标注团队的培训材料也是模型上线后处理争议的依据。标注一致性比标注精度更重要。小样本场景下标注噪声的破坏力被放大。100张图里如果有5张标错了模型很容易学到错误模式。我的做法是所有标注图至少经过两轮独立标注不一致的样本拿出来集体讨论。对于边界模糊的缺陷宁可标大不标小因为漏检的代价远高于误检。负样本不能省。很多人只标缺陷图不标正常图。但模型需要学习什么是正常才能区分什么是异常。我的经验配比是缺陷图与正常图的比例控制在1:2到1:5之间。正常图不需要标注但必须参与训练作为背景负样本。数据划分要按批次或按时间划分。不要随机划分训练集和验证集因为同一批次的图片高度相似随机划分会导致验证集泄漏。正确做法是按生产批次、按日期、按光照条件划分确保验证集能反映真实产线的分布变化。2.2 数据增强策略的取舍与参数设置YOLO自带的增强参数很多但工业缺陷检测不能无脑开满。我逐项说一下我的设置逻辑。Mosaic增强默认开启概率设0.5到0.8。Mosaic能显著提升小样本下的泛化能力但它有个副作用会把缺陷目标缩小到原图的1/4对于本身就很小的缺陷比如几个像素的脏点缩小后可能就看不见了。所以如果你的缺陷目标普遍小于32x32像素Mosaic概率要降到0.3以下或者改用Mosaic9但配合更大的输入分辨率。MixUp增强工业场景下我通常关闭。MixUp把两张图线性叠加会产生半透明的鬼影缺陷这在真实产线中不存在容易让模型学到虚假特征。除非你的缺陷本身就是半透明类型的比如某些薄膜材料的瑕疵否则不建议开。HSV增强色调、饱和度、亮度抖动。工业产线的光照相对稳定但不同批次的物料颜色可能有差异。我的设置是H0.015S0.7V0.4。色调抖动要小因为很多缺陷是靠颜色区分的比如发黄、发黑色调抖大了会把缺陷特征抖没。旋转与翻转工业缺陷通常没有方向性所以上下翻转、左右翻转都可以开。但旋转要谨慎如果产线上物料方向固定旋转增强会让模型学到不存在的姿态。我的做法是翻转全开旋转限制在正负10度以内。随机擦除Random Erasing这个增强对小样本很有用它随机遮挡图像的一部分强迫模型不依赖单一区域做判断。但要注意遮挡面积不能太大否则可能把缺陷本身遮掉。我通常设遮挡面积比例为0.02到0.1。注意所有增强参数没有万能值必须用验证集做消融实验。我的习惯是每调整一组参数跑一次短训练50到100epoch看验证集mAP和漏检率的变化记录在表格里对比。2.3 损失函数的选择与调参YOLO的损失函数由三部分组成分类损失、定位损失、置信度损失。小样本场景下这三部分的权重需要重新平衡。分类损失YOLOv8默认用BCEWithLogitsLoss。如果类别极度不平衡比如某类缺陷只有5个样本可以换成Focal Loss让模型更关注难分类样本。但Focal Loss的alpha和gamma需要调我的经验是alpha0.25gamma1.5到2.0之间。注意gamma太大会导致训练不稳定损失值震荡。定位损失YOLOv8默认用CIoU Loss。对于细长划痕这类缺陷CIoU对长宽比的惩罚不够可以换成EIoU或SIoU。我实测下来SIoU在划痕检测上比CIoU的mAP高1.5到2个点。另外NWDNormalized Wasserstein Distance损失在小目标检测上表现很好如果你的缺陷目标普遍很小可以尝试用NWD替换CIoU。NWD的核心思想是把边界框建模成高斯分布用Wasserstein距离衡量相似度对尺度变化更鲁棒。置信度损失这部分通常不需要大改但要注意正负样本比例。小样本场景下正样本缺陷极少负样本背景极多容易导致模型倾向于预测背景。我的做法是在数据加载阶段对含缺陷的图片做过采样让每个batch里至少有一半图片包含缺陷。损失权重YOLOv8默认box7.5cls0.5dfl1.5。小样本场景下我通常把cls权重提到1.0到1.5因为分类错误在缺陷检测中代价很高。box权重保持7.5或略降到5.0避免定位损失主导训练。2.4 训练超参数的实战配置小样本训练的超参数和常规训练差异很大我直接给一套我常用的配置基于YOLOv8单卡T4或RTX3060都能跑。# 训练配置 epochs: 300 batch: 16 imgsz: 640 workers: 8 optimizer: AdamW lr0: 0.001 lrf: 0.01 momentum: 0.937 weight_decay: 0.0005 warmup_epochs: 5 warmup_momentum: 0.8 warmup_bias_lr: 0.1 box: 7.5 cls: 1.0 dfl: 1.5 patience: 50 freeze: 10几个关键点解释一下。lr00.001小样本微调初始学习率不能大否则预训练权重会被破坏。lrf0.01最终学习率是初始的1%配合余弦退火让训练后期稳定收敛。freeze10冻结Backbone前10层这是YOLOv8的层编号10层大约覆盖了Backbone的前80%。patience5050个epoch验证集指标不提升就早停防止过拟合。如果样本少于100张我会把freeze设到15lr0降到0.0005epochs加到500。如果样本在500张左右freeze设到5lr0用0.001。如果样本超过2000张可以freeze0全网络微调lr0用0.01。学习率调度余弦退火是默认选择但小样本场景下我有时会用OneCycleLR它先升后降能帮助模型跳出局部最优。OneCycleLR的max_lr设到lr0的3到5倍pct_start设0.3。EMA指数移动平均一定要开它对小样本训练的稳定性提升很明显。YOLOv8默认开EMAdecay0.9999。如果训练过程中loss震荡厉害可以把decay降到0.999。3. 漏检控制的完整实操链路3.1 漏检的根因分析与控制点定位漏检控制不是单一环节的事它贯穿数据、训练、后处理、部署全链路。我先把漏检的根因拆开然后逐个说控制方法。漏检的根因主要有五类样本层面训练集没有覆盖某些缺陷形态或光照条件模型层面模型容量不足或训练不充分导致对某些缺陷的特征提取能力弱后处理层面置信度阈值设太高把低置信度的真缺陷过滤掉了部署层面量化或TensorRT加速导致精度损失小目标缺陷被漏掉数据漂移层面产线换了物料批次或光照模型没适应新分布。对应的控制点数据层面做困难样本挖掘和分布覆盖检查模型层面做损失函数加权和多尺度训练后处理层面做自适应阈值和NMS参数调优部署层面做量化校准和精度对齐验证数据漂移层面做在线监控和增量学习。3.2 困难样本挖掘与重训练策略困难样本挖掘Hard Example Mining是小样本场景下提升召回率最有效的手段之一。具体做法是用初始模型在验证集和产线实拍图上跑推理把漏检的、置信度低的、误检的样本收集起来人工复核后加入训练集重新训练。这个过程迭代2到3轮漏检率通常能降30%到50%。我具体说一下操作流程。第一轮训练完成后用模型对所有可用图片包括训练集、验证集、产线未标注图做推理导出每张图的检测结果。然后写脚本筛选真实标注存在但模型没检出的漏检模型检出但置信度低于0.3的低置信度模型检出但和真实标注IoU低于0.3的定位错误。把这些图片挑出来人工确认后重新标注加入训练集。这里有个技巧不要只加漏检样本还要加对应的正常样本。比如模型把某种正常纹理误判为缺陷你不仅要加缺陷样本还要加这种正常纹理的样本作为负样本让模型学会区分。重训练时学习率要比上一轮低通常用上一轮最终学习率的1/2到1/5。如果上一轮用了freeze这一轮可以解冻更多层。我的经验是每轮困难样本挖掘后解冻层数增加5层直到全网络微调。3.3 后处理参数调优与自适应阈值YOLO的后处理有两个关键参数置信度阈值conf_thres和NMS的IoU阈值iou_thres。这两个参数直接决定漏检和误检的平衡。conf_thres默认0.25但在工业缺陷检测中我通常降到0.1甚至0.05。原因很简单漏检的代价远高于误检。一个漏检的缺陷流到客户手里可能是批量召回一个误检的缺陷被人工复核排除只损失一点工时。所以宁可误检不可漏检。但conf_thres降太低会导致大量误检产线工人会抱怨狼来了。解决办法是分级处理conf高于0.5的缺陷直接报警停机conf在0.1到0.5之间的缺陷标记为疑似推给人工复核conf低于0.1的忽略。这样既控制了漏检又不会让工人被误检淹没。iou_thres默认0.7对于密集缺陷场景比如PCB板上多个相邻的焊点缺陷0.7会导致相邻缺陷被NMS合并造成漏检。我的做法是如果缺陷目标密集iou_thres降到0.5到0.6如果缺陷目标稀疏保持0.7。自适应阈值是更高级的做法。核心思想是根据图像的整体质量动态调整conf_thres。比如图像对比度低、光照暗时模型置信度普遍偏低此时应该降低conf_thres图像清晰、光照好时可以提高conf_thres。实现方式可以是计算图像的拉普拉斯方差衡量清晰度和平均亮度用这两个指标查表得到conf_thres的调整系数。3.4 多尺度推理与TTA增强多尺度推理Multi-Scale Inference是提升召回率的有效手段。YOLO训练时通常固定输入640但推理时可以用640、800、1024三个尺度分别推理然后把结果做NMS融合。小目标缺陷在大尺度下更容易被检出大目标缺陷在小尺度下也不会漏。我实测过单尺度640推理的漏检率是3.8%三尺度融合后降到2.1%代价是推理时间增加2.5倍。如果产线节拍允许这个代价是值得的。如果节拍紧张可以只用640和800两个尺度漏检率降到2.6%推理时间增加1.6倍。TTATest Time Augmentation是另一种增强手段。对同一张图做水平翻转、垂直翻转、多尺度缩放分别推理后融合结果。TTA通常能提升1到2个点mAP但推理时间成倍增加。工业场景下我通常只在离线复检环节用TTA在线检测不用。提示多尺度和TTA的融合策略很重要。不要简单地把所有检测框堆在一起做NMS而是先按尺度分组每组内部做NMS然后组间再做一次NMS。这样可以避免不同尺度的框互相抑制。3.5 模型量化与TensorRT部署的精度对齐模型部署到产线通常要用TensorRT加速。但FP16或INT8量化会带来精度损失小目标缺陷尤其容易在量化后漏检。我踩过的坑是PyTorch模型验证集mAP 0.85转成TensorRT INT8后mAP掉到0.78漏检率翻倍。解决办法是量化校准。TensorRT的INT8量化需要一个校准集用真实产线图片做校准而不是用随机噪声或COCO图片。校准集数量建议500到1000张覆盖各种光照和缺陷类型。校准算法用EntropyCalibrator2它比MinMax校准更稳定。如果INT8量化后精度损失仍然不可接受可以退而求其次用FP16。FP16的精度损失通常很小mAP掉0.5个点以内推理速度比FP32快1.5到2倍。T4显卡上YOLOv8n 640分辨率FP16推理能到200FPS以上FP32只有120FPS左右。精度对齐验证是部署前必须做的。用同一批测试图片分别跑PyTorch模型和TensorRT模型逐张对比检测结果。如果某张图的检测框差异超过5%就要排查是量化问题还是预处理/后处理不一致。常见的不一致包括归一化参数不同、letterbox填充方式不同、NMS实现不同。3.6 产线在线监控与增量学习机制模型上线不是终点而是起点。产线的物料批次、光照条件、相机状态都会变化模型性能会随时间衰减。必须建立在线监控和增量学习机制。在线监控的核心指标是日漏检率和日误检率。漏检率怎么算产线上通常有抽检环节抽检发现的不良品如果模型没报警就是漏检。误检率则是模型报警但人工复核为正常的比例。这两个指标每天统计画趋势图。如果漏检率连续3天上升或者单日漏检率超过阈值比如2%就触发告警。增量学习的流程是每天收集产线上的误检和漏检样本人工复核后加入训练集。每周做一次增量训练用新数据微调模型。增量训练的学习率要低1e-4到1e-5epochs要少20到50避免灾难性遗忘。如果新数据量较大超过500张可以混合旧数据一起训练旧数据和新数据的比例控制在1:1到1:2。我做过的一个项目产线运行6个月通过增量学习迭代了12次漏检率从初始的5.2%降到了0.8%而且模型对新的物料批次适应良好。4. 常见问题与排查技巧实录4.1 训练不收敛或loss震荡的排查小样本训练最常见的问题是loss震荡或不收敛。我按排查顺序列一下。第一步检查数据标注。用可视化脚本把标注框画到图片上逐张看。我遇到过标注框坐标超出图片边界的也遇到过类别标签写错的。这些低级错误会导致loss异常。第二步检查学习率。lr00.001对于小样本微调通常没问题但如果你的预训练权重不是COCO的而是自己数据集训的可能需要更低。可以跑一个LR Finder找到loss下降最快的学习率。第三步检查batch size。小样本场景下batch size不能太小否则BN层的统计量不准。如果显存不够可以用梯度累积accumulate4等效于batch size翻4倍。第四步检查损失权重。如果cls loss远大于box loss说明分类太难可以降低cls权重或增加分类样本。如果box loss震荡可能是定位损失对某些异常框惩罚过大可以检查是否有标注框宽高为0的情况。第五步检查EMA。如果开了EMA但loss震荡尝试关闭EMA看是否改善。有些小样本场景下EMA反而会拖慢收敛。4.2 验证集mAP高但产线漏检率高的原因这是最让人头疼的问题实验室指标漂亮上线就拉胯。原因通常有四个。数据分布不一致。验证集是从训练集同分布划分的但产线图片的光照、角度、背景可能完全不同。解决办法是验证集必须包含产线实拍图而且要和训练集按批次划分。标注标准不一致。训练集的标注可能比产线实际要求宽松。比如训练时把轻微色差标为缺陷但产线质检员认为轻微色差可接受。这会导致模型在产线上把可接受的色差判为缺陷而真正的严重缺陷反而因为特征相似被漏掉。后处理参数不匹配。训练时的conf_thres和产线部署时的conf_thres可能不同。训练时用0.25产线为了降误检调到0.5漏检率自然上升。量化精度损失。前面说过INT8量化可能导致小目标漏检。解决办法是做量化校准和精度对齐验证。4.3 缺陷目标极小时的检测技巧工业缺陷经常只有几个像素大小比如LCD屏的微小亮点、芯片表面的微划痕。YOLO在640分辨率下8倍下采样的特征图是80x80每个格子对应原图8x8像素。如果缺陷只有3x3像素在特征图上还不到一个格子很容易被漏掉。解决办法有四个。提高输入分辨率从640提到1280特征图变成160x160每个格子对应8x8像素小缺陷更容易被检出。代价是推理速度降到1/4。修改网络结构去掉P5层增加P2层4倍下采样让网络在更高分辨率特征图上做检测。YOLOv8可以通过修改yaml配置文件实现。切片推理把大图切成小图分别推理等效于提高分辨率但要注意切片边界的缺陷可能被切掉。NWD损失前面提过NWD对小目标的定位更鲁棒。我做过一个芯片划痕检测项目缺陷宽度只有2到3像素。640分辨率下漏检率15%1280分辨率降到6%加上P2层降到3.5%切片推理加NWD损失最终降到1.8%。4.4 多路视频流场景下的性能优化产线通常有多路相机T4显卡要同时处理多路视频流。热词里有人问T4 1080p25帧每秒用TensorRT YOLO 640分辨率检测可以支持多少路我实测的数据是YOLOv8n FP16 TensorRT640分辨率单路1080p25帧的推理耗时约8msT4理论算力可以支持12到15路。但实际要考虑视频解码、预处理、后处理的耗时以及内存带宽瓶颈稳妥的支持路数是8到10路。如果路数不够优化方向有降低推理分辨率到480或320速度提升1.5到2倍跳帧推理每2帧推理一次中间帧用跟踪算法补模型剪枝去掉冗余通道YOLOv8n剪枝30%后速度提升20%精度掉1个点以内多流并行用TensorRT的Multi-Stream或CUDA Stream让多路推理重叠执行。4.5 常见问题速查表问题现象可能原因排查方法解决方案训练loss不下降学习率过大/过小跑LR Finder调整lr0到0.0005-0.001验证集mAP高但产线漏检数据分布不一致对比训练集和产线图按批次划分验证集加产线实拍图小目标漏检严重分辨率不足可视化特征图提高分辨率加P2层用NWD损失误检率高conf_thres太低统计误检样本分级处理提高conf_thresTensorRT精度掉点量化损失逐张对比PyTorch和TRT结果用真实数据做量化校准多路视频流卡顿推理耗时超节拍测单路推理耗时降分辨率跳帧模型剪枝模型上线后性能衰减数据漂移监控日漏检率增量学习每周微调4.6 几个我踩过的坑和独家技巧坑一用COCO预训练权重直接微调但输入分辨率不匹配。COCO预训练是640分辨率如果你的产线图是1280x1024直接resize到640会丢失小缺陷。正确做法是保持长边1280短边letterbox填充到1280训练时imgsz1280。但这样显存占用大可以用梯度累积。坑二标注时用矩形框标划痕但划痕是斜的。矩形框会包含大量背景模型学到的特征不纯。解决办法是用旋转框标注OBBYOLOv8支持OBB任务。或者用实例分割YOLOv8-seg可以输出缺陷的像素级掩码对不规则缺陷更友好。坑三验证集指标用mAP但产线只关心漏检率。mAP是综合指标漏检率是召回率相关。优化mAP不一定优化漏检率。我的做法是自定义评估指标重点看Recallconf_thres0.1这个指标直接反映漏检情况。技巧一用DeepSeek或GPT辅助生成缺陷描述。把缺陷图片喂给多模态大模型让它描述缺陷的视觉特征然后把这些描述作为文本提示结合CLIP做零样本分类可以辅助发现未知类型的缺陷。技巧二用趋势图监控模型性能。每天统计漏检率、误检率、平均置信度画趋势图。如果平均置信度连续下降说明模型对当前数据分布不适应需要增量学习。技巧三保存困难样本的原始图片和推理结果。每次增量学习时把这些困难样本按时间排序看模型是否在重复犯同样的错误。如果同一个缺陷形态反复漏检说明数据增强或损失函数需要调整。技巧四用YOLO的验证集预测结果做可视化对比。YOLOv8训练完会自动生成验证集的预测图把这些图和真实标注并排看能直观发现模型在哪里漏检、哪里误检。我通常会把预测图按漏检数量排序优先分析漏检最多的图片。技巧五部署前做端到端延迟测试。不要只测模型推理耗时要测从相机取图到输出检测结果的完整链路耗时。我遇到过模型推理只要8ms但图像解码和预处理花了20ms导致整体节拍不达标。优化预处理用GPU解码、用CUDA做归一化能省下大量时间。技巧六用ONNX Runtime做中间验证。PyTorch转TensorRT之前先转ONNX用ONNX Runtime跑一遍对比PyTorch和ONNX的输出。如果ONNX和PyTorch不一致说明导出有问题如果ONNX和PyTorch一致但TensorRT不一致说明是量化问题。这样能快速定位精度损失的环节。技巧七多模型融合兜底。YOLO负责已知缺陷PatchCore负责未知异常两者结果做加权融合。融合策略可以是YOLO置信度高于0.5的直接输出YOLO置信度在0.1到0.5之间的如果PatchCore也判为异常则输出YOLO没检出但PatchCore判为异常的标记为疑似未知缺陷推人工复核。这套策略在我做的项目中把未知缺陷的漏检率从12%降到了3%以下。技巧八定期做模型回归测试。每次增量学习后用固定的回归测试集包含历史所有缺陷类型跑一遍确保新模型没有遗忘旧知识。如果某个旧缺陷类型的召回率下降超过5%说明发生了灾难性遗忘需要调整增量学习的策略比如混合更多旧数据或者用EWCElastic Weight Consolidation等防遗忘算法。技巧九用TensorRT的DLA加速。如果用的是Jetson系列边缘设备可以把部分层放到DLA深度学习加速器上跑释放GPU算力。但DLA对某些算子不支持需要测试兼容性。我的经验是YOLOv8的Backbone可以放DLANeck和Head放GPU整体速度提升30%左右。技巧十监控GPU温度和功耗。产线环境温度可能较高T4长时间满载运行会降频。如果发现推理速度突然下降先查GPU温度。解决办法是加装散热风扇或者限制功耗上限nvidia-smi -pl 50牺牲一点性能换稳定性。这些经验都是我在实际项目中一张图一张图标出来、一行代码一行代码调出来的。工业缺陷检测没有银弹小样本和漏检控制都是需要持续迭代的工程问题。模型上线只是开始后面的数据闭环和增量学习才是保证长期效果的关键。
返回列表