焊缝缺陷视觉质检系统YOLOv8工业场景数据集与训练全栈实战 | 焊缝缺陷检测数据集焊缝质量直接关系工业结构安全传统人工目视检测效率低、漏检率高。本文基于6400张工业实拍图像构建了覆盖裂纹、气孔、焊渣、熔接线4类关键缺陷的焊缝检测数据集并提供从数据预处理、YOLOv8模型训练到推理部署的完整代码为智能制造领域提供高精度、可落地的视觉AI质检方案。 数据集核心指标与构成数据集信息表项目详情名称工业焊缝缺陷目标检测数据集图像总量6400张 (工业现场实拍)标注格式YOLO格式 (TXT) 每图对应同名标签文件目标类别4类 (裂纹、气孔、焊渣、熔接线)图像特点覆盖不同光照、角度、焊缝类型缺陷特征清晰数据划分推荐 训练集:验证集:测试集 8:1:1适配模型YOLOv5 / YOLOv8 / YOLOv11 全系列类别详情类别ID英文名称中文名称检测目标描述0Crack裂纹焊缝表面的裂纹、开裂缺陷1Porosity气孔焊缝内部/表面的气孔、空洞2Spatters焊渣/飞溅焊接飞溅物或表面焊渣3Welding_line熔接线/焊缝焊缝的熔合线或焊接轨迹标注格式示例 (YOLO TXT)# 每行: class_id x_center y_center width height (归一化) 0 0.4250 0.3180 0.2240 0.1960 # 裂纹 1 0.5100 0.4220 0.0810 0.0750 # 气孔️ 项目目录结构建议weld_defect_detection/ ├── dataset/ # 数据集 │ ├── images/ # 图像 (建议按8:1:1划分) │ │ ├── train/ (5120张) │ │ ├── val/ (640张) │ │ └── test/ (640张) │ ├── labels/ # YOLO格式TXT标注 │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ └── weld_defects.yaml # 数据集配置文件 ├── config/ │ └── data_augmentation.yaml # 数据增强配置 (可选) ├── scripts/ │ ├── dataset_split.py # 数据划分脚本 │ ├── train_yolov8.py # 训练脚本 │ ├── predict.py # 推理与可视化脚本 │ └── evaluate.py # 评估脚本 ├── models/ │ └── best_weld_detector.pt # 训练好的模型权重 ├── requirements.txt # 项目依赖 └── README.md 核心代码实现与场景注释1. 数据集配置文件dataset/weld_defects.yaml# 对应主题场景为YOLO模型指定训练和验证数据路径及焊缝缺陷类别train:./dataset/images/trainval:./dataset/images/valtest:./dataset/images/testnc:4# 类别数names:[Crack,Porosity,Spatters,Welding_line]# 类别名称2. 数据划分脚本 (按8:1:1)scripts/dataset_split.py# 对应主题场景将6400张图像随机划分为训练、验证、测试集importosimportrandomimportshutilfrompathlibimportPathdefsplit_dataset(src_images,src_labels,dst_dir,ratios(0.8,0.1,0.1)):按比例划分数据集image_files[fforfinos.listdir(src_images)iff.endswith((.jpg,.png,.jpeg))]random.shuffle(image_files)nlen(image_files)train_endint(ratios[0]*n)val_endint((ratios[0]ratios[1])*n)splits{train:image_files[:train_end],val:image_files[train_end:val_end],test:image_files[val_end:]}forsplit_name,filesinsplits.items():# 创建图像和标签目录img_dstos.path.join(dst_dir,images,split_name)lbl_dstos.path.join(dst_dir,labels,split_name)os.makedirs(img_dst,exist_okTrue)os.makedirs(lbl_dst,exist_okTrue)forimg_fileinfiles:# 复制图像src_imgos.path.join(src_images,img_file)shutil.copy(src_img,os.path.join(img_dst,img_file))# 复制对应的标签文件 (.txt)label_filePath(img_file).stem.txtsrc_lblos.path.join(src_labels,label_file)ifos.path.exists(src_lbl):shutil.copy(src_lbl,os.path.join(lbl_dst,label_file))print(f数据集划分完成: 训练集{len(splits[train])}张, f验证集{len(splits[val])}张, 测试集{len(splits[test])}张)if__name____main__:# 使用示例 (请替换为实际路径)split_dataset(src_imagesdata/raw/images,src_labelsdata/raw/labels,dst_dirdataset)3. YOLOv8模型训练脚本scripts/train_yolov8.py# 对应主题场景使用YOLOv8预训练模型在焊缝缺陷数据集上进行微调fromultralyticsimportYOLOdeftrain_weld_detector():# 加载YOLOv8s预训练模型 (轻量级适合工业场景)modelYOLO(yolov8s.pt)# 训练配置 (针对缺陷检测优化)resultsmodel.train(datadataset/weld_defects.yaml,epochs150,# 缺陷样本少适当增加轮次batch16,# 根据GPU显存调整imgsz640,# 标准输入尺寸optimizerAdamW,lr00.001,weight_decay0.0005,# 数据增强 (提升对光照、角度变化的鲁棒性)augmentTrue,hsv_h0.015,hsv_s0.7,hsv_v0.4,degrees10.0,translate0.1,scale0.5,fliplr0.5,mosaic1.0,# 对焊缝缺陷检测效果显著mixup0.1,# 正则化dropout0.1,label_smoothing0.05,cos_lrTrue,# 余弦退火学习率# 保存与日志projectruns/train,nameweld_defect_detector,saveTrue,save_period10,exist_okTrue,cacheTrue)returnmodelif__name____main__:train_weld_detector()4. 模型推理与可视化scripts/predict.py# 对应主题场景加载训练好的模型对焊缝图像进行缺陷检测并标注fromultralyticsimportYOLOimportcv2importnumpyasnpdefdetect_weld_defects(image_path,model_path,conf_thres0.25):检测单张图像中的焊缝缺陷并返回标注结果# 加载模型modelYOLO(model_path)# 执行推理resultsmodel(image_path,confconf_thres,iou0.45)# 读取图像用于绘制imgcv2.imread(image_path)# 定义颜色映射 (BGR)color_map{Crack:(0,0,255),# 红色Porosity:(0,255,0),# 绿色Spatters:(255,0,0),# 蓝色Welding_line:(0,255,255)# 黄色}detections[]forresultinresults:ifresult.boxesisNone:continueforboxinresult.boxes:x1,y1,x2,y2map(int,box.xyxy[0].tolist())conffloat(box.conf[0])cls_idint(box.cls[0])labelmodel.names[cls_id]# 绘制边界框和标签colorcolor_map.get(label,(0,255,0))cv2.rectangle(img,(x1,y1),(x2,y2),color,2)textf{label}{conf:.2f}cv2.putText(img,text,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,color,2)detections.append({class:label,confidence:conf,bbox:[x1,y1,x2,y2]})# 显示结果cv2.imshow(Weld Defect Detection,img)cv2.waitKey(0)cv2.destroyAllWindows()returndetectionsif__name____main__:detect_weld_defects(image_pathpath/to/weld_test.jpg,model_pathruns/train/weld_defect_detector/weights/best.pt)5. 模型评估scripts/evaluate.py# 对应主题场景在独立测试集上评估模型性能生成详细指标报告fromultralyticsimportYOLOdefevaluate_weld_model(model_path):modelYOLO(model_path)# 在测试集上评估metricsmodel.val(datadataset/weld_defects.yaml,splittest,batch16,imgsz640,save_jsonTrue,projectruns/val,nameweld_defect_eval)# 打印核心指标print(fmAP0.5:{metrics.box.map50:.4f})print(fmAP0.5:0.95:{metrics.box.map:.4f})print(fPrecision:{metrics.box.p:.4f})print(fRecall:{metrics.box.r:.4f})# 打印每类AP (用于分析弱势类别)print(\nPer-class AP0.5:)fori,nameinenumerate(model.names):print(f{name}:{metrics.box.ap[i]:.4f})returnmetricsif__name____main__:evaluate_weld_model(runs/train/weld_defect_detector/weights/best.pt) 模型优化与工业部署建议优化方向具体建议小目标缺陷 (气孔、细小裂纹)1. 训练时使用copy_paste增强并在data.yaml中设置mosaic1.0。2. 尝试更高输入分辨率 (如imgsz1280)。类别不平衡若某类缺陷样本极少可使用过采样或合成数据 (如CutMix)训练时设置label_smoothing缓解过拟合。推理速度工业生产线实时要求高可选用YOLOv8n/s轻量模型并导出为TensorRT (FP16) 格式。不同光照/焊缝类型增强训练数据多样性 (多角度、多光源)并在推理前对图像进行归一化或自适应直方图均衡 (CLAHE)。误检率高调整置信度阈值 (如conf0.4)优化NMS的IoU阈值收集误检样本进行难例挖掘。模型部署命令示例# 导出为TensorRT (需安装对应工具)python-cfrom ultralytics import YOLO; YOLO(best.pt).export(formatengine, halfTrue, dynamicTrue)# 使用导出的engine模型进行加速推理python-cfrom ultralytics import YOLO; YOLO(best.engine).predict(test.jpg, saveTrue) 项目价值与扩展方向核心创新点场景专用数据集6400张工业实拍焊缝图像覆盖4类核心缺陷为领域提供高质量数据基石。端到端训练方案提供从数据集划分、YOLOv8训练到推理部署的全流程标准化代码。工业级优化针对小目标、类别不平衡等问题提出具体优化策略易于落地。扩展方向多模态融合结合3D点云或热成像数据检测内部缺陷 (如未熔合)。缺陷严重程度分级在检测基础上根据尺寸、形态对缺陷进行等级评估。连续焊接监控部署至机器人焊接工位实现焊中实时质量反馈与自适应参数调整。生成式数据增强使用GAN或扩散模型生成更丰富的缺陷样本提升模型泛化性。️ 技术标签#工业质检#焊缝缺陷检测#裂纹识别#YOLOv8#目标检测#智能制造#PyTorch#机器视觉#深度学习#自动化检测