基于 YOLO 的无人机视角车辆检测系统(代码+数据集+模型)

作品简介

基于 YOLO 的无人机视角车辆检测系统

基本功能演示

本项目是一个基于 YOLO 目标检测网络和 PyQt5 开发的无人机视角车辆检测系统。系统提供了一个直观的图形用户界面(GUI),支持对图片、视频以及摄像头实时视频流进行目标检测。此外,系统支持批量图片处理、检测参数实时调节、目标锁定查看以及检测结果(含坐标信息)的保存与导出。

在这里插入图片描述

研究背景

随着无人机技术在交通监控、城市安防等领域的广泛应用,无人机航拍视角的车辆检测成为重要的研究方向。由于航拍图像通常具有拍摄高度较高、目标尺寸较小且分布密集等特点,传统的检测算法在这些场景下往往容易出现漏检或误检。本项目引入优化后的 YOLO 算法进行无人机视角的车辆检测,旨在提升小体积密集目标的定位准确率,为交通流量统计、辅助停车管理以及安防监控等提供底层数据支持。

系统应用场景在这里插入图片描述

  • 交通流量监控:通过无人机高空拍摄,实时统计重点路段的车辆数量和车型分布,辅助交通管理。
  • 停车场管理:在无遮挡的露天停车场区域使用无人机快速巡检车辆的分布与密度情况。
  • 特定区域安防:用于识别并排查特定路况或禁停区域内的违规驻留车辆。

主要工作内容

  1. 数据集收集与处理:收集并整理无人机视角下的车辆数据集(主要划分自开源的 VisDrone 数据集),将标签整合为小型车辆与大型车辆,并转换为适配本模型的水平边界框标注格式。
  2. 模型训练:基于 YOLO26 深度学习架构进行模型训练,通过调节网络超参数优化检测精度与速度的平衡。
  3. 模型评估:在验证集上分析和评估模型在精确率 (Precision)、召回率 (Recall) 和平均精度均值 (mAP) 等关键指标上的表现。
  4. 可视化界面开发:利用 PyQt5 库开发桌面客户端程序,实现目标检测功能的可视化点击操作与日志呈现。

在这里插入图片描述

一、软件核心功能介绍及效果演示

软件主要功能

  1. 实现对无人机航拍视角的车辆检测,主要识别类别为:['small-vehicle', 'large-vehicle']
  2. 支持单张图片、文件夹批量图片、本地视频文件以及物理硬件摄像头的检测。
  3. 界面可以实时输出并展示检测到目标的类别、位置尺寸坐标、总数量、当前设置的置信度及推理解析耗时。
  4. 支持将图片与视频的检测渲染结果保存到本地文件夹内。
  5. 支持将图片检测的详细记录(包含图片路径、检测框坐标、类别和置信度)存为 .csv 格式报表文件。
  6. 在这里插入图片描述

界面参数设置说明

在界面的参数调节区域,用户可以修改以下核心参数:

  • 置信度阈值 (Confidence Threshold):控制模型输出检测框的最低概率阈值。只有当模型判断目标的概率大于该数值时,预测框才会被保留并显示在界面上。
  • 交并比阈值 (IoU Threshold):用于在后处理阶段判定重叠框的重合保留度。阈值过高可能导致同一个目标出现多个冗余的检测框,阈值适当调低可以帮助系统过滤掉因车辆过度靠近而产生的重复相交预测框。

检测结果说明

检测结束后,界面会显示以下信息:

  • 标签与置信度显示开关:用户可勾选是否在检测结果的红框上方,直接打印对应的类别名称和置信度概率数字。
  • 总目标数:统计当前最新画面中检测到的车辆对象累计数量。
  • 目标选择:下拉菜单中列出了当前图层里所有被识别出的目标,选择其中一个后,系统将在界面右侧单独对该目标进行高亮和准星标识。
  • 目标位置框信息
  • 中心点坐标:检测框几何中心点在图像上的位置。
  • 检测框长:该车辆横向边界框的像素长度。
  • 检测框宽:该车辆纵向边界框的像素宽度。

主要功能说明

(1)图片检测说明

点击“打开图片”或“打开文件夹”按钮以载入待检测图片,系统会自动执行前向推理并在右侧显示标注红框。界面下方的表格区会同步展示当前图像中检测出的各个目标对应参数。若点击“保存”按钮,会将检测后的图像和记录这批坐标特征的 .csv 文件存入同级 save_data 文件夹内。

(2)视频检测说明

点击“打开视频”并传入本地的航拍视频源,系统将对其进行逐帧推理检测,并在画面内连续播放检测效果。在推演期间,用户可以点击暂停按钮以观察某一特定画面,或者实时拖动滑动条调节监控范围。

(3)摄像头检测说明

接通本地硬件或无人机图传设备后,点击“打开摄像头”,系统会调取视频流通道并开启高帧率循环监测。再次点击即可关闭硬件连接。

(4)保存与导出说明

为了方便科研和落地取证统计,系统支持完整的侦测数据导出。视频和单批图片均可落盘为 .jpg/.mp4 文件,而检测表格会详细按行罗列:图片文件名、图片帧中目标序号、预测出来的汽车类别、机器置信得分和四位边界框占比坐标。

(5)模型训练

在这里插入图片描述


在这里插入图片描述

二、模型的训练、评估与推理

1. YOLO介绍

本项目采用的底层检测算法为 YOLO。它是目前为了适应低算力边缘侧设备部署要求而优化的深度视觉模型之一。相较于过往版本,它在部署体积、识别帧率速度与最终检测精确度间取得了较好的设计平衡,非常适合搭载于无人机端的数据分析。

YOLO 核心创新点

本项目选用的 YOLO架构主要包含了以下几项理论优化:

  1. 移除 DFL 模块,简化预测流程:去除了原先用于精细化分布焦点损失(Distribution Focal Loss)的额外回归运算模块。这直接降低了模型的计算复杂度和参数量,使得整体前向预测流程更加轻便,提高了端侧的推理速度。
  2. 端到端无 NMS 推理,降低 Latency:引入一对一的正样本分类匹配机制,能在网络中直接输出最终的预测候选,省略了以往模型中必须存在且极为耗时的非极大值抑制(NMS)循环环节,大幅度降低了模型推演的总延迟。
  3. ProgLoss+STAL,提升检测精度:采用了渐进式损失平衡策略(Progressive Loss)配合小目标感知标签分配(Soft Target Assignment Label)。前者能让网络在前期训练平稳收敛,后者则专项针对占全图比例极小的无人机微粒车辆增加学习权重,进而提升密集拥挤路段下的检测召回率。
  4. MuSGD 优化器,强化训练稳定性:采用改良混合版 MuSGD 动量优化器来规划权重的下降轨迹。减轻了常见传统优化器在处理极小密集样本数据集时容易发生的梯度振荡问题,强化了训练全流程的稳定性。

2. 数据集准备与训练

数据集准备与重新构造

为满足无人机视角任务,我们获取了相关的高空检测数据集,过滤掉无关紧要的标签行,将交通工具合成为本系统使用的两大检测类别:small-vehicle 与 large-vehicle,明确识别意图并减少类间干扰。

数据集格式要求

整个训练流基于标准的 YOLO 直角矩形边界框标注格式,每张原图绑定一个同名的 .txt 文本文档,文档内每行表示一个对象,格式标准如下(使用基于 0 到 1 的规范化小数):

class_index x_center y_center width height

在系统下设的训练文件夹根路径,需要创建一个 data.yaml 文件,用于指引框架寻找训练及验证数据的相对路径并指代具体类名:

# 路径配置
train: datasets/train/images
val: datasets/val/images
test: datasets/test/images

# 类别总计
nc: 2
# 类别文本对应
names: ['small-vehicle','large-vehicle']

模型训练方式

训练环境搭建完成后,可通过调整根目录下的训练脚本来正式启动模型的全参数量训练:

from ultralytics import YOLO

# 加载对应的模型配置文件和基础泛化预训练权重
model_yaml_path = "ultralytics/cfg/models/26/yolo26.yaml"
data_yaml_path = r'datasets/data.yaml'
pre_model_name = 'yolo26n.pt'

if __name__ == '__main__':
    # 实例化网络
    model = YOLO(model_yaml_path).load(pre_model_name)
    # 调用训练器,设置迭代轮数以及批量训练大小等核心超参数
    results = model.train(data=data_yaml_path,
                          epochs=150,
                          batch=32,
                          name='train_yolo26_uav')

3. 训练结果评估

神经网络在反向监督训练过程中,会将每一周期的损失计算(如水平边界框回归误差 Box Loss, 类别分类误差 Cls Loss 等)以及对分割好的验证集的检验测试数据保存下来。我们通过查阅生成的 mAP@0.5(交并比验证限制为 0.5 时的平均精度均值)以及 mAP@0.5:0.95 两条指标曲线的收敛态势,来评判出模型的泛化性能。表现最高且验证指标稳定的那一轮权重,即可保存作为系统投入实际应用时的最终执行核心。

4. 使用模型进行推理

开发与调试完备后,可以通过代码快速挂载已经生成的最高权重文件 best.pt,并对常规图片做推理测算:

import cv2
from ultralytics import YOLO

path = 'models/best.pt'
img_path = "TestFiles/sample_image.jpg"

# 实例化最终模型对象
model = YOLO(path)
# 对传入的目标图片执行分析
results = model(img_path)
# 获取带预测红框和文本标注的矩阵数据
res = results[0].plot(labels=False)

cv2.imshow("Detection Result", res)
cv2.waitKey(0)


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、可视化系统制作

PyQt5 简介

PyQt5 是 Python 中常用的桌面图形界面开发库。它提供了十分丰富的界面组件(如按钮、下拉框、表格等),以及方便的“信号与槽”通讯机制,使得开发者可以快速开发出不需要依赖浏览器的本地应用程序。

系统开发说明

本项目使用 PyQt5 开发了专门的用户操作软件,主要实现了以下界面开发工作:

  1. 多线程防卡顿:由于目标检测需要占用较多的电脑算力,我们将图像和视频的检测过程单独放在了后台线程中处理。这样可以保证系统在同时检测大量图片或长视频时,点击界面其他按钮不会发生卡顿或假死的现象。
  2. 自适应布局:界面的各个模块(包括参数设置区、结果表格区和图像展示区)使用了弹性的布局方式,系统可以适应不同尺寸的电脑屏幕,窗口随意拉伸也不会导致文字或画面被切断。
  3. 界面外观设计:整个操作平台采用了简单的浅色系风格,功能划分直观,让使用者一眼就能找到自己需要操作的按钮区域并快速开始检测任务。


创作时间: