YOLO模型如何訓練x光PCB板缺陷檢測數(shù)據(jù)集)
X光PCB缺陷檢測全套項目文檔YOLOv11n PyQt5可視化界面一、數(shù)據(jù)集完整參數(shù)統(tǒng)計表項目參數(shù)詳細信息數(shù)據(jù)集名稱X光PCB電路板缺陷檢測數(shù)據(jù)集總圖像數(shù)量5955張單圖尺寸640×640數(shù)據(jù)劃分訓練集4170張驗證集1192張測試集593張標注格式Y(jié)OLO(txt)、VOC(xml)、COCO(json) 三格式全覆蓋缺陷總類別7類PCB工藝/元器件缺陷7類缺陷樣本標注數(shù)量明細類別序號英文類別名中文名稱含該缺陷圖片數(shù)缺陷標注框總數(shù)0Damaged components元器件損壞406884641Pin short circuit引腳短路288460352Miscellaneous tin雜錫2492633Missing components元器件缺失5284358644Chip scratches芯片劃痕304146335Substrate scratches基板劃痕368068226Solder joint burrs焊點毛刺251258數(shù)據(jù)集特點樣本不均衡元器件缺失樣本最多雜錫、焊點毛刺屬于小樣本缺陷X光透視成像可檢測電路板內(nèi)部隱藏缺陷肉眼可見光無法識別三種標注格式可自由轉(zhuǎn)換適配各類檢測框架圖像統(tǒng)一裁剪640×640無需預處理縮放直接適配YOLO輸入尺寸。二、運行環(huán)境配置環(huán)境版本清單Python3.8深度學習框架torch、torchvision圖像處理opencv-pythonUI界面PyQt5檢測框架ultralytics(YOLOv11)系統(tǒng)兼容Windows / Linux 雙系統(tǒng)通用一鍵安裝依賴命令pipinstalltorch1.11.0torchvision0.12.0 ultralytics opencv-python PyQt5 numpy pillow三、項目文件整體目錄結(jié)構(gòu)PCB_Xray_Detect/ ├── dataset/ # 完整數(shù)據(jù)集 │ ├── images/ │ │ ├── train/ # 訓練圖片 │ │ ├── val/ # 驗證圖片 │ │ └── test/ # 測試圖片 │ ├── labels/ │ │ ├── train/ # YOLO txt標注 │ │ ├── val/ │ │ └── test/ │ ├── voc_annotations/ # VOC xml標注文件 │ ├── coco_annotations/ # COCO json標注文件 │ └── pcb_defect.yaml # YOLO數(shù)據(jù)集配置文件 ├── weights/ │ └── best.pt # 訓練80輪后最優(yōu)權(quán)重 ├── train.py # 模型訓練源碼 ├── test_eval.py # 模型測試精度評估源碼 ├── ui/ │ ├── main.ui # Qt界面設計文件 │ ├── resource.qrc # 圖標資源文件 │ ├── resource_rc.py # qrc編譯后的python資源文件 │ └── icons/ # 界面圖標素材 ├── pcb_gui.py # PyQt5主界面運行源碼 └── 使用說明文檔.md四、數(shù)據(jù)集yaml配置文件pcb_defect.yamlpath:./datasettrain:images/trainval:images/valtest:images/testnc:7names:0:Damaged components1:Pin short circuit2:Miscellaneous tin3:Missing components4:Chip scratches5:Substrate scratches6:Solder joint burrs五、訓練代碼 train.pyfromultralyticsimportYOLO# 加載YOLOv11n輕量化網(wǎng)絡modelYOLO(yolov11n.yaml)# 訓練參數(shù)設置train_resultmodel.train(data./dataset/pcb_defect.yaml,epochs80,imgsz640,batch16,device0,# 有GPU填0無GPU改為cpuworkers4,patience12,iou0.45,conf0.25,mosaic0.8,mixup0.1,saveTrue,projectPCB_Xray_Result,nameyolov11n_80epoch)print(訓練結(jié)束最優(yōu)權(quán)重保存在 runs/PCB_Xray_Result/yolov11n_80epoch/weights/best.pt)六、測試評估代碼 test_eval.pyfromultralyticsimportYOLO# 載入訓練完成的最優(yōu)權(quán)重modelYOLO(./weights/best.pt)# 驗證集精度計算metricsmodel.val(data./dataset/pcb_defect.yaml,imgsz640,conf0.25,iou0.45)# 打印核心精度指標print(fmAP0.5:{metrics.box.map50:.4f})print(fPrecision:{metrics.box.p:.4f})print(fRecall:{metrics.box.r:.4f})# 單張圖片測試推理model.predict(source./dataset/images/test,saveTrue,save_txtTrue,save_confTrue)print(測試圖片推理完成結(jié)果已保存)七、PyQt5可視化界面全套源碼1、資源文件編譯說明resource.qrc 存放圖標使用命令編譯pyrcc5 resource.qrc-oresource_rc.py2、主界面運行代碼 pcb_gui.pyimportsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QFileDialog,QMessageBox)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerfromultralyticsimportYOLOfromuiimportUi_MainWindowimportresource_rcclassPCB_Detect_Window(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)# 加載訓練好的PCB缺陷模型self.modelYOLO(./weights/best.pt)self.capNoneself.timerQTimer()self.timer.timeout.connect(self.camera_frame)self.save_result_list[]# 按鈕綁定事件self.btn_img.clicked.connect(self.image_detect)self.btn_video.clicked.connect(self.video_detect)self.btn_camera.clicked.connect(self.camera_open)self.btn_save.clicked.connect(self.save_all_result)self.btn_exit.clicked.connect(self.close)# 圖片檢測defimage_detect(self):file_path,_QFileDialog.getOpenFileName(self,選擇X光PCB圖片,,圖片文件(*.jpg *.png *.jpeg))ifnotfile_path:returnresultsself.model(file_path,conf0.3)self.show_result(results[0])# 視頻檢測defvideo_detect(self):video_path,_QFileDialog.getOpenFileName(self,選擇視頻文件,,視頻(*.mp4 *.avi))ifnotvideo_path:returnself.capcv2.VideoCapture(video_path)self.timer.start(30)# 攝像頭實時檢測defcamera_open(self):ifself.timer.isActive():self.timer.stop()self.cap.release()returnself.capcv2.VideoCapture(0)self.timer.start(30)# 讀取畫面幀推理defcamera_frame(self):ret,frameself.cap.read()ifnotret:self.timer.stop()returnresultsself.model(frame,conf0.3)self.show_result(results[0])# 渲染檢測畫面數(shù)據(jù)展示defshow_result(self,res):imgres.plot()h,w,cimg.shape bytes_per_linec*w q_imgQImage(img.data,w,h,bytes_per_line,QImage.Format_RGB888).rgbSwapped()self.label_display.setPixmap(QPixmap.fromImage(q_img).scaled(self.label_display.size(),Qt.KeepAspectRatio))# 統(tǒng)計缺陷總數(shù)、坐標、置信度boxesres.boxes total_numlen(boxes)self.label_total.setText(f缺陷總數(shù)量{total_num})self.table_result.setRowCount(total_num)self.save_result_list.clear()foridx,boxinenumerate(boxes):cls_idxint(box.cls)cls_nameself.model.names[cls_idx]conffloat(box.conf)x1,y1,x2,y2map(int,box.xyxy[0])self.save_result_list.append([cls_name,round(conf,3),x1,y1,x2,y2])self.table_result.setItem(idx,0,QtWidgets.QTableWidgetItem(str(idx1)))self.table_result.setItem(idx,1,QtWidgets.QTableWidgetItem(cls_name))self.table_result.setItem(idx,2,QtWidgets.QTableWidgetItem(f{conf:.2f}))self.table_result.setItem(idx,3,QtWidgets.QTableWidgetItem(f({x1},{y1})-({x2},{y2})))# 導出檢測結(jié)果defsave_all_result(self):iflen(self.save_result_list)0:QMessageBox.information(self,提示,暫無檢測數(shù)據(jù))returnsave_path,_QFileDialog.getSaveFileName(self,保存檢測報告,pcb缺陷檢測結(jié)果.txt,txt文件(*.txt))withopen(save_path,w,encodingutf-8)asf:f.write(序號\t缺陷類型\t置信度\t坐標x1,y1,x2,y2\n)forlineinself.save_result_list:f.write(f{line[0]}\t{line[1]}\t{line[2]},{line[3]},{line[4]},{line[5]}\n)QMessageBox.information(self,完成,檢測結(jié)果保存成功)if__name____main__:appQApplication(sys.argv)windowPCB_Detect_Window()window.show()sys.exit(app.exec_())八、UI界面功能詳情核心功能圖片檢測本地單張X光PCB圖片導入推理繪制缺陷框視頻檢測PCB巡檢視頻逐幀識別缺陷攝像頭實時檢測外接工業(yè)相機在線實時X光PCB檢測數(shù)據(jù)實時展示缺陷總數(shù)量每類缺陷置信度缺陷框像素坐標(xmin,ymin,xmax,ymax)結(jié)果導出txt文檔批量保存全部檢測記錄啟停切換一鍵關(guān)閉攝像頭/視頻流九、運行操作步驟Windows系統(tǒng)安裝Python3.8配置環(huán)境變量執(zhí)行依賴安裝命令解壓完整項目文件夾確保路徑無中文運行訓練python train.py80輪訓練完成后自動生成best.pt權(quán)重啟動可視化界面python pcb_gui.py選擇圖片/視頻/攝像頭進行缺陷檢測可導出檢測報表Linux系統(tǒng)搭建python3.8虛擬環(huán)境pip安裝依賴包賦予文件執(zhí)行權(quán)限訓練、界面啟動命令和Windows一致十、補充說明針對雜錫、焊點毛刺小樣本缺陷可通過復制增強、自適應縮放提升召回率模型推理速度快適配工業(yè)PCB產(chǎn)線在線質(zhì)檢場景界面無需輸入命令行純鼠標可視化操作訓練完成后可導出ONNX模型部署嵌入式工業(yè)設備。