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

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

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

深入解析 Rust + LLM 开发:手把手教你写一个 AI 运维助手

深入解析 Rust + LLM 开发:手把手教你写一个 AI 运维助手

目录 * 摘要 * 第一章:Linux 环境下的 Rust 开发生态构建 * 1.1 构建工具链与系统依赖安装 * 1.2 Rust 工具链(Toolchain)的部署 * 1.3 环境变量配置与验证 * 第二章:蓝耘 MAAS 平台接入与资源配置 * 2.1 获取 API 凭证 * 2.2 模型选型与端点配置 * 第三章:Rust 项目架构设计与依赖管理 * 3.1 依赖库(Crates)深度解析 * 第四章:核心模块实现原理 * 4.1 AI 客户端模块 (ai_client.rs) * 4.2

By Ne0inhk

为OpenClaw构建双层记忆系统:QMD + Mem0的混合架构实战

# 引言 作为一名重度使用AI助手的开发者,我一直面临一个核心问题:**如何让AI真正"记住"知识,而不是每次对话都从零开始?** 传统的云端记忆方案虽然强大,但存在几个痛点: - API调用成本和延迟 - 搜索实时性不足 - 缺乏对本地工作区文档的快速检索能力 今天,我为OpenClaw(一个开源AI Agent系统)构建了一个**本地+云端混合的双层记忆架构**,实现了毫秒级本地检索与深度语义理解的完美结合。 --- ## 第一部分:QMD本地搜索的Windows集成之旅 ### 初始尝试 QMD是一个本地文档搜索引擎,支持BM25关键词搜索和语义向量搜索。它使用SQLite存储索引,理论上非常适合作为本地记忆底层。 安装过程看起来很简单: ```bash bun install -g github:tobi/qmd bunx tsx src/qmd.ts --help ``` ### Windows噩梦:better-sqlite3编译失败 问题来了:

By Ne0inhk
企业级部署升级:Nginx 反向代理 + ELK 日志监控,让成绩预测平台稳定可追溯

企业级部署升级:Nginx 反向代理 + ELK 日志监控,让成绩预测平台稳定可追溯

⭐️个人主页:秋邱-ZEEKLOG博客 📚所属栏目:python 前言 上一期的 Docker+Linux 部署,让成绩预测平台实现了局域网共享,但真正落地到团队 / 学校使用,还缺两个关键支撑:访问体验不够专业(IP + 端口难记、无加密),运维排查全靠 “猜”(日志分散、无监控)。 这一期,我们跳出 “步骤式部署” 的框架,以 “问题驱动 + 场景落地” 为核心,先拆解企业级部署的核心诉求,再分模块实现 Nginx 域名化改造和 ELK 日志监控,最后通过实战验收和运维手册,让你既能搞定部署,又能轻松应对后续运维问题,全程聚焦 “实用、稳定、可追溯”。 一、企业级部署的 3 个核心诉求(先明确目标再动手) 为什么互联网公司都在用 “Nginx+ELK”

By Ne0inhk
周红伟:独家揭秘,DeepSeek-V4 深度技术报告:原生多模态架构

周红伟:独家揭秘,DeepSeek-V4 深度技术报告:原生多模态架构

报告编号:DTR-2025-V4-001 发布日期:2024年5月23日 撰写机构:AI架构实验室 / 独立技术分析组 字数统计:约 5200 字 1. 执行摘要 (Executive Summary) 在人工智能大模型竞争进入“后训练时代”的关键节点,深度求索(DeepSeek)即将发布的下一代旗舰模型 DeepSeek-V4 标志着中国AI基础设施在架构效率、多模态融合及国产硬件适配上实现了质的飞跃。不同于国际巨头单纯依赖算力堆叠的“暴力美学”路径,DeepSeek-V4 通过原生多模态架构、Engram条件记忆机制、双轴稀疏(Dual-Sparse)架构以及DualPath智能体推理框架四大核心技术支柱,在万亿级参数规模下实现了推理成本降低90%、长文本处理能力提升8倍、国产芯片算力利用率突破85%的惊人指标。 本报告将从技术原理、架构创新、性能基准、成本控制及国产算力生态五个维度,深度剖析DeepSeek-V4如何通过“算法-系统-硬件”的协同设计,打破英伟达CUDA生态的垄断,为全球AI发展提供“中国效率”的全新范式。 DeepSeek-V4 vs

By Ne0inhk