本项目是一个围绕 YOLOv8 构建的无人机识别与检测系统,涵盖了深度学习项目从数据集组织、模型训练、参数调优、结果评估,到桌面端系统集成与功能开发的完整流程。项目以 Anti-UAV 单类别目标检测数据集为基础,完成了无人机目标检测模型训练,并在 PyQt6 图形界面中实现了图片识别、视频识别、摄像头实时识别、模型管理、训练指标展示与检测历史管理等功能。
1. 项目简介
本项目面向低空目标检测场景,针对无人机目标尺度小、背景复杂、分辨率差异大的特点,采用 Ultralytics YOLOv8 框架完成模型训练与部署。整体开发过程主要包括:
- 数据集构建与规范化整理
- 基于预训练权重的目标检测模型训练
- 训练参数配置与训练过程监控
- 检测指标分析与结果可视化
- 桌面端识别系统集成与交互功能开发
项目既保留了深度学习训练部分,也实现了一个可直接用于演示和课程设计展示的图形化检测系统。
2. 技术栈
项目主要使用如下技术栈完成开发:
| 类别 | 技术 |
|---|---|
| 深度学习框架 | Ultralytics YOLOv8、PyTorch |
| 桌面界面 | PyQt6 |
| 图像/视频处理 | OpenCV |
| 数据处理 | NumPy、Pandas |
| 训练结果可视化 | 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 数据集构建与处理说明
项目在数据处理阶段主要体现了以下深度学习开发流程:
- 按
YOLO数据集格式完成图片与标签分目录存放。 - 使用
data.yaml定义训练集、验证集、测试集路径、类别数与类别名。 - 在训练前通过
train/trainer.py动态修正data.yaml的path字段,避免因环境变化或绝对路径不同导致训练失败。 - 结合数据集统计结果,识别出少量异常数据并给出清洗建议。
4.8 当前数据质量说明
当前项目中已发现如下需要注意的数据质量问题:
- 训练集有
3张图像缺失标注文件:00579.jpg、00639.jpg、00724.jpg - 验证集中
00991.txt存在 1 条高度为0的无效标注框
这些问题不影响项目说明,但在正式训练或论文实验中建议先做进一步清洗。
5. 模型训练过程
5.1 训练流程
项目的训练流程由 train.py 和 train/trainer.py 组织完成,整体过程如下:
- 读取
train/config.py中的训练参数。 - 读取数据配置文件
Anti-UAV/data.yaml。 - 将数据集根目录动态写入临时
yaml,解决跨环境路径问题。 - 加载预训练权重
yolov8n.pt。 - 调用
YOLO.train()开始训练。 - 将训练结果输出到
train_result/exp/。 - 将每个 epoch 的损失、精度、召回率、mAP、学习率等信息写入
results.csv。 - 根据训练结果生成可视化图表并提供系统内展示。
5.2 训练模型
本项目训练使用的基础模型为:
YOLOv8n
选择 YOLOv8n 的原因是模型轻量、推理速度快,适合课程项目中的训练验证与界面集成,同时能在无人机单类别检测任务上取得较好的平衡效果。
5.3 训练参数
根据 train/config.py 与 train_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控制训练稳定性,防止无效长时间训练 - 保留训练全过程结果,便于后续分析损失收敛与指标变化
如果后续继续优化,可重点围绕以下方向深入:
- 提高输入尺寸以增强小目标检测能力
- 对异常标注与漏标数据进行清洗
- 对比不同规模模型,如
YOLOv8s、YOLOv8m - 引入更适合小目标的增强或特征融合策略
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
指标曲线图展示了:
PrecisionRecallmAP@0.5mAP@0.5:0.95
图的作用:
- 观察模型性能随 epoch 的提升过程
- 判断模型在何时趋于稳定
- 便于选择更合适的最佳权重与训练轮次
7.3 03_pr_trajectory.png
该图展示了训练过程中 Precision 与 Recall 的变化轨迹。
图的作用:
- 观察模型在"误检控制"和"漏检控制"之间的平衡变化
- 判断训练后期模型是否进入更优的 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. 系统集成设计说明
从工程实现角度看,本项目完成了深度学习模型到桌面应用系统的集成,主要体现在:
- 通过
ui/utils/detector.py对YOLOv8推理接口进行统一封装。 - 在图片、视频、摄像头三个场景中复用同一检测器,减少重复逻辑。
- 使用多线程处理推理任务,避免界面卡顿,提升交互体验。
- 使用
JSON持久化用户信息和检测历史,支撑完整业务流程。 - 通过训练结果 CSV 和 Matplotlib 生成训练分析页面,实现训练与应用的一体化展示。
这使项目不再只是单纯的模型训练代码,而是形成了相对完整的"数据集 + 模型 + 可视化 + 应用系统"的闭环。
10. 项目亮点
本项目的亮点主要体现在以下几个方面:
- 完整体现了深度学习项目从数据、训练、评估到部署展示的基本流程
- 数据集统计信息完整,能够支撑项目说明书与答辩展示
- 训练参数明确,训练过程可追踪、可复现
- 训练结果不仅保留原始 CSV,还生成了多种可视化图
- 桌面系统功能较完整,支持图片、视频、摄像头多种识别方式
- 项目内部大量使用相对路径与
Path管理,适应中文路径与跨目录移动场景















