编辑
2026-05-18
学习
00

目录

裂缝检测模型训练结果报告
📁 项目结构
📊 数据集分析
基本信息
类别分布
训练集
验证集
🏃 训练详情
训练1: YOLOv8n
训练2: YOLO26s
📈 性能对比
整体性能
结论
🔍 各类别详细对比
类别 0(主要类别)
类别 1(小样本)
类别 2
stone 类别
🧪 实际推理对比
测试图片对比(5张)
关键发现
📉 损失函数对比
最终损失值(Epoch 100)
✅ 最终结论
推荐模型: YOLOv8n ✅
YOLO26s 失败原因
🚀 使用指南
加载最佳模型
导出部署
📊 性能指标速查
🔧 后续优化建议
📁 附件说明
📞 备注

裂缝检测模型训练结果报告

项目:Tunnel裂缝检测
时间:2026-05-14
训练设备:NVIDIA GeForce RTX 2080 Ti (22GB)
软件环境:Ultralytics 8.4.50, PyTorch 2.4.1, CUDA 12.1


📁 项目结构

tunnel/ ├── train/images/ # 训练集: 3185张图片 ├── train/labels/ # 训练标注 ├── valid/images/ # 验证集: 442张图片 ├── valid/labels/ # 验证标注 ├── test/images/ # 测试集: 120张图片 ├── data.yaml # 数据集配置 ├── train_tunnel.py # 训练脚本 ├── infer_tunnel.py # 推理脚本 └── runs/ # 训练结果目录 └── detect/ ├── tunnel_crack/ # 第一次训练 (YOLOv8n) │ ├── weights/ │ │ ├── best.pt # 最佳模型 │ │ └── last.pt # 最终模型 │ ├── results.csv # 训练日志 │ ├── results.png # 训练曲线 │ └── confusion_matrix.png └── tunnel_crack-2/ # 第二次训练 (YOLO26s) └── ... (相同结构)

📊 数据集分析

基本信息

参数数值
类别数4
训练图片3,185
验证图片442
测试图片120
图片尺寸640×640
标注格式YOLO

类别分布

训练集

类别实例数占比说明
02,25844.1%主要类别(裂缝)
stone1,11521.8%石块/异物
296318.8%次要裂缝类型
178815.4%少数类别

类别不平衡: 类别0是类别1的 2.9倍

验证集

类别实例数占比
047470.1%
210916.1%
stone8112.0%
1121.8%

🏃 训练详情

训练1: YOLOv8n

python
model = YOLO("yolov8n.pt") model.train( data="tunnel/data.yaml", epochs=100, imgsz=640, batch=32, device=0, optimizer="Adam", patience=20, )

训练参数:

  • 模型: YOLOv8n (YOLO第8代 nano版本)
  • 参数量: ~3M
  • 训练时间: 23.7分钟
  • 学习率: 0.01 (Adam)
  • 数据增强: Mosaic, RandAugment

保存路径:

  • runs/detect/runs/tunnel_crack/weights/best.pt
  • runs/detect/runs/tunnel_crack/weights/last.pt

训练2: YOLO26s

python
model = YOLO("yolo26s.pt") model.train( data="tunnel/data.yaml", epochs=100, imgsz=640, batch=32, device=0, optimizer="Adam", patience=20, )

训练参数:

  • 模型: YOLO26s (YOLO第26代 small版本)
  • 参数量: ~9.5M
  • 训练时间: 52.8分钟
  • 学习率: 0.01 (Adam)
  • 数据增强: Mosaic, RandAugment

保存路径:

  • runs/detect/runs/tunnel_crack-2/weights/best.pt
  • runs/detect/runs/tunnel_crack-2/weights/last.pt

📈 性能对比

整体性能

指标YOLOv8nYOLO26s差异
参数量3.0M9.5M+217%
训练时间23.7分钟52.8分钟+123%
mAP500.5700.562-1.4%
mAP50-950.3780.347-8.2%
Precision0.8430.612-27.4%
Recall0.4870.489+0.4%
推理速度3.0ms/张3.0ms/张持平

结论

  • YOLOv8n 胜出:速度更快,精度更高
  • YOLO26s 欠拟合:参数量大3倍,但100轮训练不足

🔍 各类别详细对比

类别 0(主要类别)

指标YOLOv8nYOLO26s
Precision0.9320.862
Recall0.6730.705
mAP500.8650.822
mAP50-950.5560.485

分析: YOLOv8n在类别0上全面领先,特别是定位精度(mAP50-95)高14.6%


类别 1(小样本)

指标YOLOv8nYOLO26s
Precision0.5130.658
Recall0.5830.583
mAP500.4990.586
mAP50-950.3920.393

分析: YOLO26s在小样本类别上有优势,但提升有限


类别 2

指标YOLOv8nYOLO26s
Precision0.9260.889
Recall0.6930.665
mAP500.8600.813
mAP50-950.5490.498

分析: YOLOv8n全面领先


stone 类别

指标YOLOv8nYOLO26s
Precision1.00.038
Recall00.002
mAP500.0550.034
mAP50-950.0150.011

分析: 两个模型在stone类别上都失败,可能是数据分布问题

原因分析:

  • 验证集只有81个stone实例(12%)
  • 验证集分布与训练集不一致
  • 建议检查stone样本质量或重新采样

🧪 实际推理对比

测试图片对比(5张)

图片YOLOv8n检测结果YOLO26s检测结果胜者
95_png...1个目标, conf=0.5171个目标, conf=0.816YOLO26s
Image_-696...1个目标, conf=0.7741个目标, conf=0.764YOLOv8n
Image_-698...1个目标, conf=0.4431个目标, conf=0.669YOLO26s
Image_-702...1个目标, conf=0.5061个目标, conf=0.298YOLOv8n
Image_-731...3个目标 (0.826, 0.640, 0.264)0个目标YOLOv8n 🏆

关键发现

第5张图最关键:

YOLOv8n: 检测到3个目标(类别2 + 2个类别1) YOLO26s: 完全漏检(0个目标)

统计:

指标YOLOv8nYOLO26s
检测到目标的图片5/54/5
检测到的总目标数74
多目标检测能力

📉 损失函数对比

最终损失值(Epoch 100)

损失类型YOLOv8nYOLO26s分析
box_loss0.9021.135v8n定位更准
cls_loss0.7120.891v8n分类更准
dfl_loss1.2420.021s模型dfl收敛好

关键发现:

  • YOLO26s的box_loss和cls_loss都比YOLOv8n高
  • 说明YOLO26s欠拟合,100轮训练不足
  • YOLO26s需要更多训练轮数才能发挥优势

✅ 最终结论

推荐模型: YOLOv8n ✅

理由:

  1. 速度更快: 训练时间只有一半 (23.7分钟 vs 52.8分钟)
  2. 精度更高: mAP50-95领先8.2% (0.378 vs 0.347)
  3. 检测更全面: 多目标场景表现好,不漏检
  4. Precision更高: 0.843 vs 0.612(误检更少)

模型路径:

runs/detect/runs/tunnel_crack/weights/best.pt

YOLO26s 失败原因

  1. 训练不足: 100轮对9.5M参数不够,建议200轮+
  2. batch可能过大: 32对s模型可能不稳定,建议16
  3. 欠拟合: 损失函数未充分收敛

改进方案:

python
model = YOLO("yolo26s.pt") model.train( data="tunnel/data.yaml", epochs=200, # 100 → 200 batch=16, # 32 → 16 patience=50, # 20 → 50 # 其他参数不变 )

🚀 使用指南

加载最佳模型

python
from ultralytics import YOLO # 推荐:YOLOv8n model = YOLO("runs/detect/runs/tunnel_crack/weights/best.pt") # 验证 metrics = model.val() print(f"mAP50: {metrics.box.map50:.4f}") # 推理单张图片 results = model("path/to/image.jpg") results[0].show() # 推理文件夹 results = model("tunnel/test/images", save=True)

导出部署

python
# 导出ONNX格式 model.export(format="onnx") # 导出TensorRT格式(更快,需GPU) model.export(format="engine") # 导出CoreML格式(iOS/Mac) model.export(format="coreml")

📊 性能指标速查

指标含义YOLOv8n值评价
mAP50IoU=0.5时的平均精度0.570良好
mAP50-95IoU=0.5:0.95平均精度0.378中等
Precision精确率0.843优秀
Recall召回率0.487一般
推理速度单张图片时间3.0ms极快 (~333 FPS)

🔧 后续优化建议

  1. 数据增强

    python
    model.train( augment=True, mixup=0.1, copy_paste=0.1, )
  2. 类别平衡

    • 对类别1和stone进行过采样
    • 或使用类别权重
  3. stone类别排查

    • 检查标注质量
    • 重新划分train/val
  4. 尝试更大模型

    • 如果YOLOv8n精度不够,可尝试YOLOv8s
    • 训练200轮+小batch

📁 附件说明

文件说明
results.csv每轮训练详细数据
results.png训练曲线图(loss、mAP等)
confusion_matrix.png混淆矩阵
labels.jpg数据集标签分布可视化
train_batch*.jpg训练批次可视化
val_batch*_pred.jpg验证集预测结果

📞 备注

  • 训练日志保存在 runs/detect/runs/tunnel_crack/
  • 推理结果保存在 runs/detect/predict/
  • 使用 tensorboard --logdir runs 可查看训练可视化

报告生成时间: 2026-05-14
作者: Claude Code
项目: Tunnel裂缝检测系统

本文作者:Deshill

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!