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

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

本项目针对无人机航拍场景下的小目标检测问题,基于 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

AI 编程工具选型:Copilot、Cursor、Codex 核心差异

AI 编程工具选型:Copilot、Cursor、Codex 核心差异

【如文章引起大家共鸣,请“点赞”以及“转发”,以支持继续创作,谢谢大家!】 朋友们大家好!今天咱们不聊那些虚头巴脑的,直接来点实在的——AI编程工具选型,Copilot、Cursor、Codex这仨到底咋选?别急,我这就用最接地气的方式,给你唠唠它们的“脾气秉性”,保证你听完就能上手挑! 先说Copilot,这哥们儿可是“代码补全界的扛把子”!它就像你身边的“代码小秘书”,你敲代码时,它就在旁边默默观察,你刚敲个“for”,它立马给你补上“(int i=0;i<n;i++)”,那叫一个快!而且,它还支持多IDE,VS Code、JetBrains啥的,都能无缝对接。不过呢,Copilot也有个“小毛病”,就是它更擅长“补全”,对于复杂的代码重构或者项目级理解,就有点力不从心了。

By Ne0inhk
2026年高校AIGC检测新规解读:AI率多少算合格?

2026年高校AIGC检测新规解读:AI率多少算合格?

2026年高校AIGC检测新规解读:AI率多少算合格? 从2024年知网正式上线AIGC检测功能开始,短短两年时间,"AI率"已经从一个新鲜名词变成了每个毕业生必须面对的硬性指标。2026年,各高校的AIGC检测政策进一步收紧和细化,要求也越来越明确。 那么,2026年AI率到底多少才算合格?不同学校的标准差别大吗?不合格会面临什么后果?本文将对这些问题进行深入解读。 一、AIGC检测已成为毕业论文审查的标配 回顾AIGC检测在高校中的普及历程,可以用"指数级扩散"来形容: * 2024年:知网上线AIGC检测功能,少数985/211院校开始试点,大部分学校处于观望状态 * 2025年:超过60%的本科院校和80%的研究生培养单位将AIGC检测纳入论文审查流程 * 2026年:AIGC检测基本实现全覆盖,包括专科院校在内的绝大部分高等教育机构都已建立相关制度 这一进程的背后,是教育部在2025年初发布的《关于加强高等学校学位论文学术诚信管理的指导意见》,其中明确提到"鼓励各高校引入人工智能生成内容检测机制,将AIGC检测作为论文质量保障的重要环节"。 虽然教育部没

By Ne0inhk

OpenClaw之Memory配置成本地模式,Ubuntu+CUDA+cuDNN+llama.cpp

文章目录 * 背景:Memory不生效的问题 * OpenClaw的Memory配置 * Ubuntu24.04安装CUDA和cuDNN * 编译llama.cpp * 验证方案1: * 验证方案2:下载并运行Llama-2 7B模型 * 安装node-llama-cpp * 验证Memory * sqlite-vec unavailable * 踩过的坑 * 安装node-llama-cpp的一些提示 * 安装node-llama-cpp的前置条件 * Using `node-llama-cpp` With Vulkan 承接上文:Windows11基于WSL2首次运行Openclaw,并对接飞书应用,我已经在电脑上安装了OpenClaw,接下来解决Memory问题。走了很多弯路,下面主要讲我总结的正确的安装过程。 总结来说:针对Memory不生效的问题,又不想用OpenAI或Gemini,或者只想单纯的节省token,可以按照如下的方式,设置为local模式: * 修改openclaw.json配置 * 安装CUDA和cu

By Ne0inhk

Stable Diffusion v1-5-pruned.safetensors本地部署指南

Stable Diffusion v1-5-pruned.safetensors 本地部署与 LoRA 微调实战指南 在消费级 GPU 上跑通一个 AI 图像生成模型,曾经是件门槛极高的事。动辄几十 GB 的显存占用、复杂的环境配置、晦涩的训练脚本……这些都曾让许多创作者望而却步。但如今,随着 .safetensors 格式的普及和 LoRA 技术的成熟,我们已经可以在一张 RTX 3090 上,用不到 10GB 显存完成一次完整的风格微调。 这一切的核心起点,正是 Stable Diffusion v1-5-pruned.safetensors —— 这个名字看似冗长,实则浓缩了当前本地 AIGC 实践中最关键的技术组合:轻量化基础模型 + 安全权重格式 + 高效微调机制。 为什么选择 v1-5-pruned.safetensors? 当你打开 Hugging

By Ne0inhk