工业领域AI视觉检测入门实战:从零搭建缺陷检测系统
·
从产线痛点说起
上个月参观某电子厂时,产线主管指着堆积如山的退货品苦笑:"这批电路板有3%的隐形划痕漏检,导致整批产品召回,损失够买十台检测设备了"。传统人工质检面临三大难题:
- 肉眼疲劳:工人连续检查2小时后,漏检率飙升40%
- 标准不一:不同班次判定尺度差异导致质量波动
- 成本高企:深圳质检员月薪已突破8K,还难招到人

技术选型:为什么是YOLOv5?
传统OpenCV方案(如Canny边缘检测)在规则缺陷上表现尚可,但遇到以下场景就力不从心:
- 复杂背景:反光金属表面的细微裂纹
- 形态变异:非标准位置的焊点缺陷
- 微小目标:小于10x10像素的元件缺损
YOLOv5s(小型版本)在工业场景的优势非常明显:
- 单张Tesla T4显卡即可训练
- 640x640输入分辨率下达到130FPS
- 自带数据增强管道减少过拟合
实战四步走
第一步:数据标注规范
使用LabelImg时特别注意:
- 标注框务必贴紧缺陷边缘(1-2像素公差)
- 对模糊样本采用多人标注投票机制
- 类别命名统一用英文驼峰式(如"solderBubble")
# 标注文件检查脚本示例
import xml.etree.ElementTree as ET
def check_annotation(xml_path):
tree = ET.parse(xml_path)
size = tree.find("size")
width = int(size.find("width").text)
for obj in tree.findall("object"):
bbox = obj.find("bndbox")
xmax = int(bbox.find("xmax").text)
if xmax > width:
print(f"错误标注:{xml_path} 框超出图像边界")
第二步:模型训练技巧
关键配置参数(yolov5s.yaml):
augmentation:
hsv_h: 0.015 # 色相扰动
hsv_s: 0.7 # 饱和度增强
fliplr: 0.5 # 水平翻转
mosaic: 1.0 # 马赛克增强
启动训练时建议用渐进式图像尺寸:
python train.py --img 320 --epochs 50 # 初始阶段
python train.py --img 640 --epochs 30 # 微调阶段
第三步:模型瘦身部署
FP16量化示例(需TensorRT 8.0+):
import torch
from torch2trt import torch2trt
model = torch.load("yolov5s.pt")
x = torch.randn(1,3,640,640).cuda()
model_trt = torch2trt(
model, [x],
fp16_mode=True,
max_workspace_size=1<<25
)
第四步:异常处理机制
针对光照变化的三重保障:
- 在线白平衡校正(OpenCV CLAHE)
- 动态阈值NMS(遮挡时调低iou_thres)
- 多帧验证机制(连续3帧检测到才报警)
生产环境避坑指南
类别不平衡
# 在loss.py中修改分类损失
loss_fcn = FocalLoss(
alpha=[0.8, 0.2], # 正负样本权重
gamma=2.0, # 难易样本调节
reduction='mean'
)
版本控制策略
推荐目录结构:
models/
├── v1.0/ # 初始版本
│ ├── train_config.json
│ └── best.pt
└── v1.1/ # 优化版本
├── compare_report.pdf
└── quantized.onnx
内存泄漏排查
使用Jetson Nano时必备命令:
watch -n 1 "free -m && nvidia-smi | grep -A 1 Processes"
未完待续
当前系统在1000+样本时表现良好,但遇到新型缺陷仍需200+标注样本。大家有什么小样本学习方案的建议?欢迎在评论区分享你的实战经验!

更多推荐


所有评论(0)