基于 YOLOv8 的道路缺陷检测系统
·
一、项目简介
本项目基于 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,即可开始检测。













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