YOLOv5/v8 在矿山皮带检测中的部署流程基本一致,主要包括以下六个阶段:
环境准备:配置训练与部署环境。
数据处理:采集、标注并划分皮带图像数据集。
模型训练:使用YOLOv5/v8训练定制模型。
评估优化:在验证集上评估并优化模型。
模型导出:将模型转换为适合部署的格式。
应用部署:集成到矿山现场系统,实现实时检测与告警。
1. ⚙️ 环境准备
训练环境 (GPU服务器/工作站)
硬件:带NVIDIA GPU的服务器,用于模型训练。
软件:
YOLOv5: Python 3.8+, PyTorch, CUDA, cuDNN。通过官方仓库安装依赖。
bash
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
YOLOv8: 通过
ultralytics包安装,更为便捷。bash
pip install ultralytics
部署环境 (现场服务器/边缘设备)
硬件:工控机、AI边缘计算盒或NVIDIA Jetson等。
软件:根据部署形式选择,如ONNX Runtime、TensorRT、OpenVINO或直接安装
ultralytics库。
2. 📊 数据处理
数据采集
在皮带机头、机尾、转载点等关键位置安装工业相机,覆盖正常、跑偏、撕裂、有异物、粉尘大等多种工况。视频帧率建议不低于25fps,分辨率不低于1080p。
数据标注
工具:LabelImg (YOLO格式) 或 Labelme (JSON格式)。
标注类别:根据需求定义,如
belt,foreign_object(异物),tear,misalignment,smoke等。关键:确保标注覆盖各种光照、粉尘、遮挡和模糊情况。
数据集组织与划分
推荐目录结构如下,并按比例(如8:1:1)划分训练、验证和测试集。
text
dataset/
├── images
│ ├── train/
│ ├── val/
│ └── test/
└── labels
├── train/
├── val/
└── test/
创建data/belt.yaml配置文件,指定数据集路径和类别名:
yaml
train: ../dataset/images/train
val: ../dataset/images/val
nc: 3 # 类别数
names: ['belt', 'foreign_object', 'tear']
3. 🧠 模型训练
YOLOv5 训练
使用预训练权重(如yolov5s.pt)进行迁移学习,以加快收敛。
bash
python train.py \
--img 640 \
--batch 16 \
--epochs 100 \
--data data/belt.yaml \
--weights yolov5s.pt \
--project runs/train --name belt_exp
YOLOv8 训练
使用ultralytics命令行工具,用法更简洁。
bash
yolo task=detect mode=train \
model=yolov8s.pt \
data=data/belt.yaml \
epochs=100 \
imgsz=640
训练完成后,最佳模型权重通常保存在runs/train/belt_exp/weights/best.pt或runs/detect/train/weights/best.pt路径下。
4. 📈 评估与优化
使用验证集评估模型性能,关注mAP@0.5、精确率、召回率等指标。
YOLOv5:
python val.py --weights best.pt --data data/belt.yaml --img 640YOLOv8:
yolo task=detect mode=val model=best.pt data=data/belt.yaml
根据评估结果进行优化:
效果不佳:增加数据增强(如Mosaic)、调整学习率、或更换更复杂的模型(如从
s升级到m/l)。过拟合:增加数据量、使用正则化、或提前停止训练(Early Stopping)。
5. 📦 模型导出
为适配不同部署环境,将训练好的.pt模型导出为中间格式。
YOLOv5 导出:
bash
python export.py --weights best.pt --include onnx,torchscript,tflite,engine --simplify
YOLOv8 导出:
bash
yolo task=detect mode=export model=best.pt format=onnx opset=12
常见导出格式对比
格式 | 适用平台 | 特点 |
|---|---|---|
ONNX | 跨平台 (CPU/GPU) | 通用性强,是转换到其他格式的中间件。 |
TorchScript | PyTorch 环境 | 便于C++部署,依赖PyTorch库。 |
TensorRT | NVIDIA GPU | 性能最优,延迟最低,需转换和校准。 |
TFLite | 移动端/嵌入式 | 专为移动和嵌入式设备优化。 |
6. 🚀 应用部署
方案A:本地/边缘实时检测程序
适用于工控机或边缘计算盒,直接处理摄像头视频流。
YOLOv5: 使用
detect.py脚本或将其封装为类。YOLOv8: 使用
YOLO('best.pt').predict(source=0, stream=True)进行实时推理。核心逻辑:读取视频 -> 预处理 -> 模型推理 -> 后处理(NMS)-> 绘制结果 -> 告警判断 -> 输出(画面/日志/信号)。
方案B:封装为HTTP服务 (API)
适用于需要中心化管理和多系统调用的场景。
框架:使用Flask/FastAPI等创建Web服务。
流程:接收图片 -> 调用模型推理 -> 将结果(类别、坐标、置信度)封装为JSON返回。
调用示例 (YOLOv8):
python
from flask import Flask, request, jsonify
from ultralytics import YOLO
app = Flask(name)
model = YOLO('best.pt')
@app.route('/detect', methods=['POST'])
def detect():
file = request.files['file']
img = Image.open(file.stream)
results = model(img)
return jsonify(results[0].tojson())
方案C:集成QT/Web可视化界面
适用于需要本地操作人员进行监控的场景。
实现:使用PyQt5/PySide2 (桌面端) 或 Vue/React (Web端) 构建界面。
功能:提供实时画面显示、告警列表、历史查询、参数配置等。界面通过调用本地API或直接加载模型与检测程序进行交互。
方案D:联动PLC/集控系统
实现从“看到”到“停机”的闭环控制。
接口:通过OPC、Modbus TCP或Socket等方式与PLC通信。
逻辑:当检测到严重故障(如撕裂、大块异物)时,向PLC发送停机或降速指令,并触发声光报警器。