基于yolov26+pyqt5的城市道路路面积水检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面

作品简介

基于 PyQt5 和YOLO26的目标检测桌面应用程序,支持图片、视频和摄像头实时检测。

功能特性

  • 图片检测 :支持图片检测
  • 视频检测 :支持视频文件实时检测与播放
  • 摄像头检测 :支持实时摄像头视频流检测
  • 模型切换 :支持加载不同的 YOLO26 模型(.pt 或 .onnx 格式)
  • 参数调节 :可调节置信度阈值和 IOU 阈值
  • 类别筛选 :支持按类别筛选检测结果
  • 结果导出 :支持检测结果保存为图片或导出为 JSON/TXT 格式
  • 实时统计 :显示 FPS、目标数量等实时统计信息

效果展示

在这里插入图片描述

训练数据集介绍

数据集格式:YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的yolo格式txt文件)

图片数量(jpg文件个数):2699

标注数量(txt文件个数):2699

训练集数量:2199

验证集数量:300

测试集数量:200

标注类别数:1

所在github仓库:firc-dataset

标注类别名称(注意yolo格式类别顺序不和这个对应,而以labels文件夹classes.txt为准):[‘puddle’]

每个类别标注的框数:

puddle 框数=3777

总框数=3777

图片分辨率:多分辨率图片,如240x240,244x244等

使用标注工具:labelImg

标注规则:对类别进行画矩形框

重要说明:暂无

特别声明:本数据集不对训练的模型或者权重文件精度作任何保证

图片预览:

在这里插入图片描述

在这里插入图片描述

标注例子:

在这里插入图片描述

训练情况介绍

模型在训练集1600张+200验证集张图片进行训练得到

Class

Images

Instances

P

R

mAP50

mAP50-95

all

300

399

0.854

0.762

0.845

0.498

算法原理

YOLO26 目标检测算法

本项目基于 YOLO26(You Only Look Once v26) 目标检测算法,由 Ultralytics 公司开发。YOLO26 是一种单阶段(One-Stage)目标检测器,具有以下特点:

1. 网络架构

YOLO26 采用先进的骨干网络(Backbone)和特征融合网络:

  • Backbone :采用基于PPHGNetV2改进的C3k2_HGBlock结构,集成HGBlock密集连接与压缩激励机制,搭配LightConv轻量级卷积,在降低计算量的同时提升特征提取效率,适配边缘设备的轻量化需求[2]
  • Neck :采用 PAN-FPN(Path Aggregation Network - Feature Pyramid Network)结构,实现自顶向下和自底向上的特征融合
  • Head :解耦头(Decoupled Head)设计,将分类和定位任务分开处理,提升检测精度
2. 检测流程
  1. 图像预处理 :将输入图像调整为模型输入尺寸(默认 640x640),进行归一化处理
  2. 特征提取 :通过 Backbone 网络提取多尺度特征图
  3. 特征融合 :Neck 网络融合不同层级的特征,增强小目标检测能力
  4. 预测输出 :Head 网络输出每个网格的类别概率和边界框坐标
  5. 后处理 :无需使用NMS(非极大值抑制)算法,模型采用端到端设计,可直接输出最终检测结果,简化部署流程并降低推理延迟[3]
3. 关键技术
  • Anchor-Free 检测 :YOLO26 采用无锚框设计,直接预测目标中心点和尺寸,简化模型结构
  • 动态目标分配(DTA) :替代传统Task-Aligned Assigner,训练时为每个目标分配唯一正样本网格,从根源上避免重复框产生,支撑端到端无NMS设计[1]
  • 无DFL设计 :摒弃传统DFL(Distribution Focal Loss)的复杂分布建模,采用轻量化直接坐标回归,降低推理负担,提升边缘设备运行速度[1]
  • Mosaic 增强 :训练时采用 Mosaic 数据增强,将四张图片拼接,提升小目标检测能力
  • 端到端无NMS设计 :YOLO26 摒弃了传统NMS后处理步骤,通过优化预测生成和训练过程,让模型直接输出最终检测结果,无需额外过滤重复框,不仅提升了推理速度,还简化了多硬件平台的部署流程[3]
4. 后处理算法
  • 置信度过滤 :过滤掉置信度低于阈值的检测结果
  • 类别筛选 :支持按指定类别过滤检测结果

环境要求

硬件要求

项目

最低配置

推荐配置

CPU

Intel i5 或同等性能

Intel i7/i9 或 AMD Ryzen 7/9

内存

8 GB

16 GB 或以上

显卡

支持 CUDA 的 NVIDIA GPU(可选)

NVIDIA RTX 1660 或以上

显存

4 GB(GPU 推理)

8 GB 或以上

硬盘

2 GB 可用空间

SSD,5 GB 可用空间

软件环境
  • 操作系统 :Windows 10/11、Linux、macOS
  • Python :3.9 或以上版本
  • CUDA :11.8 或以上(如需 GPU 加速)
  • cuDNN :8.6 或以上(如需 GPU 加速)

安装步骤

1. 克隆或下载项目
# 使用 git 克隆,可以在github仓库firc-projects找到完整源码
git clone <项目仓库地址>

# 或直接下载 ZIP 压缩包并解压
2. 创建虚拟环境(推荐)
# 使用 conda 创建
conda create -n YOLO26-det python=3.9
conda activate YOLO26-det

# 或使用 venv 创建
python -m venv venv
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
3. 安装依赖包
# 安装 PyTorch(根据 CUDA 版本选择)
# CUDA 11.8 版本:
pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118

# CUDA 12.1 版本:
pip install torch==2.0.1+cu121 torchvision==0.15.2+cu121 --extra-index-url https://download.pytorch.org/whl/cu121

# CPU 版本(无显卡):
pip install torch==2.0.1 torchvision==0.15.2 --extra-index-url https://download.pytorch.org/whl/cpu

# 安装其他依赖
pip install ultralytics==8.4.31
pip install PyQt5==5.15.9
pip install opencv-python==4.8.0.74
pip install numpy==1.24.3
4. 准备模型文件

将训练好的 YOLO26 模型文件(.pt 格式)放入 ​​weights/​​ 目录下:

weights/
├── best.pt          # 主要模型文件
├── class_names.txt  # 类别名称文件
└── ...

类别名称文件格式 (class_names.txt):

puddle

每行一个类别名称,顺序需与模型训练时的类别顺序一致。


运行步骤

启动应用程序
# 激活虚拟环境后
python main.py
使用流程
  1. 加载模型
  • 程序启动时会自动加载 ​​weights/​​ 目录下的默认模型
  • 或点击"加载模型"按钮手动选择模型文件
  1. 选择检测模式
  • 图片检测 :点击"图片检测"按钮,然后选择"选择文件"加载图片
  • 视频检测 :点击"视频检测"按钮,选择视频文件
  • 摄像头检测 :点击"摄像头检测"按钮,自动打开默认摄像头
  1. 设置参数 (可选):
  • 调节"置信度阈值":控制检测结果的置信度下限(0.1 - 0.9)
  • 调节"IOU 阈值":控制非极大值抑制的重叠度阈值(0.1 - 0.9)
  • 选择"类别筛选":只显示指定类别的检测结果
  • 勾选"显示标签与置信度":控制是否在图像上显示标签
  1. 开始检测
  • 点击"开始检测"按钮启动检测
  • 检测过程中可点击"停止检测"终止
  1. 保存结果
  • 点击"保存结果"保存检测结果图片
  • 点击"导出结果"将检测数据导出为 JSON 或 TXT 格式
  • 点击"截图保存"快速保存当前画面

注意事项

1. 模型文件
  • 确保模型文件(.pt)与类别名称文件(class_names.txt)匹配
  • 模型文件路径不能包含中文字符,建议放在项目根目录的 ​​weights/​​ 文件夹下
  • 支持的模型格式:PyTorch (.pt) 和 ONNX (.onnx)
2.GPU加速
  • 首次运行时会自动下载 CUDA 相关的预训练权重,可能需要等待几分钟
  • 如遇到 CUDA 内存不足错误,请关闭其他占用显存的程序
  • 无 NVIDIA 显卡时,程序会自动切换为 CPU 推理,速度较慢
3. 检测参数
  • 置信度阈值 :建议设置在 0.3 - 0.5 之间,过低会产生大量误检,过高可能漏检
  • IOU 阈值 :建议设置在 0.4 - 0.6 之间,用于去除重叠的检测框
  • 参数调整会实时生效,无需重新加载模型
4.摄像头检测
  • 确保摄像头设备正常工作且未被其他程序占用
  • 默认使用摄像头索引 0,如需修改请在代码中调整 ​​camera_index​​ 参数
  • 摄像头检测为实时模式,按"停止检测"或关闭窗口即可退出
5. 性能优化
  • 视频检测时,检测速度取决于视频分辨率和显卡性能
  • 如检测卡顿,可尝试降低输入视频分辨率或更换更高性能的显卡
  • 批量图片检测时会顺序处理,建议在处理大量图片前确保磁盘空间充足
6. 常见问题

问题

解决方案

模型加载失败

检查模型文件路径是否正确,确保文件未损坏

无法打开摄像头

检查摄像头连接,确保没有其他程序占用摄像头

CUDA out of memory

减小 batch size,关闭其他程序,或使用 CPU 推理

检测结果不准确

调整置信度和 IOU 阈值,或更换更合适的模型

界面显示异常

确保 PyQt5 正确安装,尝试更新显卡驱动

文件夹结构

YOLO26-det-pyqt5/               # 项目根目录
│
├── main.py                     # 主程序入口,PyQt5 界面实现
├── Yolov26Detector.py           # YOLO26 检测器核心类
├── README.md                   # 项目说明文档
│
├── weights/                    # 模型权重文件夹
│   ├── weights/                # 子文件夹(存放 .pt 模型文件)
│   │   └── best.pt            # 默认模型文件
│   ├── class_names.txt        # 类别名称列表
│   ├── args.yaml              # 训练参数配置
│   ├── data.yaml              # 数据集配置
│   ├── results.csv            # 训练结果数据
│   ├── results.png            # 训练结果图表
│   ├── confusion_matrix.png   # 混淆矩阵
│   ├── BoxF1_curve.png        # F1 分数曲线
│   ├── BoxP_curve.png         # 精确率曲线
│   ├── BoxR_curve.png         # 召回率曲线
│   └── ...                    # 其他训练和验证可视化结果
│
├── test_img/                   # 测试图片文件夹
│   ├── firc_1000.jpg          # 测试图片示例
│   ├── firc_1001.jpg
│   └── ...                    # 更多测试图片
│
└── 数据集地址.xlsx              # 数据集信息文档
文件说明

文件/文件夹

说明

​main.py​

应用程序主入口,包含 PyQt5 GUI 界面、多线程检测逻辑、信号槽处理

​Yolov26Detector.py​

YOLO26 检测核心类,封装模型加载、推理、可视化等功能

​weights/​

存放模型权重文件和相关配置,是检测功能的核心资源目录

​test_img/​

提供测试用的示例图片,用于快速验证检测功能

​class_names.txt​

类别名称定义文件,每行一个类别,顺序需与模型训练时一致

​data.yaml​

YOLO26 数据集配置文件,包含类别数、类别名称、数据集路径等

技术栈

  • Python 3.9+ :编程语言
  • PyQt5 :桌面 GUI 框架
  • YOLO26(Ultralytics) :目标检测模型
  • OpenCV :图像和视频处理
  • NumPy :数值计算
  • PyTorch :深度学习框架

许可协议

本项目仅供学习和研究使用。


更新日志

v1.0
  • 初始版本发布
  • 支持图片、视频、摄像头三种检测模式
  • 实现参数调节和结果导出功能
  • 提供实时 FPS 和统计信息显示


创作时间: