传送带视觉卫士:YOLOv8煤炭异物与破损检测系统全栈实战

📅 2026/7/14 3:07:52 👁️ 阅读次数 📝 编程学习
传送带视觉卫士:YOLOv8煤炭异物与破损检测系统全栈实战

⚙️ 传送带视觉卫士:YOLOv8煤炭异物与破损检测系统全栈实战|传送带异物检测数据集 煤炭传送带数据集 传送带煤炭异物数据集

煤炭传送带上的异物、堵塞、裂缝和孔洞是导致设备损坏和生产中断的主要隐患。本文基于2263张实地标注图像,构建了覆盖四类关键缺陷的检测数据集,并提供了从YOLOv8模型训练、评估到优化的完整PyTorch代码,为煤矿、港口等散料输送场景打造高精度、可部署的视觉AI解决方案。

📊 数据集核心指标与构成

类别 (Class)图片数量标注框数量类别说明
foreign(异物)14822455传送带上不应出现的杂物
block(堵塞/块状物)75110671可能引起阻塞的大块物料
crack(裂缝)329448传送带表面的裂纹损伤
hole(孔洞)112413传送带上的穿透性破损

数据集总览

  • 总图像数:2263张
  • 训练集:1810张 (占比约80%)
  • 验证集:453张 (占比约20%)
  • 格式:YOLO格式标注 (TXT),可直接用于训练
  • 特点:场景针对性强,但类别分布不均 (异物和堵塞样本较多),训练时需关注类别平衡。


🏗️ 项目目录结构建议

coal_belt_defect_detection/ ├── dataset/ # 数据集 │ ├── images/ │ │ ├── train/ (训练集图片 .jpg) │ │ └── val/ (验证集图片) │ └── labels/ │ ├── train/ (训练集YOLO标注 .txt) │ └── val/ (验证集YOLO标注) ├── config/ │ └── coal_belt_defects.yaml # 数据集配置文件 ├── scripts/ │ ├── train.py # 模型训练脚本 │ ├── evaluate.py # 模型评估脚本 │ ├── predict.py # 推理与可视化脚本 │ └── convert_format.py # 标注格式转换工具 (XML/JSON to YOLO) ├── models/ │ └── coal_belt_defects_model.pt # 训练好的模型权重 └── requirements.txt # 项目依赖

💻 核心代码实现与场景注释

1. 数据集配置文件config/coal_belt_defects.yaml
# 对应主题场景:为YOLOv8模型指定训练和验证数据路径及类别# 数据集路径 (建议使用绝对路径或相对于训练脚本的路径)train:./dataset/images/trainval:./dataset/images/val# 类别数量nc:4# 类别名称 (顺序需与标注文件中的class_id对应)names:['foreign','block','crack','hole']
2. YOLOv8 模型训练脚本scripts/train.py
# 对应主题场景:加载预训练模型,在煤炭传送带缺陷数据集上进行微调fromultralyticsimportYOLOimportosdeftrain_defect_detector():# 1. 加载预训练模型 (选择yolov8n/s/m/l/x不同大小,权衡速度与精度)model=YOLO('yolov8n.pt')# 使用COCO预训练权重# 2. 设置训练参数 (根据显存和需求调整)training_config={'data':'config/coal_belt_defects.yaml',# 数据集配置'epochs':100,# 训练轮次'imgsz':640,# 输入图像尺寸'batch':16,# 批量大小 (根据GPU显存调整)'name':'coal_belt_defects_exp',# 实验名称,结果保存在 runs/detect/ 下'patience':50,# 早停轮数 (验证集无提升则停止)'device':'cuda',# 使用GPU (若无则设为'cpu')'cache':False,# 是否缓存图像 (加速训练,但需内存)'project':'runs/train',# 结果保存根目录'exist_ok':True,# 允许覆盖同名实验'pretrained':True,# 使用预训练权重'optimizer':'auto',# 自动选择优化器'lr0':0.01,# 初始学习率'lrf':0.01,# 最终学习率因子'momentum':0.937,# SGD动量'weight_decay':0.0005,# 权重衰减'warmup_epochs':3,# 预热轮次'warmup_momentum':0.8,# 预热动量'warmup_bias_lr':0.1,# 预热偏置学习率'box':7.5,# 边界框损失权重'cls':0.5,# 分类损失权重'dfl':1.5,# 分布焦点损失权重'hsv_h':0.015,# 色调增强'hsv_s':0.7,# 饱和度增强'hsv_v':0.4,# 明度增强'degrees':0.0,# 旋转角度'translate':0.1,# 平移'scale':0.5,# 缩放'shear':0.0,# 剪切'perspective':0.0,# 透视'flipud':0.0,# 上下翻转'fliplr':0.5,# 左右翻转'mosaic':1.0,# Mosaic数据增强'mixup':0.0,# MixUp增强'copy_paste':0.0# Copy-Paste增强}# 3. 开始训练results=model.train(**training_config)# 4. 在验证集上评估最佳模型metrics=model.val()print(f"验证集指标: mAP50-95:{metrics.box.map}, mAP50:{metrics.box.map50}")# 5. 保存最终模型model.save('models/coal_belt_defects_model.pt')print("训练完成,模型已保存。")if__name__=='__main__':train_defect_detector()
3. 模型推理与可视化scripts/predict.py
# 对应主题场景:加载训练好的模型,对新传送带图像进行缺陷检测并可视化fromultralyticsimportYOLOimportcv2importnumpyasnpdefdetect_and_visualize(image_path,model_path='models/coal_belt_defects_model.pt'):"""对单张图像进行推理并绘制检测结果"""# 加载模型model=YOLO(model_path)# 执行推理 (返回Results列表)results=model(image_path,conf=0.25,iou=0.45)# 可调整置信度和IoU阈值# 读取图像用于绘制img=cv2.imread(image_path)# 获取检测结果 (假设只处理第一张图)forresultinresults:boxes=result.boxes# 包含检测框、置信度、类别ifboxesisNoneorlen(boxes)==0:print("未检测到任何缺陷。")continueforboxinboxes:# 获取坐标 (xyxy格式)、置信度、类别x1,y1,x2,y2=map(int,box.xyxy[0].tolist())conf=float(box.conf[0])cls_id=int(box.cls[0])label=model.names[cls_id]# 根据类别设置不同颜色color_map={'foreign':(0,0,255),'block':(255,0,0),'crack':(0,255,0),'hole':(0,255,255)}color=color_map.get(label,(0,255,0))# 绘制边界框和标签cv2.rectangle(img,(x1,y1),(x2,y2),color,2)text=f'{label}{conf:.2f}'cv2.putText(img,text,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.6,color,2)# 显示结果cv2.imshow('传送带缺陷检测结果',img)cv2.waitKey(0)cv2.destroyAllWindows()# 可选:保存结果图像cv2.imwrite('detection_result.jpg',img)if__name__=='__main__':detect_and_visualize('path/to/your/test_image.jpg')
4. 标注格式转换工具 (XML to YOLO)scripts/convert_format.py
# 对应主题场景:将PASCAL VOC格式的XML标注转换为YOLO格式TXT,便于模型训练importxml.etree.ElementTreeasETimportosdefconvert_xml_to_yolo(xml_file,output_dir,class_names):"""转换单个XML文件为YOLO格式的TXT文件"""try:tree=ET.parse(xml_file)root=tree.getroot()# 获取图像尺寸size=root.find('size')img_width=int(size.find('width').text)img_height=int(size.find('height').text)# 输出TXT文件路径txt_filename=os.path.basename(xml_file).replace('.xml','.txt')txt_path=os.path.join(output_dir,txt_filename)withopen(txt_path,'w')asout_file:forobjinroot.findall('object'):class_name=obj.find('name').textifclass_namenotinclass_names:print(f"警告: 类别 '{class_name}' 未在配置中定义,已跳过。")continueclass_id=class_names.index(class_name)# 获取边界框坐标 (VOC格式为左上角和右下角)bndbox=obj.find('bndbox')x_min=float(bndbox.find('xmin').text)y_min=float(bndbox.find('ymin').text)x_max=float(bndbox.find('xmax').text)y_max=float(bndbox.find('ymax').text)# 转换为YOLO归一化格式 (中心点x, 中心点y, 宽, 高)x_center=(x_min+x_max)/2.0/img_width y_center=(y_min+y_max)/2.0/img_height width=(x_max-x_min)/img_width height=(y_max-y_min)/img_height# 写入文件: class_id x_center y_center width heightout_file.write(f"{class_id}{x_center:.6f}{y_center:.6f}{width:.6f}{height:.6f}\n")print(f"成功转换:{xml_file}->{txt_path}")exceptExceptionase:print(f"转换失败{xml_file}:{e}")defbatch_convert(xml_dir,output_dir,class_names):"""批量转换目录下的所有XML文件"""os.makedirs(output_dir,exist_ok=True)forxml_fileinos.listdir(xml_dir):ifxml_file.endswith('.xml'):convert_xml_to_yolo(os.path.join(xml_dir,xml_file),output_dir,class_names)if__name__=='__main__':# 使用示例XML_DIR='path/to/your/xml_annotations'OUTPUT_DIR='path/to/your/yolo_labels'CLASS_NAMES=['foreign','block','crack','hole']# 必须与数据集配置一致batch_convert(XML_DIR,OUTPUT_DIR,CLASS_NAMES)

🔧 模型优化与调试建议

问题可能原因解决方案
类别不平衡block类标注框过多,hole类极少1. 对少样本类别进行过采样或数据增强 (旋转、缩放)。2. 使用class_weight参数调整损失权重。3. 使用Focal Loss等损失函数。
小目标检测差裂缝、孔洞在图像中占比小1. 提高输入图像尺寸 (如imgsz=1280)。2. 在数据集中增加局部放大图像。3. 调整锚框尺寸。
过拟合训练集指标好,验证集指标差1. 增加数据增强 (如MixUp、Mosaic)。2. 增加patience早停轮数。3. 减小模型复杂度 (如使用yolov8n)。
推理速度慢模型过大或硬件性能不足1. 使用更小的模型变体 (yolov8n/s)。2. 将模型导出为TensorRT或ONNX格式加速。3. 使用GPU推理。

🔮 项目价值与扩展方向

核心创新点

  • 场景专用数据集:首个公开的煤炭传送带四类关键缺陷检测数据集,覆盖异物、堵塞、裂缝、孔洞。
  • 端到端训练方案:提供从数据格式转换、模型训练到推理可视化的全流程YOLOv8代码。
  • 实用性强:直接应用于煤矿、电厂、港口等散料输送系统的无人巡检。

扩展方向

  1. 多类别细分:将“异物”细分为金属、木块、塑料等,便于后续分拣。
  2. 缺陷严重程度评估:在检测基础上,根据裂缝长度、孔洞面积划分严重等级。
  3. 时序分析与预测:结合历史检测数据,预测传送带剩余寿命,实现预测性维护。
  4. 多光谱融合:结合红外或深度相机,提升在粉尘、低光照环境下的检测鲁棒性。

🏷️ 技术标签

#煤炭传送带#缺陷检测#异物识别#YOLOv8#目标检测#PyTorch#工业安全#预测性维护#计算机视觉#深度学习