1. 项目背景与核心价值
在机械制造和装配领域,螺栓、螺母、垫片等标准件的快速识别与分类一直是生产线上耗时费力的环节。传统人工分拣不仅效率低下,而且容易因视觉疲劳导致错检漏检。我们团队基于最新的YOLO11-seg模型开发的这套机械零件识别系统,能够实现六角螺栓、方颈螺栓、六角螺母、弹性卡环、弹簧锁紧垫片和平垫片六类常见标准件的自动化检测,实测分类准确率达到98.7%,单件识别耗时仅23ms。
这套系统的独特之处在于采用了改进的YOLOv8-seg架构,针对机械零件特有的反光表面和小尺寸特征进行了专项优化。相比通用目标检测模型,我们的方案在金属件反光干扰下的识别稳定性提升了42%,特别适合装配线质量检测、智能仓储分拣等工业场景。
2. 技术方案选型解析
2.1 为什么选择YOLO11-seg
在模型选型阶段,我们对比了Faster R-CNN、Mask R-CNN和YOLO系列等多个方案。最终选择YOLO11-seg主要基于三个考量:
-
实时性要求:产线传送带速度通常达0.5m/s,需要模型在30ms内完成检测。YOLO系列的单阶段检测架构天生具有速度优势,实测YOLO11-seg在RTX 3060上推理速度比Mask R-CNN快3倍
-
小目标检测:垫片类零件最小直径仅5mm(1920x1080图像中约15x15像素)。YOLO11-seg新增的微小目标检测头(P2层)可将小目标AP提升27%
-
分割需求:弹性卡环等异形件需要轮廓信息判断安装方向。基于分割的检测方式比纯bbox方案在方向判断准确率上高出35%
2.2 数据集构建要点
我们采集了超过12,000张机械零件图像,覆盖6大类32个子类。关键数据增强策略包括:
- 反光模拟:添加高斯噪声和随机高光区域,模拟金属表面反光
- 遮挡增强:随机遮挡20%-50%区域,模拟零件堆叠场景
- 多角度渲染:对3D模型进行360度旋转渲染,确保视角多样性
特别需要注意的是,弹簧锁紧垫片的正反面特征差异极大(正面有凸起,背面为平面),我们在数据标注时将其作为两个独立类别处理。
3. 模型优化关键步骤
3.1 骨干网络改进
标准YOLOv8的CSPDarknet骨干在金属件检测中存在两个问题:
- 高光区域特征丢失严重
- 螺纹细节捕捉不足
我们的改进方案:
python复制# 在Backbone末端添加Reflection-aware模块
class ReflectionAware(nn.Module):
def __init__(self, c1, c2):
super().__init__()
self.conv1 = Conv(c1, c2, 3, 1, act=nn.SiLU())
self.attn = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(c2, c2//8, 1),
nn.ReLU(),
nn.Conv2d(c2//8, c2, 1),
nn.Sigmoid())
def forward(self, x):
x = self.conv1(x)
return x * self.attn(x)
3.2 分割头专项优化
针对机械零件的几何特征,我们对分割头做了三点改进:
- 轮廓增强损失:在标准Dice Loss基础上增加边缘梯度损失
math复制L_{edge} = \frac{1}{N}\sum|\nabla P_{i,j} - \nabla G_{i,j}| - 多尺度特征融合:在P2-P5四个层级都添加分割头
- 方向感知模块:通过添加方向场预测分支,辅助判断零件安装方向
4. 部署与性能优化
4.1 TensorRT加速实践
在Jetson Xavier NX上的部署关键参数:
bash复制trtexec --onnx=yolo11-seg.onnx \
--fp16 \
--workspace=4096 \
--minShapes=images:1x3x640x640 \
--optShapes=images:8x3x640x640 \
--maxShapes=images:16x3x640x640
优化效果:
| 优化前 | 优化后 | 提升幅度 |
|---|---|---|
| 58ms | 23ms | 60.3% |
4.2 实际产线测试结果
在汽车零部件工厂的实测数据(连续8小时):
| 零件类型 | 检测数 | 误检数 | 漏检数 | 准确率 |
|---|---|---|---|---|
| 六角螺栓 | 12,458 | 23 | 17 | 99.68% |
| 方颈螺栓 | 8,742 | 45 | 32 | 99.12% |
| 弹簧锁紧垫片 | 6,521 | 89 | 67 | 97.60% |
注意:弹簧锁紧垫片误检主要发生在严重反光场景,后续计划通过增加偏振镜方案改善
5. 常见问题解决方案
5.1 反光干扰处理
我们总结出三级反光处理策略:
- 硬件级:安装环形偏振光源,成本约$200/工位
- 算法级:在数据预处理时使用Retinex算法增强
- 模型级:前文提到的ReflectionAware模块
5.2 小目标漏检优化
对于垫片类小目标,建议:
- 将输入分辨率从640x640提升到1280x1280
- 在Loss中增加小目标权重:
python复制loss_obj.data *= (1.0 + targets[:, 4].sum() * 0.1) # 小目标权重增强 - 使用SAHI进行切片推理
6. 工程落地经验
在实际部署中,我们发现三个易忽略但关键的点:
-
螺纹方向判断:六角螺栓需要区分左旋/右旋螺纹。通过在分割mask上计算螺旋梯度可以实现:
python复制def detect_thread_direction(mask): contours = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) M = cv2.moments(contours[0]) cx, cy = int(M["m10"]/M["m00"]), int(M["m01"]/M["m00"]) # 计算轮廓点与中心的夹角变化趋势 ... -
磨损件识别:使用3D渲染生成不同磨损程度的数据增强样本
-
光照自适应:部署时建议配合光强传感器动态调整模型参数
这套系统目前已在3家汽车零部件工厂稳定运行6个月以上,平均节省人工分拣成本75%,下一步计划扩展至轴承、齿轮等更复杂的机械零件识别场景。
