使用YOLOv8创建一个铁路轨道缺陷检测系统 从训练铁轨轨道缺陷检测数据集,数据集准备、模型训练、评估、结果可视化以及简易用户界面开发
文章目录
- 1. 环境设置
- 2. 数据预处理
- 3. 模型定义与训练
- 4. 评估
- 5. 结果分析与可视化
- 6. 用户界面开发(Flask应用)
- Flask 应用代码
- `index.html` 示例
- `result.html` 示例
铁轨轨道缺陷检测数据集
4分类, Spalling --脱落
Wheel Burn --轮烧
Squat --压陷
Corrugation --磨耗 图片共2277张。数据集按8:1:1分配。其中 训练集1821张图片,验证集228张图片。 测试集228张图片
为了使用YOLOv8创建一个铁路轨道缺陷检测系统,我们将从数据集准备、模型训练、评估、结果可视化以及简易用户界面开发几个方面进行详细说明。
以下文字及代码仅供参考。
1. 环境设置
首先确保你的环境中安装了必要的依赖项。这里以YOLOv5为例,如果你使用的是YOLOv8,请根据实际情况调整。
gitclone https://github.com/ultralytics/yolov8# 克隆YOLOv8仓库(请确认这是正确的URL)cdyolov8 pipinstall-rrequirements.txt# 安装依赖2. 数据预处理
组织你的数据集如下:
railway_defects_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ └── labels/ ├── train/ ├── val/ └── test/创建railway_data.yaml文件来描述数据集路径和类别信息:
train:./railway_defects_dataset/images/train/val:./railway_defects_dataset/images/val/test:./railway_defects_dataset/images/test/nc:4# 类别数量names:['Spalling','Wheel Burn','Squat','Corrugation']# 类别名称3. 模型定义与训练
开始训练过程:
python train.py--img640--batch16--epochs50--datarailway_data.yaml--weightsyolov8s.pt--namerailway_defect_model--img 640: 输入图像尺寸。--batch 16: 每批次的图像数量。--epochs 50: 训练周期数。--data railway_data.yaml: 数据配置文件路径。--weights yolov8s.pt: 预训练权重文件路径(如果有)。--name railway_defect_model: 保存模型的目录名。
4. 评估
训练完成后,可以对验证集或测试集进行评估:
python val.py--weightsruns/train/railway_defect_model/weights/best.pt--datarailway_data.yaml--img640--taskval5. 结果分析与可视化
对于预测结果的可视化,可以使用如下命令:
python detect.py--weightsruns/train/railway_defect_model/weights/best.pt--source./railway_defects_dataset/images/test/ --save-txt --save-conf6. 用户界面开发(Flask应用)
构建一个简单的Flask应用用于展示检测结果。
Flask 应用代码
fromflaskimportFlask,request,render_template,send_from_directoryimporttorchfromPILimportImageimportos app=Flask(__name__)model=torch.hub.load('ultralytics/yolov8','custom',path='runs/train/railway_defect_model/weights/best.pt')@app.route('/',methods=['GET','POST'])defupload_file():ifrequest.method=='POST':if'file'notinrequest.files:return"No file part"file=request.files['file']iffile.filename=='':return"No selected file"iffile:img=Image.open(file.stream)results=model(img)results.save(save_dir='static/detect_results')# 保存检测结果图片到指定目录result_image_path=os.path.join('detect_results',os.listdir('static/detect_results')[0])returnrender_template('result.html',result_image=result_image_path)returnrender_template('index.html')@app.route('/static/<path:filename>')defserve_static(filename):returnsend_from_directory('static',filename)if__name__=='__main__':app.run(debug=True)index.html示例
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Upload Image</title></head><body><formaction="/"method="post"enctype="multipart/form-data">Select image to upload:<inputtype="file"name="file"id="file"><inputtype="submit"value="Upload Image"name="submit"></form></body></html>result.html示例
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Result</title></head><body><h1>Detection Result:</h1><imgsrc="{{ url_for('serve_static', filename=result_image) }}"alt="Detection Result"></body></html>这个简易的应用允许用户上传一张图片,然后在原图上绘制检测结果,并显示给用户。同学呀,你需要创建一个static目录,并在其中创建一个子目录detect_results用于存放检测结果图像。此外,还需要根据实际情况调整脚本中的路径和其他参数。如果使用的是YOLOv8而非v5,请确保所有相关的调用和路径都针对YOLOv8进行了正确配置。