项目背景
无人机航拍图像里目标通常很小且密集,传统算法很难搞定。我们用了 Ultralytics YOLO11 框架,配合 VisDrone 数据集训练,能高效检测行人、车辆等 10 类交通目标。为了验证方便,还做了个 PyQt6 桌面端,支持图片、视频和摄像头的实时检测。
数据集准备
用的是 VisDrone 2019-DET 数据集,天津大学 AISKYEYE 团队发的,ICCV 2019 挑战赛基准。
- 训练集 6471 张,验证集 548 张,测试集 1610 张。
- 总共 260 万 + 标注框。
- 类别包括行人、自行车、汽车、卡车等 10 种。
- 特点很明显:城市乡村都有,高度高导致目标像素少,很多归一化后宽高小于 2%,而且遮挡严重。
目录结构如下:
dataset_visdrone/
├── data.yaml
└── VisDrone2019-DET-train/
├── images/
└── labels/
标注是 YOLO 标准格式,一行一个框,坐标归一化到 [0, 1]。
训练配置
核心脚本在根目录 train_yolo11.py,支持 train、val、predict 三种模式。
基本流程就是检查配置文件,生成本地路径 yaml,加载预训练权重,然后开练。结果会存在 runs/train/ 下。
命令行示例:
python train_yolo11.py --model yolo11m --epochs 200 --imgsz 1280
这里建议把图像尺寸设大点,比如 1280,小目标看得更清。Batch size 根据显存来,16 到 32 比较稳。Epochs 建议 200 以上,VisDrone 收敛慢。默认开启 mosaic 增强,最后 10 轮关掉能让曲线更稳。
关键参数
优化器用的 SGD,损失权重 box=7.5, cls=0.5, dfl=1.5。 检测时的置信度阈值默认 0.25,IoU 阈值 0.70。如果误检多,可以把 conf_threshold 调高。
训练结果怎么看
Ultralytics 会在实验目录生成一堆图。
results.png看整体趋势,loss 下降、mAP 上升就对了。confusion_matrix_normalized.png看看有没有把车认成人的情况。- PR 曲线和 F1 曲线能帮你定最终的阈值。 CSV 文件里记录了每个 epoch 的详细指标,方便画图分析。
桌面应用功能
用 PyQt6 写了个客户端,叫'无人机航拍小目标检测系统'。
- 能上传图片、视频,也能直连摄像头。
- 有登录界面,默认 admin/admin123。
- 历史记录可以导出,模型路径也能在配置里改。
入口是
detection_app/main.py,推理逻辑封装在utils/detector.py里。
技术栈与结构
GUI 是 PyQt6,后端 PyTorch/Ultralytics,图像处理 OpenCV。
依赖包都在 requirements.txt 里列好了。
项目结构清晰,训练脚本和应用分开,方便维护。
训练输出里有 best.pt 权重,还有各种可视化图表。
参考资料
论文引用建议:
@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} }
数据集官网:https://aiskyeye.com/



