基于深度学习的无人机航拍小目标检测算法研究

本项目针对无人机航拍场景下的小目标检测问题,基于 YOLO11 系列模型,在 VisDrone 2019 数据集上进行训练与优化,并提供了完整的检测系统桌面应用,支持图片、视频、摄像头的实时检测与训练指标可视化。


一、项目概述

无人机航拍图像具有目标尺度小、密集分布、多尺度混合等特点,传统检测算法难以取得理想效果。本项目采用 Ultralytics YOLO11 框架,结合 VisDrone 数据集进行训练,实现了对行人、车辆等 10 类交通相关目标的高效检测,并配套开发了基于 PyQt6 的桌面应用,便于模型验证与日常使用。


二、数据集

2.1 数据集简介

本项目使用 VisDrone 2019-DET 数据集,由天津大学机器学习与数据挖掘实验室 AISKYEYE 团队发布,对应 ICCV 2019 "Vision Meets Drone" 挑战赛,是面向无人机视角目标检测的大规模基准数据集。

2.2 数据规模

子集 图像数量 说明
训练集 (train) 6,471 张 用于模型训练
验证集 (val) 548 张 用于超参数调优与模型选择
测试集 (test-dev) 1,610 张 含标注,可进行论文实验与结果发布
  • 总标注框数量:超过 260 万个边界框
  • 图像来源:288 个视频片段 + 10,209 张静态图像
  • 图像格式:JPEG (.jpg)

2.3 目标类别

数据集包含 10 个预定义类别

类别ID 英文名称 中文名称
0 pedestrian 行人
1 people 人群
2 bicycle 自行车
3 car 小汽车
4 van 面包车
5 truck 卡车
6 tricycle 三轮车
7 awning-tricycle 带篷三轮车
8 bus 公交车
9 motor 摩托车

2.4 数据集特点

  • 地理位置:中国 14 个不同城市,相距数千公里
  • 场景类型:城市、乡村等多种环境
  • 小目标特性:无人机航拍高度较高,目标在图像中占据像素较少,大量目标归一化后宽度或高度小于 2%
  • 密集分布:交通路口、人行道等场景中目标密集,遮挡严重
  • 多尺度混合:同一张图像中存在近大远小现象

2.5 目录结构

复制代码
dataset_visdrone/
├── data.yaml                    # YOLO 数据集配置文件
├── data_local.yaml              # 自动生成,含本机绝对路径
├── 数据集介绍.md                # 数据集说明文档
├── VisDrone2019-DET-train/
│   ├── images/                  # 训练图像
│   └── labels/                  # YOLO 格式标签 (.txt)
├── VisDrone2019-DET-val/
│   ├── images/
│   └── labels/
└── VisDrone2019-DET-test-dev/
    ├── images/
    └── labels/

2.6 标注格式

采用 YOLO 标准格式 ,每行一个目标:<class_id> <x_center> <y_center> <width> <height>,坐标均为归一化值 [0, 1]。


三、训练过程

3.1 训练脚本

训练脚本为项目根目录下的 train_yolo11.py,支持三种运行模式:

  • train:训练模式(默认)
  • val:验证模式,需指定权重路径
  • predict:推理模式,需指定权重与输入路径

3.2 基本流程

  1. 检查 dataset_visdrone/data.yaml 是否存在
  2. 调用 fix_data_yaml() 自动生成 data_local.yaml(含本机绝对路径)
  3. 加载 YOLO 预训练模型
  4. 调用 Ultralytics 训练流程进行训练
  5. 结果保存在 runs/train/<实验名称>/--project 指定目录

3.3 使用示例

复制代码
python train_yolo11.py                    # 默认配置训练
python train_yolo11.py --model yolo11m   # 指定模型大小
python train_yolo11.py --epochs 200      # 指定训练轮数
python train_yolo11.py --imgsz 1280      # 更大分辨率(小目标更佳)
python train_yolo11.py --multi_scale     # 开启多尺度训练
python train_yolo11.py --mode val --weights runs/train/exp/weights/best.pt
python train_yolo11.py --mode predict --weights runs/train/exp/weights/best.pt --source path/to/image

3.4 训练注意事项

  • 图像尺寸建议 ≥ 640,推荐 1280(小目标分辨率更高)
  • batch 建议 16--32(显存不足时降低)
  • epochs 建议 200--300(VisDrone 收敛较慢)
  • 默认开启 mosaic 数据增强,最后 10 个 epoch 关闭以稳定收敛
  • 可使用 --multi_scale 多尺度训练提升小目标性能

四、训练参数

4.1 主要训练参数

参数 默认值 说明
--model yolo11s 模型:yolo11n/s/m/l/x
--epochs 300 训练轮数
--imgsz 640 输入图像尺寸(小目标建议 1280)
--batch 16 批大小
--lr0 0.01 初始学习率
--lrf 0.01 最终学习率比例
--patience 100 Early stopping 等待轮数
--device "" GPU 编号或 cpu
--workers 4 DataLoader 工作进程数
--project runs/train 实验保存目录
--name yolo11_visdrone 实验名称
--multi_scale False 多尺度训练
--copy_paste 0.0 Copy-paste 数据增强概率

4.2 模型与优化器

  • 优化器:SGD
  • 损失权重:box=7.5, cls=0.5, dfl=1.5
  • 数据增强:mosaic=1.0, randaugment, erasing=0.4, close_mosaic=10

4.3 检测参数(应用配置)

参数 默认值 说明
conf_threshold 0.25 置信度阈值
iou_threshold 0.70 NMS IoU 阈值
max_det 300 单张图像最大检测数量

五、可视化图含义

训练完成后,Ultralytics 会在实验目录下生成以下可视化文件,用于分析模型表现:

5.1 训练过程图表

文件 含义
results.csv 每 epoch 的损失与指标(训练/验证 loss、mAP、精确率、召回率等)
results.png 训练曲线概览,包含损失、mAP、学习率等随 epoch 变化
train_batch*.jpg 训练 batch 样本可视化,展示数据增强后的输入图像与标签
val_batch*_labels.jpg 验证 batch 的标签可视化
val_batch*_pred.jpg 验证 batch 的预测结果可视化

5.2 标签与类别分析

文件 含义
labels.jpg 标签分布图,展示各类别目标在图像中的位置与数量分布
labels_correlogram.jpg 标签关联图,展示类别间相关性

5.3 评估指标曲线

文件 含义
confusion_matrix_normalized.png 归一化混淆矩阵,展示各类别的预测与真实标签对应关系
P_curve.png 精确率--置信度曲线,随置信度阈值变化的精确率
R_curve.png 召回率--置信度曲线,随置信度阈值变化的召回率
F1_curve.png F1 分数--置信度曲线
PR_curve.png 精确率--召回率曲线(PR 曲线)

5.4 results.csv 主要列说明

epochtimetrain/box_losstrain/cls_losstrain/dfl_lossmetrics/precision(B)metrics/recall(B)metrics/mAP50(B)metrics/mAP50-95(B)val/box_lossval/cls_lossval/dfl_losslr/pg0lr/pg1lr/pg2


六、系统功能

本项目提供基于 PyQt6 的桌面应用 「无人机航拍小目标检测系统」,主要功能如下:

6.1 功能模块

模块 功能说明
图片识别 支持 JPG/PNG/BMP 等格式,上传图片后点击开始检测,支持拖拽导入,可导出检测结果图片与 CSV
视频识别 支持 MP4/AVI/MOV 等格式,加载视频后逐帧检测,显示进度
摄像头识别 实时调用本地摄像头进行目标检测
检测历史 查看所有历史检测记录,支持筛选与导出
模型管理 管理检测模型文件路径,调整置信度、IoU 阈值等检测参数,验证模型加载
指标展示 展示模型训练过程的各项可视化指标,包括训练曲线、指标汇总、可视化图表

6.2 入口与流程

  • 入口detection_app/main.py,启动后进入登录窗口
  • 默认账号:admin / admin123
  • 检测流程 :通过 utils/detector.py 中的 ImageDetectWorkerVideoDetectWorkerCameraDetectWorker 调用 Ultralytics YOLO 进行推理

6.3 配置与存储

  • config.json:模型路径、指标目录、检测参数等
  • data/users.json:用户信息
  • data/history.json:检测历史记录

七、项目技术栈

类别 技术
GUI 框架 PyQt6
深度学习框架 Ultralytics (YOLO11)
检测模型 YOLO11s + EMBSFPN + TADDH + C3K2 + PMSFA(改进模型)
后端 PyTorch (ultralytics)
图像处理 OpenCV, Pillow
可视化 matplotlib, pandas
数据处理 numpy, pandas

依赖包(detection_app/requirements.txt)

复制代码
PyQt6>=6.4.0
ultralytics>=8.0.0
opencv-python>=4.7.0
Pillow>=9.0.0
matplotlib>=3.7.0
numpy>=1.23.0
pandas>=1.5.0

训练脚本还需:pyyaml


八、项目结构

复制代码
c124/
├── train_yolo11.py              # YOLO11 训练脚本
├── README.md                    # 项目说明文档
│
├── dataset_visdrone/            # 数据集目录
│   ├── data.yaml                # 数据集配置
│   ├── data_local.yaml          # 自动生成(本机路径)
│   ├── 数据集介绍.md            # 数据集说明
│   ├── VisDrone2019-DET-train/
│   ├── VisDrone2019-DET-val/
│   └── VisDrone2019-DET-test-dev/
│
├── detection_app/               # 检测系统应用
│   ├── main.py                  # 应用入口
│   ├── login_window.py          # 登录窗口
│   ├── main_window.py           # 主窗口
│   ├── config.json              # 应用配置
│   ├── requirements.txt         # 依赖列表
│   ├── data/
│   │   ├── users.json           # 用户数据
│   │   └── history.json         # 检测历史
│   ├── pages/
│   │   ├── image_page.py        # 图片识别页
│   │   ├── video_page.py       # 视频识别页
│   │   ├── camera_page.py      # 摄像头识别页
│   │   ├── history_page.py     # 检测历史页
│   │   ├── model_page.py       # 模型管理页
│   │   └── metrics_page.py     # 指标展示页
│   └── utils/
│       ├── detector.py          # 检测逻辑
│       ├── storage.py           # 配置与存储
│       └── styles.py            # 界面样式
│
├── 训练文件1/                    # 训练输出示例
│   └── exp-yolo11s-EMBSFPN-TADDH-C3K2_PMSFA/
│       ├── args.yaml            # 训练参数快照
│       ├── results.csv          # 训练指标
│       ├── results.png          # 训练曲线
│       ├── weights/
│       │   ├── best.pt          # 最佳权重
│       │   └── last.pt          # 最后一轮权重
│       └── 其他可视化图表...
│
└── runs/                        # 训练输出目录(默认)
    └── detect/runs/train/yolo11_visdrone/

九、参考文献

如在论文中使用 VisDrone 数据集,建议引用:

复制代码
@article{zhu2021detection,
  title={Detection and tracking meet drones challenge},
  author={Zhu, Pengfei and Wen, Longyin and Du, Dawei and Bian, Xiao and Fan, Heng and Hu, Qinghua and Ling, Haibin},
  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
  volume={44},
  number={11},
  pages={7380--7399},
  year={2021},
  publisher={IEEE}
}

十、相关链接

相关推荐
木枷3 小时前
Training Software Engineering Agents and Verifiers with SWE-Gym
人工智能·软件工程
jz_ddk8 小时前
[数学基础] 浅尝向量与张量
人工智能·机器学习·向量·张量
孔明兴汉9 小时前
大模型 ai coding 比较
人工智能
IT研究所10 小时前
IT 资产管理 (ITAM) 与 ITSM 协同实践:构建从资产到服务的闭环管理体系
大数据·运维·人工智能·科技·安全·低代码·自动化
沐曦股份MetaX11 小时前
基于内生复杂性的类脑脉冲大模型“瞬悉1.0”问世
人工智能·开源
power 雀儿11 小时前
张量基本运算
人工智能
陈天伟教授11 小时前
人工智能应用- 人工智能交叉:01. 破解蛋白质结构之谜
人工智能·神经网络·算法·机器学习·推荐算法
政安晨12 小时前
政安晨【人工智能项目随笔】使用OpenClaw的主节点协同子节点撰写大型技术前沿论文的实战指南
人工智能·ai agent·openclaw论文写作·openclaw论文写作经验·ai代理写论文·ai分布式协作·oepnclaw应用
大成京牌12 小时前
2026年京牌政策深度对比,三款优质车型选购推荐榜单探索
人工智能