YOLO11 无人机航拍小目标检测系统实战与优化
本项目聚焦于无人机航拍场景下的微小目标检测难题,基于 Ultralytics YOLO11 框架,在 VisDrone 2019 数据集上完成训练与调优。除了核心算法模型,还配套开发了基于 PyQt6 的桌面应用,支持图片、视频及摄像头的实时检测,并内置了训练指标的可视化功能。
项目背景与数据基础
无人机航拍图像通常面临目标尺度极小、分布密集以及多尺度混合的挑战,传统算法往往难以达到理想效果。我们选用 VisDrone 2019-DET 数据集,这是面向无人机视角的大规模基准数据集,由天津大学 AISKYEYE 团队发布,涵盖行人、车辆等 10 类交通相关目标。
数据集概况
| 子集 | 图像数量 | 说明 |
|---|---|---|
| 训练集 (train) | 6,471 张 | 用于模型训练 |
| 验证集 (val) | 548 张 | 用于超参数调优与模型选择 |
| 测试集 (test-dev) | 1,610 张 | 含标注,可用于论文实验 |
该数据集包含超过 260 万个边界框,图像来源覆盖中国 14 个不同城市,场景丰富。其显著特点包括:
- 小目标特性:大量目标归一化后宽度或高度小于 2%。
- 密集分布:交通路口等场景遮挡严重。
- 多尺度混合:同一图像中存在近大远小现象。
目录结构
dataset_visdrone/
├── data.yaml # YOLO 数据集配置文件
├── data_local.yaml # 自动生成,含本机绝对路径
├── 数据集介绍.md
└── VisDrone2019-DET-train/
├── images/
└── labels/ # YOLO 格式标签 (.txt)
标注采用 YOLO 标准格式,每行一个目标:<class_id> <x_center> <y_center> <width> <height>,坐标均为归一化值 [0, 1]。
模型训练流程
训练脚本位于项目根目录 train_yolo11.py,支持训练、验证和推理三种模式。实际运行中,建议根据显存情况调整 batch size,并针对小目标优化输入分辨率。
启动与配置
确保 dataset_visdrone/data.yaml 存在后,脚本会自动生成包含本机绝对路径的 data_local.yaml。加载预训练模型即可开始训练,结果默认保存在 runs/train/<实验名称>/ 目录下。
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


