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

传送带视觉卫士: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不同大小权衡速度与精度)modelYOLO(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. 开始训练resultsmodel.train(**training_config)# 4. 在验证集上评估最佳模型metricsmodel.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_pathmodels/coal_belt_defects_model.pt):对单张图像进行推理并绘制检测结果# 加载模型modelYOLO(model_path)# 执行推理 (返回Results列表)resultsmodel(image_path,conf0.25,iou0.45)# 可调整置信度和IoU阈值# 读取图像用于绘制imgcv2.imread(image_path)# 获取检测结果 (假设只处理第一张图)forresultinresults:boxesresult.boxes# 包含检测框、置信度、类别ifboxesisNoneorlen(boxes)0:print(未检测到任何缺陷。)continueforboxinboxes:# 获取坐标 (xyxy格式)、置信度、类别x1,y1,x2,y2map(int,box.xyxy[0].tolist())conffloat(box.conf[0])cls_idint(box.cls[0])labelmodel.names[cls_id]# 根据类别设置不同颜色color_map{foreign:(0,0,255),block:(255,0,0),crack:(0,255,0),hole:(0,255,255)}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.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:treeET.parse(xml_file)roottree.getroot()# 获取图像尺寸sizeroot.find(size)img_widthint(size.find(width).text)img_heightint(size.find(height).text)# 输出TXT文件路径txt_filenameos.path.basename(xml_file).replace(.xml,.txt)txt_pathos.path.join(output_dir,txt_filename)withopen(txt_path,w)asout_file:forobjinroot.findall(object):class_nameobj.find(name).textifclass_namenotinclass_names:print(f警告: 类别 {class_name} 未在配置中定义已跳过。)continueclass_idclass_names.index(class_name)# 获取边界框坐标 (VOC格式为左上角和右下角)bndboxobj.find(bndbox)x_minfloat(bndbox.find(xmin).text)y_minfloat(bndbox.find(ymin).text)x_maxfloat(bndbox.find(xmax).text)y_maxfloat(bndbox.find(ymax).text)# 转换为YOLO归一化格式 (中心点x, 中心点y, 宽, 高)x_center(x_minx_max)/2.0/img_width y_center(y_miny_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_okTrue)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_DIRpath/to/your/xml_annotationsOUTPUT_DIRpath/to/your/yolo_labelsCLASS_NAMES[foreign,block,crack,hole]# 必须与数据集配置一致batch_convert(XML_DIR,OUTPUT_DIR,CLASS_NAMES) 模型优化与调试建议问题可能原因解决方案类别不平衡block类标注框过多hole类极少1. 对少样本类别进行过采样或数据增强 (旋转、缩放)。2. 使用class_weight参数调整损失权重。3. 使用Focal Loss等损失函数。小目标检测差裂缝、孔洞在图像中占比小1. 提高输入图像尺寸 (如imgsz1280)。2. 在数据集中增加局部放大图像。3. 调整锚框尺寸。过拟合训练集指标好验证集指标差1. 增加数据增强 (如MixUp、Mosaic)。2. 增加patience早停轮数。3. 减小模型复杂度 (如使用yolov8n)。推理速度慢模型过大或硬件性能不足1. 使用更小的模型变体 (yolov8n/s)。2. 将模型导出为TensorRT或ONNX格式加速。3. 使用GPU推理。 项目价值与扩展方向核心创新点场景专用数据集首个公开的煤炭传送带四类关键缺陷检测数据集覆盖异物、堵塞、裂缝、孔洞。端到端训练方案提供从数据格式转换、模型训练到推理可视化的全流程YOLOv8代码。实用性强直接应用于煤矿、电厂、港口等散料输送系统的无人巡检。扩展方向多类别细分将“异物”细分为金属、木块、塑料等便于后续分拣。缺陷严重程度评估在检测基础上根据裂缝长度、孔洞面积划分严重等级。时序分析与预测结合历史检测数据预测传送带剩余寿命实现预测性维护。多光谱融合结合红外或深度相机提升在粉尘、低光照环境下的检测鲁棒性。️ 技术标签#煤炭传送带#缺陷检测#异物识别#YOLOv8#目标检测#PyTorch#工业安全#预测性维护#计算机视觉#深度学习