本帖最后由 哈拉雷 于 2026-4-22 16:57 编辑
各位老法师、同行前辈好: 小弟最近在推进一个工业外观缺陷检测(AOI)项目,目前遇到了比较大的算法落地瓶颈。尝试了最新的无监督异常检测方案,但效果和效率都不尽如人意,特来向各位前辈请教。 【1. 项目背景与数据情况】 检测对象:金属零件表面上的 [划痕、脏污、砂眼等] 缺陷。 图像情况:原图分辨率较高,必须切图处理。目前采用 Tiling 策略,切图大小 tile_size = 512,一张原图大概会切出 63 张 Tile,张量形状为 (63, 3, 512, 512)。 算力与节拍要求:[这里填一下,比如:产线节拍要求 200ms 内出结果,工控机显卡是 RTX 3060]。
【2. 目前的算法路线与踩到的坑】
我目前使用的是 Intel 开源的 Anomalib 框架,主打模型选了据称推理只有几毫秒的 EfficientAD(学生-教师架构)。为了做 OOD 惩罚,也用到了 imagenette2 数据集。但目前卡在了以下几个痛点: 痛点一:Tiling 导致训练极度缓慢(数据量爆炸)
虽然 EfficientAD 推理快,但训练需要从零开始梯度下降。因为原图切出了 63 张小图,导致训练数据量暴增 63 倍!跑一个 Epoch 都非常吃力,调试周期被拉得极长。 痛点二:切图边缘的“截断问题”与 Stride 设定的两难
对于长条形或跨界的缺陷,如果不设置重叠(Overlap),缺陷会被切成两半导致漏检。但我如果把 stride 设置得很小(比如 256,50%重叠),切图数量还会翻倍,推理和训练速度彻底崩盘。 痛点三:精度根本达不到产线要求(过杀与漏检齐飞)
作为无监督模型,不给 Mask 确实省了标图的时间,但模型对“正常纹理的波动”和“轻微灰尘”极其敏感,导致误检率(过杀)极高。同时,对于一些复杂的特征,模型又会出现漏检。
【3. 诚心向各位前辈请教以下问题】 针对高分辨率大图的缺陷检测,大家目前工业界主流是怎么做的?
是像我这样硬切图(Tiling)送入深度学习?还是先用传统的 OpenCV/Halcon 算子做个粗定位(ROI),抠出关键区域再送入网络? 在 Anomalib 框架下,有没有大佬成功在产线部署过 EfficientAD 或 PatchCore?
在只有少量或者没有 NG 图的情况下,大家是怎么解决“阈值设定”和“抑制误检”问题的? 我是不是走错赛道了?
如果无监督(UAD)真的这么难调,结合我现在的困境,是不是应该老老实实去花一周时间标图,直接上 YOLOv8-Seg (实例分割) 或者单纯的目标检测? 光学降维打击的可能性
这种缺陷,有没有可能通过换光源(比如打低角度暗场、同轴光)把对比度拉高,直接用传统的 Halcon Blob 分析秒杀掉?
困扰好几天了,提前感谢各位大佬的指点与拍砖!小弟虚心受教!
|