2. 缺陷检测基础
在工业视觉领域,缺陷检测是质量管控的核心环节。无论是消费电子结构件、动力电池极片、半导体晶圆,还是汽车钣金表面,产品表面的划痕、凹坑、污渍等微小瑕疵都会直接影响功能安全与客户满意度。本章作为PointNet模型部署的前置基础,将系统梳理缺陷的物理成因与视觉表现,明确检测任务的数学定义与评价指标,并深入对比传统机器视觉与深度学习方法的适用边界。只有透彻理解“缺陷是什么、任务如何定义、方法为何演进”,才能在后续章节中正确选择PointNet的输入表征、设计损失函数并制定部署策略。
2.1 常见缺陷类型与物理成因
缺陷检测的第一步是建立对缺陷的“视觉词典”。不同材质、不同工艺环节产生的缺陷,其几何形态、光学反射特性和灰度分布差异巨大。只有理解缺陷的物理本质,才能设计出有效的图像采集方案和算法模型。
2.1.1 表面划痕(Scratch)
划痕是最常见的缺陷类型,通常由硬质颗粒、刀具磨损或工件间相对滑动造成。在视觉上表现为细长的线性沟槽,方向可能规则(如磨削纹路)或随机。划痕的深度和宽度变化范围大,浅划痕在均匀光照下对比度极低,容易漏检。在3D点云数据中,划痕表现为局部深度突变,形成一条连续的凹陷轨迹。
2.1.2 凹坑与压伤(Dent / Pit)
凹坑多由冲击、碰撞或材料内部气泡破裂形成,呈圆形或椭圆形凹陷。在2D图像中,凹坑表现为局部灰度异常区域,边缘可能有阴影;在3D点云中,凹坑是局部点云深度低于周围邻域的连通区域。凹坑的检测难点在于其尺寸可能很小(直径小于1mm),且与噪声点难以区分。
2.1.3 污渍与污染(Stain / Contamination)
污渍包括油污、指纹、残留胶水、化学试剂痕迹等,其本质是表面材料或化学成分的局部变化。在2D图像中,污渍通常表现为颜色或灰度异常区域,边缘模糊;在3D数据中,污渍可能不产生明显的深度变化,但会影响表面反射率。因此,污渍检测往往需要结合灰度图像和点云反射强度信息。
2.1.4 其他常见缺陷
| 缺陷类型 | 典型成因 | 视觉表现 | 检测难度 |
|---|---|---|---|
| 毛刺(Burr) | 切削加工边缘残留 | 尖锐突起,灰度突变 | 中 |
| 气泡(Bubble) | 注塑/涂布工艺中气体残留 | 圆形透明或暗斑 | 中 |
| 裂纹(Crack) | 应力集中或材料疲劳 | 不规则线状,分支状 | 高 |
| 异物(Foreign Material) | 环境颗粒混入 | 局部灰度/高度异常 | 低-中 |
| 纹理异常(Texture Defect) | 工艺参数漂移 | 周期性纹理破坏 | 高 |
2.2 缺陷检测任务的形式化定义
从数学角度看,缺陷检测可以定义为从传感器数据到缺陷属性的映射函数。根据输出粒度不同,任务分为三个层级:图像级分类、目标级定位、像素级分割。PointNet模型天然支持点级分类和分割,因此更适合后两种任务。
2.2.1 任务分类与输出定义
- 图像级分类:输入一张图像或一帧点云,输出OK/NG标签。适用于快速筛选,但无法提供缺陷位置信息。
- 目标级定位:输出缺陷的包围盒(Bounding Box)或中心点坐标。在点云中,通常输出缺陷点簇的中心和半径。
- 像素/点级分割:对每个像素或每个3D点输出缺陷类别标签。这是最精细的任务,也是PointNet最擅长的方向。
2.2.2 评价指标与业务约束
在工业部署中,单纯追求准确率(Accuracy)是危险的,因为缺陷样本通常只占总数量的1%以下。必须使用以下指标:
| 指标 | 公式 | 业务含义 |
|---|---|---|
| 精确率(Precision) | TP / (TP + FP) | 检出的缺陷中真实缺陷的比例,影响过杀率 |
| 召回率(Recall) | TP / (TP + FN) | 真实缺陷中被检出的比例,影响漏杀率 |
| F1-Score | 2PR / (P + R) | 综合平衡指标 |
| IoU(交并比) | 预测区域 ∩ 真实区域 / 预测区域 ∪ 真实区域 | 分割/定位精度 |
| 过杀率 | FP / (TP + FP) | 误判为缺陷的好品比例,直接影响生产成本 |
| 漏杀率 | FN / (TP + FN) | 漏检的真实缺陷比例,直接影响质量事故 |
2.3 传统方法与深度学习方法对比
理解传统方法的局限性,是理解深度学习(尤其是PointNet)价值的前提。传统方法并非一无是处,在特定场景下仍有其优势。
2.3.1 传统机器视觉方法
传统方法的核心是“手工特征 + 分类器”。典型流程包括:图像预处理(去噪、增强)→ 特征提取(灰度统计、边缘检测、纹理分析)→ 特征选择与降维 → 分类器设计(阈值、SVM、决策树)。
// 传统划痕检测简化流程(OpenCV伪代码)
Mat img = imread("surface.jpg", IMREAD_GRAYSCALE);
GaussianBlur(img, img, Size(5,5), 0);
Mat edges;
Canny(img, edges, 50, 150);
// 形态学闭运算连接断裂边缘
Mat kernel = getStructuringElement(MORPH_RECT, Size(15, 1));
morphologyEx(edges, edges, MORPH_CLOSE, kernel);
// 轮廓筛选:长宽比 > 10 且面积 > 阈值
vector<vector<Point>> contours;
findContours(edges, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
for (auto& c : contours) {
RotatedRect r = minAreaRect(c);
if (r.size.width / r.size.height > 10 || r.size.height / r.size.width > 10) {
// 标记为划痕
}
}
传统方法的优势在于可解释性强、计算资源消耗低、无需大量标注数据。但其致命缺陷在于:特征设计依赖工程师经验,换一个产品型号或材质,往往需要重新设计特征。对于纹理复杂、缺陷形态多变的场景,传统方法的泛化能力很差。
2.3.2 深度学习方法
深度学习方法(CNN、PointNet等)通过数据驱动的方式自动学习特征表示。以PointNet为例,它直接接受原始点云作为输入,通过共享多层感知机(MLP)提取每个点的特征,再通过最大池化聚合全局特征,实现对点云的无序性鲁棒处理。
| 对比维度 | 传统方法 | 深度学习方法(含PointNet) |
|---|---|---|
| 特征来源 | 人工设计(SIFT、HOG、LBP等) | 数据驱动自动学习 |
| 所需数据量 | 少量样本即可 | 通常需要数千张以上标注数据 |
| 泛化能力 | 换型号需重新调参 | 同一模型可适应相似产品 |
| 可解释性 | 高(特征物理意义明确) | 低(黑盒模型) |
| 推理速度 | 快(毫秒级) | 依赖硬件,GPU下可达实时 |
| 对复杂缺陷的适应性 | 差(难以覆盖形态变化) | 强(能学习复杂模式) |
| 3D点云支持 | 需投影为2D或手工提取3D特征 | PointNet原生支持无序点集 |
2.4 案例拆解:动力电池极片划痕检测方案选型
为帮助理解上述概念,我们以一个典型的动力电池极片划痕检测项目为例,完整复盘方案选型过程。
2.4.1 项目背景与约束
某锂电池厂商需要在涂布工序后检测极片表面的划痕缺陷。极片尺寸为300mm×200mm,材质为铝箔/铜箔,表面有均匀的碳涂层。产线节拍要求每片检测时间不超过500ms。缺陷标准:长度大于2mm、宽度大于0.1mm的划痕必须检出,漏杀率<0.1%,过杀率<0.5%。
2.4.2 初始方案与问题
初期尝试传统方法:使用高亮线扫相机获取2D灰度图,通过Canny边缘检测+形态学处理提取划痕。实际测试发现:
- 碳涂层表面存在大量随机纹理,导致边缘检测产生大量伪边缘,过杀率高达15%。
- 浅划痕对比度极低(灰度差仅5-10),阈值难以设定,漏杀率超过3%。
- 更换批次材料后,涂层颜色略有差异,原有阈值全部失效。
2.4.3 引入3D点云与PointNet
团队决定引入激光轮廓传感器,获取极片表面的3D点云数据(每片约50万点)。划痕在点云中表现为连续的深度凹陷,不受涂层颜色影响。使用PointNet进行点级分割:
# PointNet模型输入输出示意
# 输入: (B, N, 3) 其中N为点数,3为(x,y,z)坐标
# 输出: (B, N, 2) 每个点的缺陷/正常概率
model = PointNet(num_classes=2)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
# 训练数据增强:随机旋转、平移、下采样
for epoch in range(200):
for batch in dataloader:
points, labels = batch # labels: 0正常, 1划痕
pred = model(points)
loss = F.cross_entropy(pred, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
2.4.4 结果与复盘
| 指标 | 传统方法 | PointNet方法 |
|---|---|---|
| 漏杀率 | 3.2% | 0.08% |
| 过杀率 | 15% | 0.4% |
| 单片推理时间 | 80ms | 350ms(GPU) |
| 换批次适应性 | 需重新调参 | 无需调整 |
最终方案采用“传统方法快速定位可疑区域 + PointNet精细确认”的级联架构,将整体推理时间控制在450ms内,同时满足漏杀率和过杀率要求。复盘经验:3D点云数据对划痕检测的鲁棒性远优于2D灰度图,但PointNet对点云密度敏感,需要根据实际传感器分辨率调整下采样策略。
2.5 常见误区与总结复盘
在缺陷检测项目实践中,工程师常陷入以下误区,需要特别警惕:
- 误区一:盲目追求高精度而忽略过杀率。在产线上,过杀率过高会导致大量良品被误判,造成巨大经济损失。模型调优时应同时关注Precision和Recall,而非单一指标。
- 误区二:忽视数据分布不均衡。缺陷样本通常极少,直接训练会导致模型偏向预测为“正常”。需要使用Focal Loss、数据增强或合成缺陷数据来平衡。
- 误区三:将2D图像方法直接迁移到3D点云。点云具有无序性、稀疏性和旋转不变性需求,必须使用PointNet等专门处理点云的架构,不能简单将深度图当作灰度图处理。
- 误区四:忽略部署环境的算力限制。训练时使用高性能GPU,但产线可能只有嵌入式设备。需要在训练时就考虑模型剪枝、量化和推理框架的选择。