基于YOLOv8的无人机识别与检测系统

本项目是一个围绕 YOLOv8 构建的无人机识别与检测系统,涵盖了深度学习项目从数据集组织、模型训练、参数调优、结果评估,到桌面端系统集成与功能开发的完整流程。项目以 Anti-UAV 单类别目标检测数据集为基础,完成了无人机目标检测模型训练,并在 PyQt6 图形界面中实现了图片识别、视频识别、摄像头实时识别、模型管理、训练指标展示与检测历史管理等功能。

1. 项目简介

本项目面向低空目标检测场景,针对无人机目标尺度小、背景复杂、分辨率差异大的特点,采用 Ultralytics YOLOv8 框架完成模型训练与部署。整体开发过程主要包括:

  • 数据集构建与规范化整理
  • 基于预训练权重的目标检测模型训练
  • 训练参数配置与训练过程监控
  • 检测指标分析与结果可视化
  • 桌面端识别系统集成与交互功能开发

项目既保留了深度学习训练部分,也实现了一个可直接用于演示和课程设计展示的图形化检测系统。

2. 技术栈

项目主要使用如下技术栈完成开发:

类别 技术
深度学习框架 Ultralytics YOLOv8PyTorch
桌面界面 PyQt6
图像/视频处理 OpenCV
数据处理 NumPyPandas
训练结果可视化 Matplotlib
配置管理 PyYAML
数据存储 JSON

3. 项目结构

项目核心结构如下:

复制代码
c162/
├─ app.py                       # 系统主入口
├─ train.py                     # 模型训练入口
├─ visualize.py                 # 训练结果可视化入口
├─ Anti-UAV/                    # 无人机检测数据集
│  ├─ data.yaml
│  ├─ images/
│  │  ├─ train/
│  │  ├─ val/
│  │  └─ test/
│  └─ labels/
│     ├─ train/
│     ├─ val/
│     └─ test/
├─ train/
│  ├─ config.py                 # 训练参数配置
│  └─ trainer.py                # 训练流程封装
├─ train_result/
│  └─ exp/
│     ├─ args.yaml              # 实际训练参数
│     ├─ results.csv            # 每轮训练指标
│     ├─ weights/               # best.pt / last.pt
│     └─ charts/                # 可视化图表
├─ 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/
│     ├─ detector.py            # YOLOv8 推理封装
│     ├─ history_manager.py     # 历史记录管理
│     └─ user_manager.py        # 用户管理
├─ visualize/
│  ├─ config.py                 # 绘图配置
│  └─ plotter.py                # 图表绘制逻辑
└─ data/
   ├─ users.json                # 用户数据
   └─ history.json              # 检测历史

整体结构上,项目将训练、可视化、界面、工具模块分层组织,避免将深度学习流程与系统功能堆叠在单一文件中,便于维护和扩展。

4. 数据集说明

4.1 数据集概述

本项目使用的数据集为 Anti-UAV,位于 Anti-UAV/ 目录下,采用标准 YOLO 格式组织。数据集仅包含 1 个检测类别:

  • UAV

任务类型为:

  • 无人机目标检测
  • 无人机目标定位
  • 小目标检测研究与验证

4.2 数据组织形式

数据集采用如下结构:

  • images/train:训练集图像
  • images/val:验证集图像
  • images/test:测试集图像
  • labels/train:训练集标注
  • labels/val:验证集标注
  • labels/test:测试集标注

图像文件格式为:

  • JPG

标注文件格式为:

  • TXT

标注采用 YOLO 标准格式:

复制代码
class_id center_x center_y width height

其中坐标和宽高均已归一化到 [0, 1] 区间。

4.3 数据规模统计

根据当前项目中的数据统计结果,数据集规模如下:

数据划分 图像数量 标注文件数量 标注框总数 多目标图像数
Train 5200 5197 5243 29
Val 2600 2600 2621 13
Test 2200 2200 2245 33
Total 10000 9997 10109 75

划分比例约为:

  • 训练集 52%
  • 验证集 26%
  • 测试集 22%

4.4 图像种类与场景特点

从数据分布和抽样场景来看,图像主要覆盖以下无人机检测场景:

  • 空旷天空背景下的小目标无人机
  • 城市场景中的近距离无人机
  • 复杂背景、逆光、远距离条件下的无人机目标
  • 不同分辨率、不同拍摄设备条件下的图像样本

从检测任务角度看,这批图片具备明显的小目标检测特征,模型需要同时兼顾:

  • 小目标识别能力
  • 复杂背景鲁棒性
  • 不同尺度目标适应能力

4.5 图像分辨率特征

数据划分 宽度范围 高度范围 主要分辨率
Train 240-5616 160-3744 1920x1080、1280x720
Val 320-4288 206-2848 1920x1080、1280x720
Test 640-1920 360-1080 1920x1080、1280x720

可以看出:

  • 数据集以高清图像为主
  • 1920x1080 是最常见分辨率
  • 1280x720 也是高频分辨率
  • 存在少量非标准尺寸图像,增强了场景多样性

4.6 目标框统计特征

数据划分 平均宽度 平均高度 平均面积
Train 0.055533 0.053274 0.012530
Val 0.056590 0.054235 0.013279
Test 0.077475 0.072665 0.013635

这说明绝大多数目标框在整幅图像中占比很小,数据集整体属于典型的小目标检测任务。

4.7 数据集构建与处理说明

项目在数据处理阶段主要体现了以下深度学习开发流程:

  1. YOLO 数据集格式完成图片与标签分目录存放。
  2. 使用 data.yaml 定义训练集、验证集、测试集路径、类别数与类别名。
  3. 在训练前通过 train/trainer.py 动态修正 data.yamlpath 字段,避免因环境变化或绝对路径不同导致训练失败。
  4. 结合数据集统计结果,识别出少量异常数据并给出清洗建议。

4.8 当前数据质量说明

当前项目中已发现如下需要注意的数据质量问题:

  • 训练集有 3 张图像缺失标注文件:00579.jpg00639.jpg00724.jpg
  • 验证集中 00991.txt 存在 1 条高度为 0 的无效标注框

这些问题不影响项目说明,但在正式训练或论文实验中建议先做进一步清洗。

5. 模型训练过程

5.1 训练流程

项目的训练流程由 train.pytrain/trainer.py 组织完成,整体过程如下:

  1. 读取 train/config.py 中的训练参数。
  2. 读取数据配置文件 Anti-UAV/data.yaml
  3. 将数据集根目录动态写入临时 yaml,解决跨环境路径问题。
  4. 加载预训练权重 yolov8n.pt
  5. 调用 YOLO.train() 开始训练。
  6. 将训练结果输出到 train_result/exp/
  7. 将每个 epoch 的损失、精度、召回率、mAP、学习率等信息写入 results.csv
  8. 根据训练结果生成可视化图表并提供系统内展示。

5.2 训练模型

本项目训练使用的基础模型为:

  • YOLOv8n

选择 YOLOv8n 的原因是模型轻量、推理速度快,适合课程项目中的训练验证与界面集成,同时能在无人机单类别检测任务上取得较好的平衡效果。

5.3 训练参数

根据 train/config.pytrain_result/exp/args.yaml,本项目核心训练参数如下:

参数 数值
model yolov8n.pt
epochs 100
imgsz 640
batch 16
workers 4
patience 50
optimizer auto
lr0 0.01
lrf 0.01
momentum 0.937
weight_decay 0.0005
warmup_epochs 3
mosaic 1.0
close_mosaic 10
fliplr 0.5
translate 0.1
scale 0.5
amp True
save_period 10

此外,训练中还启用了部分默认增强配置,如:

  • HSV 色彩扰动
  • 随机平移
  • 随机缩放
  • 左右翻转
  • Mosaic 数据增强

5.4 训练调优思路

围绕小目标无人机检测,本项目的训练调优思路主要体现在以下几点:

  • 使用预训练权重加快收敛速度
  • 采用 640 输入尺寸兼顾训练成本与检测精度
  • 通过 Mosaic、缩放、翻转等增强提升泛化能力
  • 使用 patience=50 控制训练稳定性,防止无效长时间训练
  • 保留训练全过程结果,便于后续分析损失收敛与指标变化

如果后续继续优化,可重点围绕以下方向深入:

  • 提高输入尺寸以增强小目标检测能力
  • 对异常标注与漏标数据进行清洗
  • 对比不同规模模型,如 YOLOv8sYOLOv8m
  • 引入更适合小目标的增强或特征融合策略

6. 训练结果与核心指标

根据 train_result/exp/results.csv,本次训练共完成 100 个 epoch,总训练时长约为:

  • 4662.13 s,约 77.7 min

6.1 最终 epoch 指标

指标 最终值
Precision 0.96405
Recall 0.83904
mAP@0.5 0.89352
mAP@0.5:0.95 0.58134
Train Box Loss 0.92121
Val Box Loss 1.33606

6.2 训练过程中的最优指标

指标 最优值
Precision 0.96436
Recall 0.85120
mAP@0.5 0.89457
mAP@0.5:0.95 0.58203

6.3 指标解读

  • Precision 较高,说明模型输出的检测框中,误检相对较少。
  • Recall 相对低于 Precision,说明在部分复杂场景或极小目标条件下仍存在漏检空间。
  • mAP@0.5 达到较高水平,说明模型对无人机目标的整体检测效果较好。
  • mAP@0.5:0.95 相比 mAP@0.5 有明显下降,说明在更严格 IoU 标准下,定位精度仍有进一步优化空间。

总体来看,该模型已经具备较好的工程演示能力和课程设计展示价值。

7. 可视化图表说明

项目在 train_result/exp/charts/ 中生成了 5 类可视化图,用于分析模型训练过程。

7.1 01_loss_curves.png

损失曲线图展示了训练集与验证集上的三类核心损失:

  • Box Loss:边界框回归损失
  • Class Loss:分类损失
  • DFL Loss:分布焦点损失

图的作用:

  • 观察模型是否稳定收敛
  • 判断训练集与验证集损失是否同步下降
  • 分析是否存在过拟合或欠拟合趋势

7.2 02_metric_curves.png

指标曲线图展示了:

  • Precision
  • Recall
  • mAP@0.5
  • mAP@0.5:0.95

图的作用:

  • 观察模型性能随 epoch 的提升过程
  • 判断模型在何时趋于稳定
  • 便于选择更合适的最佳权重与训练轮次

7.3 03_pr_trajectory.png

该图展示了训练过程中 PrecisionRecall 的变化轨迹。

图的作用:

  • 观察模型在"误检控制"和"漏检控制"之间的平衡变化
  • 判断训练后期模型是否进入更优的 P-R 区域
  • 直观体现训练从起点到终点的性能演进

7.4 04_lr_schedule.png

该图展示训练期间学习率的衰减过程。

图的作用:

  • 观察学习率是否按预期下降
  • 判断前期预热、中后期收敛是否平稳
  • 分析训练稳定性与学习率策略之间的关系

7.5 05_dashboard.png

该图为综合总览仪表盘,整合了:

  • 三类损失变化
  • 学习率变化
  • 四项核心指标
  • P-R 轨迹
  • 关键指标汇总表

图的作用:

  • 一图总览整个训练过程
  • 便于课程答辩、项目汇报和结果展示
  • 降低单独查看多个图表的成本

8. 系统功能设计

本项目不仅完成了模型训练,也开发了配套的桌面端无人机识别系统。

8.1 登录与注册

系统提供登录/注册界面,支持:

  • 用户登录
  • 新用户注册
  • 角色信息展示
  • 本地用户数据持久化存储

8.2 图片识别

图片识别页面支持:

  • 打开本地图片
  • 对单张图片执行无人机检测
  • 显示标注结果图
  • 显示目标数量、类别数、平均置信度、最高置信度
  • 展示检测框详细数据
  • 绘制置信度分布图
  • 导出检测结果图片
  • 导出检测结果 CSV

8.3 视频识别

视频识别页面支持:

  • 读取本地视频文件
  • 按"每 N 帧检测"策略进行逐帧推理
  • 实时显示检测标注画面
  • 展示当前帧目标统计
  • 展示本次视频检测累计统计
  • 导出当前检测帧
  • 将本次检测结果保存到历史记录

8.4 摄像头实时识别

摄像头识别页面支持:

  • 选择摄像头编号
  • 启动/关闭摄像头
  • 实时检测开关控制
  • 动态调整每 N 帧检测频率
  • 实时显示当前帧检测结果
  • 累计统计本次会话检测目标数
  • 截图保存
  • 将会话检测结果保存到历史记录

8.5 模型管理

模型管理页面支持:

  • 加载指定 .pt 权重文件
  • 自动读取默认权重 train_result/exp/weights/best.pt
  • 查看模型类别、路径、阈值等信息
  • 设置 conf
  • 设置 iou
  • 设置 max_det

8.6 指标展示

指标展示页面支持:

  • 读取 train_result/exp/results.csv
  • 展示训练曲线
  • 展示最终指标汇总
  • 展示性能雷达图
  • 展示 P-R 轨迹
  • 展示最佳 epoch 分析
  • 展示损失热力图

8.7 检测历史管理

历史记录模块支持:

  • 自动保存图片、视频、摄像头检测记录
  • 按类型筛选历史记录
  • 按关键字搜索
  • 查看记录详情
  • 导出历史 CSV
  • 清空历史数据

9. 系统集成设计说明

从工程实现角度看,本项目完成了深度学习模型到桌面应用系统的集成,主要体现在:

  1. 通过 ui/utils/detector.pyYOLOv8 推理接口进行统一封装。
  2. 在图片、视频、摄像头三个场景中复用同一检测器,减少重复逻辑。
  3. 使用多线程处理推理任务,避免界面卡顿,提升交互体验。
  4. 使用 JSON 持久化用户信息和检测历史,支撑完整业务流程。
  5. 通过训练结果 CSV 和 Matplotlib 生成训练分析页面,实现训练与应用的一体化展示。

这使项目不再只是单纯的模型训练代码,而是形成了相对完整的"数据集 + 模型 + 可视化 + 应用系统"的闭环。

10. 项目亮点

本项目的亮点主要体现在以下几个方面:

  • 完整体现了深度学习项目从数据、训练、评估到部署展示的基本流程
  • 数据集统计信息完整,能够支撑项目说明书与答辩展示
  • 训练参数明确,训练过程可追踪、可复现
  • 训练结果不仅保留原始 CSV,还生成了多种可视化图
  • 桌面系统功能较完整,支持图片、视频、摄像头多种识别方式
  • 项目内部大量使用相对路径与 Path 管理,适应中文路径与跨目录移动场景

相关推荐
皮卡丘不断更2 小时前
我把传统项目问答升级成了 Agent-RAG:Spring Boot + FastAPI + ChromaDB 工程落地实践
人工智能·spring boot·后端·架构·python3.11
serve the people2 小时前
BERT模型
人工智能·深度学习·bert
木斯佳2 小时前
前端八股文面经大全:得物AI应用开发一面(2026-03-23)·面经深度解析【加精】
前端·人工智能·ai·markdown·chat·rag
小高求学之路2 小时前
计算机视觉、YOLO算法模型训练、无人机监测人员密集自动识别
算法·yolo·计算机视觉
绒绒毛毛雨2 小时前
On the Plasticity and Stability for Post-Training Large Language Models
人工智能·机器学习·语言模型
jinlong06033 小时前
大疆无人机等通过RTMP推流接入LiveQing流媒体平台,轻松实现Web网页直播+录像留存
无人机
华普微HOPERF3 小时前
无人机已成当代“空中尖兵”,开发者如何进一步提升其控制精度?
物联网·无人机·解决方案
SuniaWang10 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构