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

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

本项目针对无人机航拍场景下的小目标检测问题,基于 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英文名称中文名称
0pedestrian行人
1people人群
2bicycle自行车
3car小汽车
4van面包车
5truck卡车
6tricycle三轮车
7awning-tricycle带篷三轮车
8bus公交车
9motor摩托车

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 主要训练参数

参数默认值说明
--modelyolo11s模型:yolo11n/s/m/l/x
--epochs300训练轮数
--imgsz640输入图像尺寸(小目标建议 1280)
--batch16批大小
--lr00.01初始学习率
--lrf0.01最终学习率比例
--patience100Early stopping 等待轮数
--device""GPU 编号或 cpu
--workers4DataLoader 工作进程数
--projectruns/train实验保存目录
--nameyolo11_visdrone实验名称
--multi_scaleFalse多尺度训练
--copy_paste0.0Copy-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_threshold0.25置信度阈值
iou_threshold0.70NMS IoU 阈值
max_det300单张图像最大检测数量

五、可视化图含义

训练完成后,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.pngF1 分数–置信度曲线
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} } 

十、相关链接

Read more

2026年3月AI最新动态:Google发布划时代嵌入模型,MuleRun重新定义个人AI

AI领域又双叒叕出大新闻了!3月中旬,Google发布了Gemini Embedding 2,实现了文本、图片、视频、音频、PDF五种模态的统一向量空间;同一天,国内MuleRun(骡子快跑)产品上线,主打"自进化"个人AI助手。这两件事都足够重磅,今天来详细聊聊。 一、Google发布Gemini Embedding 2:AI基础设施的重大升级 1.1 嵌入模型为什么重要? 先简单科普一下嵌入模型(Embedding Model)。如果你用过ChatGPT、文心一言等大模型,你可能遇到过这个问题:大模型的知识有截止日期,而且它不认识你公司内部的文档。 RAG(检索增强生成)就是为了解决这个问题——先从你的知识库里检索最相关的内容,再把这些内容丢给大模型,让它基于真实信息来回答。 而检索的质量,几乎完全取决于嵌入模型。嵌入模型做的事情很简单:把一段内容(文字、图片、视频…

【AI Coding 系列】——什么是AI Coding,怎么合理使用AI Coding,大模型上下文限制解决方案,任务拆解策略

【AI Coding 系列】——什么是AI Coding,怎么合理使用AI Coding,大模型上下文限制解决方案,任务拆解策略

AI Coding 并非简单的"让 AI 写代码",而是一种使用大型语言模型(LLM)为核心驱动力的新型软件编程方式。要求开发者不仅要理解编程语言,更要掌握模型边界感知、上下文工程、认知负载管理等新兴技能。 随着 Claude、GPT-4、Kimi 等模型的能力跃升,我们正从"AI 辅助编码"(Copilot 模式)变成"AI 主导架构,开发人员主导决策"的代理编程(Agentic Coding)。这一转变要求建立全新的工作流、质量控制体系和知识管理方法。 第一部分:核心概念、认知框架——小白扫盲(可直接看第二部分) 1.1 模型边界感知 AI Coding 的首要原则是清醒认知模型的能力边界。就是我们蒸米饭加多少水类似,

HexStrike AI:全自动渗透测试助手部署与配置全指南

HexStrike AI:全自动渗透测试助手部署与配置全指南 HexStrike AI 是一款革命性的、由人工智能驱动的进攻性安全框架。它基于 Model Context Protocol (MCP) 协议构建,充当了大语言模型(如 Claude、GPT、Copilot)与 150 多种专业网络安全工具之间的桥梁。通过该框架,AI 智能体能够自主执行从网络扫描、漏洞挖掘到复杂攻击链构建的全流程自动化渗透测试。 一、 项目核心概览 1. 核心特性 * 庞大工具库:集成 150+ 顶级安全工具,覆盖 Web 安全、二进制分析、密码破解等 35+ 攻击类别。 * 多智能体架构:内置 12+ 专业 AI 智能体(如漏洞情报分析、攻击链发现、参数优化等)协同工作。

【前沿解析】2026年3月15日:微软BitNet.cpp突破AI推理硬件枷锁——单CPU运行100B大模型,无损推理与能耗双重革新

摘要:本文深入解析微软2026年3月12日发布的BitNet.cpp开源框架,该框架首次实现单CPU流畅运行100B参数大模型,支持CPU/GPU无损推理,ARM/x86平台推理速度提升2.37-6.17倍,能耗降低71.9%-82.2%。文章涵盖1.58位量化原理、训练适配策略、系统架构设计,并提供完整的Go/Python代码示例与性能优化方案,为开发者提供全面的AI轻量化推理技术参考。 关键词:BitNet.cpp、1-bit量化、AI推理轻量化、边缘AI、CPU推理、无损推理、能耗优化 一、引言:AI推理的硬件革命与普惠化浪潮 2026年3月,全球人工智能领域迎来密集技术爆发期。从英伟达宣布未来5年投入260亿美元推进开源AI大模型研发,到特斯拉Optimus 3人形机器人夏季量产计划,再到AWE2026集中展示的AI烹饪眼镜、具身智能机器人等终端创新,AI技术正以前所未有的速度从云端走向边缘、从虚拟融入物理。然而,在众多突破中,微软于3月12日开源的BitNet.cpp框架尤为值得关注——它通过革命性的1.58位量化方案,首次让普通电脑CPU能够流畅运行百亿