深度学习目标检测算法如何训练 焊接缺陷检测数据集 飞溅 重叠 焊接线 孔隙 缺口 裂纹 坑洞 穿透 过填等检测识别
2026/9/1 2:21:14 网站建设 项目流程

焊接缺陷检测数据集),8876张(存在数据增强处理),yolo和voc两种标注方式

10类,标注数量:
Overlap: 173 — 重叠
Spatter: 2491 — 飞溅
Welding_line: 10738 — 焊接线
Porosity: 4023 — 孔隙
Undercut: 319 — 缺口
Crack: 1434 — 裂纹
Overfill: 494 — 过填
Weld Bead Irregularity: 433 — 焊缝不规则
Burn-through: 449 — 穿透
Crater: 449 — 坑洞
Image num: 8876

焊接缺陷检测 YOLOv11

一、数据集基础信息汇总

焊接缺陷检测数据集

  • 总图片数量:8876张(已做数据增强)
  • 标注格式:YOLO‑txt、VOC‑xml双格式
  • 缺陷类别:10类
序号类别名称中文释义标注框数量
0Overlap重叠173
1Spatter飞溅2491
2Welding_line焊接线10738
3Porosity孔隙4023
4Undercut缺口(咬边)319
5Crack裂纹1434
6Overfill过填(余高)494
7Weld Bead Irregularity焊缝不规则433
8Burn‑through烧穿/穿透449
9Crater弧坑/坑洞449

⚠️ 类别样本不均衡提醒:Overlap、Undercut标注数量很少,属于小样本缺陷,训练时建议开启损失权重、马赛克增强、复制粘贴增强改善效果。


二、数据集划分建议

总样本:8876 训练集(train):7101张 80% 验证集(val):888张 10% 测试集(test):887张 10%

三、YOLO配置文件 weld_defect.yaml

path:./datasets/weld_defecttrain:images/trainval:images/valtest:images/testnames:0:Overlap1:Spatter2:Welding_line3:Porosity4:Undercut5:Crack6:Overfill7:Weld_Bead_Irregularity8:Burn-through9:Crater

四、训练脚本 train_weld.py(YOLOv11)

fromultralyticsimportYOLO# 加载YOLOv11模型,可选 n/s/m/l/xmodel=YOLO("yolo11s.pt")results=model.train(data="weld_defect.yaml",epochs=100,imgsz=640,batch=12,device=0,workers=4,patience=15,mosaic=1.0,mixup=0.1,copy_paste=0.2,# 小样本缺陷增强,缓解类别不均衡project="runs/train",name="weld_defect_yolo11")

五、验证&测试脚本 val_weld.py

fromultralyticsimportYOLO model=YOLO("./runs/train/weld_defect_yolo11/weights/best.pt")# 在测试集上评估metrics=model.val(split="test")print(f"mAP@0.5:{metrics.box.map50:.3f}")print(f"mAP@0.5:0.95:{metrics.box.map:.3f}")

六、预测推理脚本 predict_weld.py

fromultralyticsimportYOLO model=YOLO("./runs/train/weld_defect_yolo11/weights/best.pt")#图片检测res=model.predict(source="weld_test.jpg",save=True,conf=0.4)#视频检测#res = model.predict(source="weld_video.mp4",save=True,conf=0.4)#摄像头实时检测#res = model.predict(source=0,save=True,conf=0.4)

七、PyQt5 焊接缺陷可视化检测界面完整源码

weld_gui.py

importsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QPushButton,QLabel,QFileDialog,QTextEdit)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromultralyticsimportYOLO model=YOLO("./runs/train/weld_defect_yolo11/weights/best.pt")classDetThread(QThread):send_img=pyqtSignal(object)send_result=pyqtSignal(list)def__init__(self,source):super().__init__()self.source=source self.run_flag=Truedefrun(self):cap=cv2.VideoCapture(self.source)whileself.run_flag:ret,frame=cap.read()ifnotret:breakres=model(frame,conf=0.4)boxes=res[0].boxes det_info=[]forboxinboxes:x1,y1,x2,y2=map(int,box.xyxy[0])conf=float(box.conf[0])cls=int(box.cls[0])det_info.append([x1,y1,x2,y2,conf,cls])cv2.rectangle(frame,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(frame,f"{model.names[cls]}{conf:.2f}",(x1,y1-8),cv2.FONT_HERSHEY_SIMPLEX,0.45,(0,255,0),1)self.send_img.emit(frame)self.send_result.emit(det_info)cap.release()classWeldDetWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv11焊接缺陷检测系统")self.resize(1250,820)self.init_ui()self.det_thread=Nonedefinit_ui(self):self.img_label=QLabel(self)self.img_label.setGeometry(20,60,780,650)self.img_label.setStyleSheet("border:1px solid #777;")self.btn_img=QPushButton("图片缺陷检测",self)self.btn_img.setGeometry(840,60,200,40)self.btn_img.clicked.connect(self.detect_image)self.btn_video=QPushButton("视频缺陷检测",self)self.btn_video.setGeometry(840,120,200,40)self.btn_video.clicked.connect(self.detect_video)self.btn_cam=QPushButton("摄像头实时检测",self)self.btn_cam.setGeometry(840,180,200,40)self.btn_cam.clicked.connect(self.detect_camera)self.result_text=QTextEdit(self)self.result_text.setGeometry(840,250,340,450)self.result_text.setPlaceholderText("缺陷检测结果、坐标、置信度信息")defshow_frame(self,frame):rgb=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,w,ch=rgb.shape bytes_per_line=ch*w q_img=QImage(rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(q_img).scaled(self.img_label.size(),Qt.KeepAspectRatio))defshow_result(self,det_list):self.result_text.clear()total=len(det_list)self.result_text.append(f"检测缺陷总数:{total}\n")foridx,iteminenumerate(det_list):x1,y1,x2,y2,conf,cls=item cls_name=model.names[cls]self.result_text.append(f"[{idx+1}]缺陷:{cls_name}\n置信度:{conf:.2f}\n"f"位置:xmin={x1},ymin={y1},xmax={x2},ymax={y2}\n")defdetect_image(self):path,_=QFileDialog.getOpenFileName(self,"打开焊接图像","","Image(*.jpg *.png *.jpeg)")ifnotpath:returnframe=cv2.imread(path)res=model(frame,conf=0.4)boxes=res[0].boxes info=[]forboxinboxes:x1,y1,x2,y2=map(int,box.xyxy[0])conf=float(box.conf[0])cls=int(box.cls[0])info.append([x1,y1,x2,y2,conf,cls])cv2.rectangle(frame,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(frame,f"{model.names[cls]}{conf:.2f}",(x1,y1-8),cv2.FONT_HERSHEY_SIMPLEX,0.45,(0,255,0),1)self.show_frame(frame)self.show_result(info)defdetect_video(self):path,_=QFileDialog.getOpenFileName(self,"打开焊接视频","","Video(*.mp4 *.avi)")ifnotpath:returnself.det_thread=DetThread(path)self.det_thread.send_img.connect(self.show_frame)self.det_thread.send_result.connect(self.show_result)self.det_thread.start()defdetect_camera(self):self.det_thread=DetThread(0)self.det_thread.send_img.connect(self.show_frame)self.det_thread.send_result.connect(self.show_result)self.det_thread.start()if__name__=="__main__":app=QApplication(sys.argv)win=WeldDetWindow()win.show()sys.exit(app.exec_())

环境依赖

pipinstallultralytics opencv-python pyqt5

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询