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

本项目是一套基于 YOLOv8 的无人机识别与检测系统,以 Anti-UAV 无人机目标检测数据集 为基础,完成数据组织、模型训练、结果评估与系统集成。系统提供 PyQt6 桌面端和 Web 端,支持图片识别、批量检测、视频识别、摄像头采样检测、模型管理、训练指标展示和检测历史查询,适用于计算机专业项目设计、课程实践与答辩展示。

一、项目简介

项目面向低空无人机目标检测场景,主要处理无人机目标较小、背景复杂、图像分辨率差异较大等问题,使用 Ultralytics YOLOv8 框架完成模型训练与推理。

整个项目包含以下几个部分:

  • 数据集整理:按 YOLO 格式组织无人机图像与边界框标注,划分训练集、验证集和测试集。
  • 模型训练:加载 YOLOv8n 预训练权重,在无人机数据上进行迁移学习。
  • 实验分析:保留逐轮训练日志,分析损失、Precision、Recall 和 mAP 等指标。
  • 系统应用:通过桌面端与浏览器界面完成检测、结果查看、历史查询和文件导出。

项目既包含模型训练代码和已有训练产物,也提供可直接操作的检测系统,便于结合实验数据与实际界面介绍完整实现过程。

二、系统功能设计

2.1 登录与注册

系统提供登录与注册入口。Web 端按账号保存会话、任务和检测记录,左侧侧栏集中放置图片、视频、摄像头、批量检测、任务管理、历史、模型和指标入口。

2.2 图片识别与目标放大

上传单张图片后,系统显示标注结果、目标数量、置信度和实际推理耗时,并列出目标框明细。使用者可以对照原图查看预测位置,点击目标后放大对应的原始区域,检查远距离无人机的局部特征。

2.3 批量检测

批量模块单次最多处理 50 张图片,可以逐图查看结果,汇总检测数量并下载结果包。任务交由后台队列处理,页面显示进度及运行状态,支持取消。

2.4 视频与摄像头识别

视频模块按设定间隔采样画面并调用模型,展示处理进度,生成标注视频和检测明细。摄像头模块通过浏览器获取画面,支持启动、停止和快照保存,停止时释放设备资源。

下图为数据集图片序列的视频功能演示。视频中的累计检出次数按采样帧累加,同一无人机在多帧出现时会重复计数。

2.5 任务管理

任务中心将排队、处理中、已完成、已取消、失败和已中断等状态集中呈现。可以按输入类型、任务状态和关键词查询,进入详情查看输入与输出,下载已完成任务的结果包。

2.6 模型与参数管理

模型页面提供当前项目的 best.pt 和 last.pt,显示权重大小、模型类别及推理设备,并支持调整置信度阈值、IoU 阈值和最大检测数量。

模型加载通过后再替换当前模型,切换失败时保留原可用权重。推理优先使用 GPU,GPU 推理失败时可以切换到 CPU。

2.7 训练指标与历史查询

训练指标页面读取真实日志,展示峰值、对应轮次、末轮结果和交互曲线,并支持导出训练数据 CSV。

检测历史按当前账号查询,支持类型、状态和文件名或任务编号筛选。每条记录保留输入来源、任务参数和结果信息,方便回查检测过程。

三、技术栈

类别 技术及用途
编程语言 Python、JavaScript
深度学习 PyTorch、Ultralytics YOLOv8
检测模型 YOLOv8n,单类别无人机目标检测
桌面界面 PyQt6
Web 后端 FastAPI
Web 前端 HTML、CSS、JavaScript
图像与视频处理 OpenCV、FFmpeg
数据处理与离线绘图 NumPy、Pandas、Matplotlib
Web 图表与局部放大 Canvas
配置管理 PyYAML
数据存储 Web 端使用 SQLite;桌面端使用 JSON

四、项目结构

训练、可视化、桌面界面和 Web 应用分别组织,核心目录如下:

text 复制代码
c162/
├─ app.py                       # 桌面端入口
├─ train.py                     # 模型训练入口
├─ visualize.py                 # 离线图表生成入口
├─ Anti-UAV/
│  ├─ data.yaml                 # 数据集配置
│  ├─ images/train、val、test/   # 图像
│  └─ labels/train、val、test/   # YOLO 标注
├─ train/
│  ├─ config.py                 # 训练参数
│  └─ trainer.py                # 训练流程封装
├─ train_result/exp/
│  ├─ args.yaml                 # 训练参数记录
│  ├─ results.csv               # 逐轮训练日志
│  ├─ weights/                  # best.pt、last.pt
│  └─ charts/                   # 离线分析图表
├─ ui/                          # PyQt6 界面与工具模块
├─ visualize/                   # 离线绘图配置与实现
└─ web/
   ├─ run.py                    # Web 启动入口
   ├─ backend/
   │  ├─ app.py                 # 接口与账号认证
   │  ├─ detector.py            # 模型加载与推理
   │  ├─ jobs.py                # 后台任务与结果导出
   │  ├─ metrics.py             # 训练日志与数据统计
   │  └─ store.py               # 账号、任务和会话存储
   ├─ frontend/                # 功能页面、样式与交互
   └─ data/                    # Web 独立数据目录

其中,训练入口负责生成模型和日志,推理模块负责读取权重并输出目标框,界面负责输入、展示和交互。Web 端的账号与历史单独保存,便于与桌面端分别使用。

五、数据集说明

5.1 数据集与检测任务

本项目使用 Anti-UAV 无人机检测数据,按 YOLO 目标检测格式存放,包含一个检测类别:

类别编号 类别名称 中文含义
0 UAV 无人机

模型需要判断图像中是否存在无人机,并输出目标位置及对应置信度。数据中包含天空、城市、复杂地物等背景,适合观察小目标、远距离目标和不同尺度下的检测表现。

5.2 数据规模与划分

以下数据来自当前项目目录的实际统计:

数据划分 图像数量 标注文件数量 原始标注框数
训练集 5,200 5,197 5,243
验证集 2,600 2,600 2,621
测试集 2,200 2,200 2,245
合计 10,000 9,997 10,109

当前项目的训练、验证和测试图像占比分别为 52%、26% 和 22%。

5.3 标注格式

每张图像对应同名的 TXT 标注文件,每行记录一个目标:

text 复制代码
class_id center_x center_y width height

其中,class_id 固定为 0,中心点坐标和宽高使用归一化值。图像和标注分别存放在 images 与 labels 下,再按 train、val、test 划分。

上图展示训练集的类别数量、标注框形状、目标中心位置与宽高分布,来自训练目录保留的原始图像。图中的 5,243 对应训练集标注框数,整套数据的规模见上表。

六、模型训练过程

6.1 训练流程

训练由 train.py 和 train/trainer.py 组织,主要步骤如下:

  1. 读取训练参数和 Anti-UAV/data.yaml。
  2. 根据当前项目位置生成临时数据配置,修正数据集根路径。
  3. 加载 yolov8n.pt 预训练权重。
  4. 调用 Ultralytics 的 YOLO.train() 进行训练。
  5. 将权重、训练参数与逐轮日志保存到 train_result/exp/。
  6. 根据训练日志生成分析图表,并在系统中展示。

6.2 模型与训练参数

本项目使用 YOLOv8n 作为基础模型,在预训练权重上学习无人机这一目标类别。本次训练实际完成 100 轮 ,日志记录的训练耗时约 4,662.13 秒,即 77.7 分钟。

参数 本次配置
基础模型 YOLOv8n
训练轮数 100
输入尺寸 640 × 640
Batch Size 16
DataLoader Workers 4
优化器配置 auto
Early Stopping Patience 50
预热轮数 3
Mosaic 1.0
关闭 Mosaic 最后 10 轮
水平翻转概率 0.5
随机平移 / 缩放 0.1 / 0.5

训练同时使用 HSV 色彩扰动、随机平移、随机缩放与水平翻转等数据增强。原始配置中的 lr0=0.01 是传入参数;由于优化器配置为 auto,实际学习率变化以日志中的 lr/pg* 列为准。

6.3 训练产物

训练完成后,项目保留以下主要文件:

  • best.pt:训练流程保存的最佳权重。
  • last.pt:最后一轮权重。
  • args.yaml:本次训练的参数记录。
  • results.csv:每一轮的损失、检测指标、学习率和耗时。
  • charts/:依据日志生成的离线分析图。

七、训练结果与核心指标

7.1 最后一轮验证指标

根据 train_result/exp/results.csv,第 100 轮的结果如下:

指标 日志数值 百分比
Precision 0.96405 96.405%
Recall 0.83904 83.904%
mAP@0.5 0.89352 89.352%
mAP@0.5:0.95 0.58134 58.134%

同一轮的训练 Box Loss 为 0.92121 ,验证 Box Loss 为 1.33606。

7.2 各项指标的最高值

各项峰值的出现轮次并不相同:

指标 最高值 对应轮次
Precision 0.96436 第 65 轮
Recall 0.85120 第 78 轮
mAP@0.5 0.89457 第 86 轮
mAP@0.5:0.95 0.58203 第 89 轮

这张表用于查看单项指标的峰值;上面的末轮表用于查看同一轮完整结果,两者分别呈现。

7.3 结果分析

末轮 Precision 高于 Recall,说明当前模型在检出结果的可靠性方面表现较好,仍有进一步减少漏检的空间。mAP@0.5:0.95 低于 mAP@0.5,则反映出在更严格的定位标准下,目标框精度仍可继续优化。

后续实验可以围绕异常标注清理、输入分辨率、模型规模和小目标特征表达等方向开展对照,结合相同数据划分比较结果。

八、可视化图表说明

以下图片直接选用项目 train_result/exp/charts/ 中已有的训练产物,保留原始曲线和数值。

8.1 训练与验证损失

Box Loss、Class Loss 和 DFL Loss 分别反映目标框回归、类别判断和边界框分布学习的变化。训练与验证曲线共同展示模型在 100 轮训练中的收敛过程。

8.2 检测指标变化

Precision、Recall、mAP@0.5 与 mAP@0.5:0.95 随训练逐渐提升并趋于稳定,图中标出了各项指标的最高值及对应轮次。各项峰值与第七节的日志统计一致。

8.3 Precision--Recall 训练轨迹

每个点对应一轮训练的 Precision 和 Recall,颜色表示训练轮次,起点与终点标出了训练过程中的指标变化。该图是跨训练轮次的 P-R 轨迹,阅读时应区别于固定模型在不同置信度阈值下得到的标准 PR 曲线。

8.4 学习率变化

学习率图反映日志中各参数组的实际调度过程,可以观察预热与后续衰减。实际数值以 CSV 的 lr/pg* 列为准。

8.5 训练结果总览

综合图将损失、学习率、检测指标、P-R 轨迹和指标表集中展示,方便整体回看本次实验。系统中的训练指标页面读取同一份日志,支持逐轮读数与 CSV 导出。

本项目为个人原创项目,配套源码、模型权重、训练资料和项目说明,可用于毕业设计、课程实践、简历展示及个人学习。有项目成品或定制需求,可以通过主页联系作者。

相关推荐
田里的水稻1 小时前
FA_CNN卷积神经网络四---线性层及其拉平PyTorch
人工智能·pytorch·python·深度学习·神经网络·cnn
网易易盾1 小时前
直播话术合规改造:六类违规表述判定与改写规则
大数据·人工智能·安全
碧海银沙音频科技研究院1 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
墨林陌1 小时前
AI 热点日报(2026-10-22):英伟达GTC柏林发布Vera Rubin与AI工厂,科大讯飞1024开发者节开幕
人工智能
axe_hu1 小时前
AI产品经理需要具备哪些能力?
人工智能·产品经理
有Li1 小时前
基于超高分辨率CT智能分割与测量的单侧梅尼埃病内耳解剖特征定量研究文献速递/医学智能体前沿
大数据·人工智能·学习·文献·医学生
挖掘狂人1 小时前
1024程序员节:AI时代,为什么我们依然需要程序员
人工智能·程序员·ai编程
云淡风轻~窗明几净1 小时前
角谷猜想与百度AI的对话dialog(原始稿)
人工智能·算法·机器学习·图论