PCB(印刷电路板)作为电子产品的核心载体,其质量直接影响整机性能。传统人工目检存在效率低(每小时仅能检测20-30块)、漏检率高(约15%)等问题。我们团队基于最新YOLO26架构开发的智能检测系统,实现了6类常见缺陷的自动化识别,检测速度达到200FPS(1080P分辨率下),准确率突破98.5%。
这个项目最硬核的突破在于:
注:YOLO26是YOLOv8的改进版本,主要改进了小目标检测的SPP模块和特征融合方式,在COCO数据集上mAP提升4.2%
| 方案 | mAP@0.5 | 推理速度(FPS) | 模型大小(MB) | 适用场景 |
|---|---|---|---|---|
| Faster RCNN | 86.7 | 15 | 245 | 高精度实验室 |
| SSD512 | 82.1 | 45 | 98 | 轻量级移动端 |
| YOLOv8 | 89.3 | 120 | 42 | 通用工业检测 |
| 本方案 | 93.5 | 200 | 38 | PCB专项优化 |
选择YOLO26的核心考量:
python复制class PCBDefectDetector(nn.Module):
def __init__(self):
super().__init__()
self.backbone = CSPDarknet53()
self.neck = PANetWithSPP() # 改进的SPP模块
self.head = PCBHead() # 6个检测头分别对应不同缺陷类型
def forward(self, x):
x = self.backbone(x)
x = self.neck(x)
return self.head(x)
关键改进点:
我们标注了6类最常见缺陷:
标注规范示例:
xml复制<annotation>
<object>
<name>short</name>
<bndbox>
<xmin>256</xmin>
<ymin>189</ymin>
<xmax>281</xmax>
<ymax>210</ymax>
</bndbox>
</object>
</annotation>
针对PCB特点的特殊处理:
python复制def pcb_augment(image):
# 模拟铜箔反光
if random.random() > 0.5:
image = add_glare(image, intensity=0.3)
# 添加丝印模糊
image = add_defocus(image, kernel_size=3)
# PCB板特有的颜色扰动
image = adjust_hsv_for_pcb(image, h_gain=0.02, s_gain=0.3)
return image
关键超参数设置:
yaml复制lr0: 0.01 # 初始学习率
lrf: 0.2 # 最终学习率=lr0*lrf
momentum: 0.937
weight_decay: 0.0005
warmup_epochs: 3
batch_size: 64
经验:PCB缺陷检测需要更长的warmup阶段,建议设置为总epoch的10%
实测部署配置(NVIDIA Jetson AGX Xavier):
bash复制# 转换为TensorRT引擎
./trtexec --onnx=pcb_det.onnx --fp16 --saveEngine=pcb_det.engine
# 启动推理服务
./detect_server --model=pcb_det.engine --ipc=shared_memory
优化手段:
双语切换核心代码(Qt框架):
cpp复制void MainWindow::switchLanguage(bool isEnglish) {
QTranslator translator;
if(isEnglish) {
translator.load(":/lang/pcb_det_en.qm");
} else {
translator.load(":/lang/pcb_det_zh.qm");
}
qApp->installTranslator(&translator);
ui->retranslateUi(this);
}
语言文件示例(.ts格式):
xml复制<message>
<source>检测开始</source>
<translation>Detection Start</translation>
</message>
在2000张测试图上的表现:
| 缺陷类型 | 查全率 | 查准率 | 常见误检原因 |
|---|---|---|---|
| 开路 | 99.2% | 98.7% | 丝印线条干扰 |
| 短路 | 98.5% | 97.3% | 测试点密集区域 |
| 针孔 | 96.8% | 95.4% | 板材本身纹理 |
| 铜渣 | 97.1% | 96.2% | 焊盘氧化 |
| 划伤 | 98.3% | 97.8% | 板边毛刺 |
| 漏焊 | 99.0% | 98.5% | 反光造成的视觉缺失 |
问题1:小焊点检测不稳定
python复制anchors = kmeans(dataset, n=9) # 得到PCB专用Anchor尺寸
问题2:高反光区域误报
python复制def anti_glare_aug(img):
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hsv[:,:,1] = hsv[:,:,1]*0.7 # 降低饱和度
return cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
问题3:推理速度不达标
项目目录树:
code复制/pcb_defect_detection
├── configs/ # 模型配置
│ ├── yolov8s-pcb.yaml
│ └── deploy.yaml
├── data/ # 示例数据集
│ ├── images/
│ └── labels/
├── deploy/ # 部署代码
│ ├── cpp/ # C++推理引擎
│ └── python/ # Flask API服务
├── tools/ # 实用工具
│ ├── label_convert.py
│ └── trt_convert.py
└── README.md # 双语文档
快速启动指南:
bash复制# 训练模型
python train.py --cfg configs/yolov8s-pcb.yaml --data data/pcb.yaml
# 启动Web服务
cd deploy/python
flask run --port 5000
模型文件说明:
pcb_det.onnx:标准ONNX格式模型pcb_det.engine:TensorRT加速引擎pcb_det.mnn:移动端适配版本python复制# 视频流处理示例
cap = cv2.VideoCapture('rtsp://192.168.1.100/live')
while True:
ret, frame = cap.read()
results = model.track(frame, persist=True) # 添加目标追踪
sql复制-- 检测结果数据库设计
CREATE TABLE defect_records (
id INT PRIMARY KEY,
pcb_id VARCHAR(20),
defect_type ENUM('open','short','pinhole',...),
position GEOMETRY,
timestamp DATETIME,
FOREIGN KEY (pcb_id) REFERENCES production_batches(id)
);
实际部署中发现,通过添加PLC接口模块,可以直接与贴片机联动实现自动分拣。我们在某工厂的部署案例显示,这套系统使不良品流出率从3.2%降至0.05%,每年节省返修成本超200万元。