基于深度学习的无人机航拍小目标检测算法研究
一种基于 YOLO11 深度学习框架的无人机航拍小目标检测系统。项目使用 VisDrone 2019 数据集进行训练,针对行人、车辆等 10 类交通目标进行检测。内容涵盖数据集特点、训练脚本与参数配置、可视化指标分析以及基于 PyQt6 开发的桌面应用功能。系统支持图片、视频及摄像头实时检测,并提供模型管理与历史记录导出功能,适用于无人机视角下的密集小目标识别场景。

一种基于 YOLO11 深度学习框架的无人机航拍小目标检测系统。项目使用 VisDrone 2019 数据集进行训练,针对行人、车辆等 10 类交通目标进行检测。内容涵盖数据集特点、训练脚本与参数配置、可视化指标分析以及基于 PyQt6 开发的桌面应用功能。系统支持图片、视频及摄像头实时检测,并提供模型管理与历史记录导出功能,适用于无人机视角下的密集小目标识别场景。

本项目针对无人机航拍场景下的小目标检测问题,基于 YOLO11 系列模型,在 VisDrone 2019 数据集上进行训练与优化,并提供了完整的检测系统桌面应用,支持图片、视频、摄像头的实时检测与训练指标可视化。
无人机航拍图像具有目标尺度小、密集分布、多尺度混合等特点,传统检测算法难以取得理想效果。本项目采用 Ultralytics YOLO11 框架,结合 VisDrone 数据集进行训练,实现了对行人、车辆等 10 类交通相关目标的高效检测,并配套开发了基于 PyQt6 的桌面应用,便于模型验证与日常使用。
本项目使用 VisDrone 2019-DET 数据集,由天津大学机器学习与数据挖掘实验室 AISKYEYE 团队发布,对应 ICCV 2019 "Vision Meets Drone" 挑战赛,是面向无人机视角目标检测的大规模基准数据集。
| 子集 | 图像数量 | 说明 |
|---|---|---|
| 训练集 (train) | 6,471 张 | 用于模型训练 |
| 验证集 (val) | 548 张 | 用于超参数调优与模型选择 |
| 测试集 (test-dev) | 1,610 张 | 含标注,可进行论文实验与结果发布 |
数据集包含 10 个预定义类别:
| 类别 ID | 英文名称 | 中文名称 |
|---|---|---|
| 0 | pedestrian | 行人 |
| 1 | people | 人群 |
| 2 | bicycle | 自行车 |
| 3 | car | 小汽车 |
| 4 | van | 面包车 |
| 5 | truck | 卡车 |
| 6 | tricycle | 三轮车 |
| 7 | awning-tricycle | 带篷三轮车 |
| 8 | bus | 公交车 |
| 9 | motor | 摩托车 |
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/
采用 YOLO 标准格式,每行一个目标:<class_id> <x_center> <y_center> <width> <height>,坐标均为归一化值 [0, 1]。
训练脚本为项目根目录下的 train_yolo11.py,支持三种运行模式:
dataset_visdrone/data.yaml 是否存在fix_data_yaml() 自动生成 data_local.yaml(含本机绝对路径)runs/train/<实验名称>/ 或 --project 指定目录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
--multi_scale 多尺度训练提升小目标性能| 参数 | 默认值 | 说明 |
|---|---|---|
--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 数据增强概率 |
| 参数 | 默认值 | 说明 |
|---|---|---|
conf_threshold | 0.25 | 置信度阈值 |
iou_threshold | 0.70 | NMS IoU 阈值 |
max_det | 300 | 单张图像最大检测数量 |
训练完成后,Ultralytics 会在实验目录下生成以下可视化文件,用于分析模型表现:
| 文件 | 含义 |
|---|---|
results.csv | 每 epoch 的损失与指标(训练/验证 loss、mAP、精确率、召回率等) |
results.png | 训练曲线概览,包含损失、mAP、学习率等随 epoch 变化 |
train_batch*.jpg | 训练 batch 样本可视化,展示数据增强后的输入图像与标签 |
val_batch*_labels.jpg | 验证 batch 的标签可视化 |
val_batch*_pred.jpg | 验证 batch 的预测结果可视化 |
| 文件 | 含义 |
|---|---|
labels.jpg | 标签分布图,展示各类别目标在图像中的位置与数量分布 |
labels_correlogram.jpg | 标签关联图,展示类别间相关性 |
| 文件 | 含义 |
|---|---|
confusion_matrix_normalized.png | 归一化混淆矩阵,展示各类别的预测与真实标签对应关系 |
P_curve.png | 精确率–置信度曲线,随置信度阈值变化的精确率 |
R_curve.png | 召回率–置信度曲线,随置信度阈值变化的召回率 |
F1_curve.png | F1 分数–置信度曲线 |
PR_curve.png | 精确率–召回率曲线(PR 曲线) |
epoch、time、train/box_loss、train/cls_loss、train/dfl_loss、metrics/precision(B)、metrics/recall(B)、metrics/mAP50(B)、metrics/mAP50-95(B)、val/box_loss、val/cls_loss、val/dfl_loss、lr/pg0、lr/pg1、lr/pg2
本项目提供基于 PyQt6 的桌面应用 「无人机航拍小目标检测系统」,主要功能如下:
| 模块 | 功能说明 |
|---|---|
| 图片识别 | 支持 JPG/PNG/BMP 等格式,上传图片后点击开始检测,支持拖拽导入,可导出检测结果图片与 CSV |
| 视频识别 | 支持 MP4/AVI/MOV 等格式,加载视频后逐帧检测,显示进度 |
| 摄像头识别 | 实时调用本地摄像头进行目标检测 |
| 检测历史 | 查看所有历史检测记录,支持筛选与导出 |
| 模型管理 | 管理检测模型文件路径,调整置信度、IoU 阈值等检测参数,验证模型加载 |
| 指标展示 | 展示模型训练过程的各项可视化指标,包括训练曲线、指标汇总、可视化图表 |
detection_app/main.py,启动后进入登录窗口utils/detector.py 中的 ImageDetectWorker、VideoDetectWorker、CameraDetectWorker 调用 Ultralytics YOLO 进行推理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 |
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}
}

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online