1. 课程导论

各位同学,欢迎来到这门课。

我先问大家一个问题:一条产线每分钟产出 200 个零件,人工目检能看住几个?

答案是——撑死 60 个,还得换人。疲劳、漏检、标准不统一,这些都是人工检测的硬伤。所以,缺陷检测这件事,必须交给机器。

1.1 为什么需要缺陷检测?

说白了,缺陷检测就是给产品做「体检」。你想想看,一个手机屏幕上有 0.1mm 的划痕,消费者可能直接退货。一个轴承表面有微裂纹,装到设备里可能引发安全事故。

我在 2016 年跟过一个项目,给某电子厂做 PCB 板检测。当时人工抽检的漏检率接近 8%,客户一个月要退回来好几批货。后来上了自动光学检测(AOI),漏检率直接压到 0.5% 以下。这就是缺陷检测的价值——保质量、降成本、提效率。

核心驱动力:
  • 质量管控:零缺陷生产要求,尤其是汽车、医疗、半导体行业
  • 成本控制:早期发现缺陷,避免后续装配、出货后的巨额返工
  • 效率提升:机器 7×24 小时不间断,速度是人工的 5-10 倍
  • 数据可追溯:每张图像、每个缺陷都有记录,便于复盘和工艺改进

1.2 传统方法怎么做?

传统方法,我习惯叫它「规则驱动」。工程师先观察缺陷长什么样,然后写一堆 if-else 规则去抓它。

举个例子,检测一个金属表面的划痕:

// 传统方法伪代码
1. 图像灰度化
2. 高斯滤波去噪
3. 固定阈值二值化(比如灰度 > 200 算缺陷)
4. 形态学开运算去除小噪点
5. 连通域分析,面积 > 50 像素的标记为缺陷

你看,每一步都是人定的。阈值 200 怎么来的?试出来的。光照一变,阈值就得调。我曾经在一个项目中,因为车间换了批 LED 灯,整个检测程序重调了两周。这就是传统方法的痛点——泛化能力差,维护成本高。

传统方法优势 传统方法劣势
可解释性强,每步逻辑清晰 对光照、角度变化敏感
计算量小,普通工控机就能跑 缺陷种类多时规则爆炸
不需要大量标注数据 纹理复杂场景几乎失效
调试工具成熟(Halcon、OpenCV) 维护需要工程师持续介入

1.3 深度学习怎么做的?

深度学习走的是另一条路——数据驱动。你给它看一万张有缺陷的图片和一万张好的图片,它自己学出「缺陷长什么样」。

还是那个划痕检测的例子,换成深度学习:

// 深度学习流程
1. 收集 20000 张标注好的图像(含划痕、脏污、正常等类别)
2. 设计或选择一个分类/分割网络(如 ResNet、U-Net)
3. 训练,让网络自己学习特征
4. 部署,输入新图像,直接输出缺陷位置和类别

你发现没有?工程师不再写规则了,而是准备数据、调网络结构、调超参数。 我刚开始转深度学习时,总觉得这玩意儿像个黑盒,心里没底。直到有一次,一个传统方法搞不定的「磨砂面划痕」项目,用 U-Net 分割网络三天就搞定了。嗯,从那以后,我对深度学习的看法彻底变了。

深度学习优势 深度学习劣势
泛化能力强,适应复杂纹理 需要大量标注数据
端到端,无需手工设计特征 计算量大,需要 GPU
同一套架构可迁移到不同缺陷 可解释性差,调试困难
持续迭代,数据越多效果越好 小样本场景容易过拟合

1.4 本质区别:规则 vs 特征

我把两者的本质区别总结成一句话:传统方法是在「定义缺陷」,深度学习是在「学习缺陷」。

传统方法:工程师说「灰度大于 200 且面积大于 50 像素的就是缺陷」。这是人定义的规则。

深度学习:网络说「我看了两万张图,发现这些像素组合在一起的时候大概率是缺陷」。这是数据驱动的特征。

我的建议: 不要非此即彼。实际项目中,我经常把两者结合起来。比如用传统方法做预处理(定位、裁剪),再用深度学习做精细分类。这叫「传统+深度」混合方案,效果往往 1+1 > 2。

1.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以看到缺陷检测的驱动力、两种技术路线,以及它们各自的适用场景。

缺陷检测技术路线对比 缺陷检测 传统方法(规则驱动) 深度学习(数据驱动) 手工设计特征 阈值 + 形态学 可解释性强 自动特征学习 端到端训练 泛化能力强 实际项目常采用「传统 + 深度」混合方案

1.6 避坑指南

我曾经踩过的坑:
  • 盲目上深度学习:一个简单的划痕检测,传统方法 2 天搞定,非要用深度学习,结果标注花了两周,训练又花了一周。杀鸡用牛刀。
  • 忽视数据质量:标注不准确,模型学到的全是错误特征。我见过一个项目,标注员把灰尘标成了缺陷,模型上线后误检率高达 30%。
  • 忽略光照一致性:传统方法对光照敏感,深度学习其实也敏感。训练时光照均匀,部署时光照一变,效果直接崩盘。

好了,这一章就到这里。记住一句话:没有最好的方法,只有最合适的方法。 后面的章节,我会带你深入每一种技术的细节,咱们一步步来。