深度学习实现缺陷检测算法汇总
我跟你说个真事儿。
前两天又有人跑来问我:“兄弟,缺陷检测到底用深度学习行不行?”
你想想啊,我干这行快十年了,这种问题听了不下几百遍。每次听到我都头疼——因为这问题压根儿没法用“行”或“不行”来回答。
正确答案是啥?看!你!怎!么!用!
说到这儿,我想起2016年刚入坑的时候。那时候客户让我们检测布匹上的瑕疵,我们试了传统机器视觉——好家伙,调参调到怀疑人生,换一种布料就得重新标定一遍,整个人都快疯掉了。
后来我们想了个主意:把大图切成小块,扔进CNN做分类。效果确实好了一点,但速度呢?慢到生产线工人能站着打瞌睡。
今天我就把深度学习缺陷检测的整个演进史,从头给你扒一遍。哪些是坑,哪些还能用,哪些千万别碰——全给你说清楚。
最早大家怎么干的?2016年有篇文章叫《A fast and robust convolutional neural network-based defect detection model in product quality control》,标题挺唬人,做法其实很简单:把大图切成小图块,每个图块送进CNN判断是正常还是缺陷,推理时用滑动窗口扫一遍。
我在那个布匹项目里真试过。准确率还行——毕竟是图像分类嘛,VGG或ResNet闭眼上,80%稳稳的。但一张2000×2000像素的图,步长设成32,要跑几千次啊!一张图几十秒,生产线早就喊停了。这玩意儿只适合离线抽检,或者缺陷特别稀疏的场合。你要是想用在皮带线上?趁早换思路。
后来2017年有篇论文做接触网支架紧固件检测,用了三层SSD:先SSD定位主要结构件,再在结构件里SSD检测紧固件,最后把紧固件裁下来用分类网络判断是否缺失。我当时在一个铁路项目里见过类似思路,先粗后细、层层过滤,听起来多符合工业逻辑。
但实际用起来呢?每个阶段都会漏,漏检率叠加,最终效果惨不忍睹。而且不是端到端的,调试得串行调三个网络,换一个场景就得从头再来。工程上上两阶段检测器(Faster R-CNN)或单阶段(YOLO、SSD)就够了,三阶段方案更适合灌水。
再往后,大概2018年左右大家发现,分类和检测都只能画框,但缺陷往往是不规则形状的,框里还有大量正常区域。于是语义分割方案来了。最有代表性的是那篇《Automatic Fabric Defect Detection with a Multi-Scale Convolutional Denoising Autoencoder Network Model》,它用高斯金字塔配合语义分割重建缺陷,推理时融合多尺度结果。
我测试过类似框架。分割确实能给出像素级轮廓,对划痕、凹坑这类不规则缺陷处理得特别好。但你得需要像素级标注啊!工业场景最缺的就是标注。跟你说个真事儿:我们团队为了标1000张钢带表面缺陷图,三个实习生干了两周,还吵了好几架。别看论文里mIoU多高,落地的时候标签成本能把你劝退。
从2019年开始大家被标注成本搞怕了,开始追捧无监督方法。主要套路是用自编码器或GAN重构正常样本,缺陷区域因为训练集里没出现过,重构误差比正常区域大,自然就被定位出来。我记得有一篇用级联自编码器做划痕检测的,效果还行。但阈值特别难调——设高了漏检,设低了误检满天飞。
后来有人用GAN生成缺陷样本来扩充数据集。我试过DCGAN和WGAN,生成的质量嘛……你猜怎么着?有时候生成的缺陷看起来像鬼片特效,模型根本学不到真实特征。这两年扩散模型出来了,生成质量上了一个台阶。我2024年试过用Stable Diffusion做数据增强,效果确实比GAN好。但计算量大得离谱——一张图生成几十秒,还得用高端显卡。我的建议是:无监督检测目前只能当辅助手段,用来初筛出可能缺陷的区域,然后让人确认。全自动部署?我还没见过成功的案例。
近些年工业界最火的,绝对是YOLO系列。从YOLOv3到YOLOv8、v9、v10,每个版本在速度和精度上都有提升。我深度用过YOLOv5和YOLOv8做链条缺陷检测、PCB缺陷检测等项目。说几个具体数字:在链条缺陷检测项目里,我们用YOLOv8n在GTX 1660上跑到30fps,mAP@0.5达到0.85左右。30fps啊,工业现场完全够用!
对比YOLOv8n和YOLOv10n呢?YOLOv10n推理速度更快(得益于无NMS设计),但轻量模型在处理高分辨率小目标时稍弱。我的建议是:追求极致速度用v10,精度优先用v8加注意力机制(SE、CBAM等),效果还能再提1-2个点。
另外,Transformer也加入了进来。2025年有论文用Self-Induction Vision Transformer在MVTec AD基准上AUROC拉到98%以上,比CNN高了不少。但问题又来了:Transformer推理计算量太大,工业端侧设备根本跑不动。目前看最稳的还是YOLOv8加注意力机制。
不同行业各有各的坑,我说几个我踩过的,你千万别重蹈覆辙。
先讲PCB缺陷检测。我试过那个Tiny-Defect-Detection-for-PCB项目,它专门针对微小缺陷优化,在AOI替代场景里挺好用。但坑在哪儿?它对光照变化特别敏感,稍微换个光源就失效。解决方案是数据采集时故意变化打光角度,否则部署后报警率会爆表。
再说钢材表面缺陷。热轧钢带上的氧化皮、斑块、划痕,类间差异小、类内差异大。我调了YOLOv8加SE注意力,还加了马赛克数据增强,才把召回率从72%拉到85%。另外有个叫Severstal-Steel-Defect-Detection的项目,有大量公开数据,很适合新手练手。
纺织品检测也有麻烦。布匹褶皱、色差、断纱,我踩过最大的坑是训练集全在理想光照下平铺拍摄,结果产线上布料一抖动,误检率直接翻倍。后来我加入随机仿射变换和模糊,才稳定下来。
总之,工业场景一定要做针对性的数据增强,别偷懒。
未来三两年,我看好三条路。
第一条是小样本学习。现在无论是MAML还是原型网络,在工业缺陷上效果都一般。但结合生成模型合成缺陷再训练,正成为主流。我在一个只有10张缺陷图的半导体项目中,用扩散模型生成500张,模型准确率从55%提到了80%,虽然还不到商用水平,但进步明显。
第二条是多模态融合。单纯视觉有时分辨不了真正的缺陷和灰尘、油污干扰,加上红外或3D点云能显著提升鲁棒性。我见过一些工厂在尝试RGB-D结合,但数据对齐和成本问题还没完全解决。
第三条是边缘端推理。YOLOv8-nano在Jetson Orin上能跑到60fps——60fps啊!完全满足产线节拍。Transformer轻量化版本比如MobileViT也在路上,预计2026年能有实用的工业级产品。但这对工程师提出了新要求:模型剪枝、量化等技能,成了新的门槛。
最后说句大实话。
深度学习缺陷检测到底能不能用?
能用。但千万别指望开箱即用。
我每个项目至少花30%时间在数据收集和清洗上,20%时间调参,剩下50%在和产线工人吵架——“这个明明是划痕,你非说是脏点,到底按哪个标?”
这行就是这样。
算法只是冰山一角,真正有价值的是你对场景的理解。
希望这篇汇总能让你少走弯路。至少别像我当年一样,掉进三阶段检测的坑里爬不出来。
记住一句话:算法只是你的剑,场景才是你的武功秘籍。
读者评论 4