一、项目简介

本项目基于 YOLOv8 目标检测框架,针对城市道路路面缺陷场景构建了一套完整的检测系统,涵盖数据集管理、模型训练、指标可视化以及可视化交互界面,可对图片、视频、摄像头实时输入进行缺陷目标检测与统计分析。


二、数据集说明

2.1 数据集概览

项目 数值
总图片数 6,000 张
训练集 5,400 张(90%)
验证集 600 张(10%)
标注格式 YOLO 格式(归一化坐标 .txt
图像尺寸 训练输入统一缩放至 640×640

2.2 检测类别(9 类)

类别 ID 英文名称 中文含义
0 Crack 裂缝
1 Manhole 井盖
2 Net 网状裂缝
3 Pothole 坑洞
4 Patch-Crack 修补裂缝
5 Patch-Net 修补网状裂缝
6 Patch-Pothole 修补坑洞
7 other 其他(小写)
8 Other 其他(大写)

2.3 标注格式说明

每个标注文件(.txt)每行代表一个目标,格式为:

class_id  x_center  y_center  width  height

所有坐标均为归一化值(0~1),相对于图像宽高计算。


三、训练过程

3.1 启动训练

python train.py

可通过命令行参数自定义训练配置:

python train.py --model yolov8s.pt --epochs 200 --batch 8 --imgsz 640 --name exp01

3.2 训练参数说明

参数 说明
model yolov8n.pt 使用 YOLOv8n 预训练权重
epochs 100 训练总轮数
batch 16 批次大小
imgsz 640 输入图像尺寸(像素)
optimizer auto 自动选择优化器(默认 SGD/AdamW)
lr0 0.01 初始学习率
lrf 0.01 最终学习率(相对 lr0 的比例)
momentum 0.937 SGD 动量
weight_decay 0.0005 权重衰减(L2 正则)
warmup_epochs 3 学习率预热轮数
patience 50 早停轮数(验证集无提升则停止)
amp true 开启混合精度训练(加速 + 省显存)
iou 0.7 NMS IoU 阈值
close_mosaic 10 最后 N 轮关闭 Mosaic 数据增强

3.3 数据增强策略

增强方式 参数值 说明
HSV 色调 0.015 随机色调扰动
HSV 饱和度 0.7 随机饱和度扰动
HSV 亮度 0.4 随机亮度扰动
水平翻转 0.5 50% 概率翻转
平移 0.1 随机平移比例
缩放 0.5 随机缩放范围
Mosaic 1.0 四图拼接(训练前期开启)
随机擦除 0.4 随机遮挡区域
自动增强 randaugment 随机策略组合

3.4 训练产物

训练完成后所有产物自动保存至 output/yolov8_road_defect/

output/
└── yolov8_road_defect/
    ├── weights/
    │   ├── best.pt       ← 验证集最优模型(推荐用于推理)
    │   └── last.pt       ← 最后一轮模型
    ├── results.csv       ← 每轮训练指标记录
    ├── args.yaml         ← 训练参数快照
    ├── confusion_matrix.png
    ├── BoxP_curve.png
    ├── BoxR_curve.png
    ├── BoxF1_curve.png
    └── labels.jpg

四、训练结果

基于 YOLOv8n 预训练权重,训练 99 个 epoch 后的最优指标如下:

指标 最优值
mAP50 0.3439
mAP50-95 0.1842
Precision(精确率) 0.9621
Recall(召回率) 0.4008

精确率较高说明模型检测到的目标可信度高;召回率偏低与数据集中小目标较多、类别分布不均有关,可通过增大模型规模(如 yolov8s/m)或增加训练轮数进一步提升。


五、可视化指标说明

运行以下命令可基于 results.csv 生成全部可视化图,保存至 output/yolov8_road_defect/visualizations/

python visualize.py

5.1 生成图表说明

文件名 内容说明
loss_curves.png 训练集与验证集三类损失曲线(box_loss / cls_loss / dfl_loss),曲线持续下降表示模型正常收敛
metric_curves.png Precision、Recall、mAP50、mAP50-95 随训练轮次的变化趋势,用于判断模型检测能力的提升情况
learning_rate_curves.png 各参数组的学习率调度曲线,反映预热阶段和余弦退火衰减过程
overview_dashboard.png 四合一总览面板:Box Loss 对比 / Precision-Recall / mAP / Cls Loss,适合一图汇报训练质量
training_summary.png 训练汇总卡片,展示总轮次、最优精确率、召回率、mAP50、mAP50-95 及最终损失值

5.2 损失类型说明

损失名称 含义
box_loss 边界框回归损失,衡量预测框与真实框的位置偏差
cls_loss 分类损失,衡量目标类别预测的准确程度
dfl_loss 分布焦点损失(Distribution Focal Loss),YOLOv8 特有,用于精细化边框坐标预测

六、系统功能

系统提供基于 PyQt6 的可视化交互界面,启动方式:

python main.py

默认账号:admin,密码:admin123

6.1 功能模块

模块 功能描述
图片识别 上传本地图片,调用 YOLOv8 进行缺陷检测,展示标注结果、类别统计、置信度分布直方图,支持导出标注图片和 CSV 报告
视频识别 逐帧检测本地视频,实时展示带标注的播放画面,统计各类别累计检测数量,支持导出当前帧
摄像头识别 接入本地摄像头进行实时检测,可切换检测开关、手动截图保存,支持将本次会话数据存入历史
检测历史 查看所有历史检测记录,支持按类型(图片/视频/摄像头)筛选和关键词搜索,可导出历史 CSV
模型管理 配置模型权重路径,调整置信度阈值、IoU 阈值、最大检测数等参数,验证并热加载模型
指标展示 自动扫描 output 目录下的 results.csv,展示训练损失曲线、mAP 曲线、P/R 曲线及最终指标汇总柱状图

七、项目技术栈

类别 技术 / 库
检测框架 YOLOv8(Ultralytics)
深度学习 PyTorch
UI 框架 PyQt6
图表绘制 Matplotlib(QtAgg 后端)
图像处理 OpenCV(cv2)
数值计算 NumPy
语言 Python 3.9
数据格式 YAML、CSV、JSON

八、项目结构

.
├── main.py                        # 系统启动入口
├── train.py                       # 训练启动入口
├── visualize.py                   # 指标可视化入口
│
├── app/                           # UI 应用层
│   ├── login_window.py            # 登录 / 注册窗口
│   ├── main_window.py             # 主窗口(侧边栏 + 页面堆栈)
│   ├── pages/                     # 各功能页面
│   │   ├── image_page.py          # 图片识别页
│   │   ├── video_page.py          # 视频识别页
│   │   ├── camera_page.py         # 摄像头识别页
│   │   ├── history_page.py        # 检测历史页
│   │   ├── model_page.py          # 模型管理页
│   │   └── metrics_page.py        # 训练指标展示页
│   └── utils/                     # 工具层
│       ├── styles.py              # 全局 QSS 样式
│       ├── detector.py            # YOLOv8 检测封装 + 异步线程
│       ├── history_manager.py     # 检测历史本地存储
│       ├── user_manager.py        # 用户认证管理
│       ├── image_utils.py         # 图像格式转换工具
│       └── config_manager.py      # 模型参数配置持久化
│
├── trainer/
│   └── yolov8_train.py            # YOLOv8 训练模块(参数解析 + 启动)
│
├── visualizer/
│   └── results_visualizer.py      # 训练指标可视化模块
│
├── datasets/                      # 数据集
│   ├── lumian.yaml                # 数据集配置文件
│   ├── train/
│   │   ├── images/                # 训练集图像(5,400 张)
│   │   └── labels/                # 训练集标注
│   └── val/
│       ├── images/                # 验证集图像(600 张)
│       └── labels/                # 验证集标注
│
└── output/                        # 训练产物(自动生成)
    ├── config.json                # 系统配置(模型路径 + 检测参数)
    ├── history.json               # 检测历史记录
    ├── users.json                 # 用户账号数据
    ├── dataset_runtime.yaml       # 训练时生成的数据集配置
    └── yolov8_road_defect/
        ├── weights/
        │   ├── best.pt
        │   └── last.pt
        ├── results.csv
        └── visualizations/        # 可视化图表输出目录

九、快速开始

第一步:安装依赖

pip install -r requirements.txt

第二步:训练模型

python train.py

训练完成后权重保存至 output/yolov8_road_defect/weights/best.pt

第三步:生成可视化图

python visualize.py

第四步:启动系统界面

python main.py

登录后进入【模型管理】页面,加载 output/yolov8_road_defect/weights/best.pt,即可开始检测。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐