前言

无人机目标检测在智慧城市、交通监控、灾害救援等领域有着广阔的应用前景。然而,无人机拍摄的图像通常具有尺度变化剧烈(目标可能只占几十个像素)、背景复杂目标密集视角特殊(俯视)等特点,这给传统目标检测算法带来了不小的挑战。

VisDrone2019数据集是由天津大学AISKYEYE团队发布的大规模无人机视觉基准数据集,包含10,209张静态图像和288个视频片段,覆盖中国14个不同城市的多样场景。数据集共标注了超过260万个目标框,涵盖行人、汽车、自行车、公交车等10个常见类别。其核心挑战在于无人机高空俯拍导致的目标尺度极小、密集分布以及复杂背景干扰,这使得VisDrone2019成为评估小目标检测和密集场景跟踪能力的权威基准。

本文使用了由 Ultralytics 开发的 YOLO 开源项目带你动手实践:如何使用最新的YOLO26模型在VisDrone2019数据集上进行训练、评估与推理。

相关资源链接
yolo26(ultralytics)官方仓库:https://github.com/ultralytics/ultralytics

yolo26官方文档:https://docs.ultralytics.com/zh/models/yolo26/#overview

VisDrone2019-YOLO格式数据集地址:https://aistudio.baidu.com/datasetdetail/295374

VisDrone2019原始数据:https://aistudio.baidu.com/datasetdetail/115729

pytorch官网:https://pytorch.org/get-started/locally/

1. 基础pytorch环境配置

运行环境:Python=3.8,torch2.4.1+cu121

以下使用Anaconda创建环境,如果没有下载配置过Anaconda,可以去B站或者浏览器搜索Anaconda安装教程。以下不过多赘述。

打开电脑终端

Windows:按下 Win+R,输入 cmd 回车,即可打开命令行终端。

macOS:使用快捷键 Command+空格 打开聚焦搜索,输入 Terminal 回车,即可打开终端。

1.1利用Anaconda创建环境yolo环境

conda create -n yolo python==3.8 -y

1.2激活yolo环境

conda activate yolo

1.3安装 PyTorch

打开pytorch官网:https://pytorch.org/get-started/locally/

会看到以下的页面,根据自己CUDA的版本,选择对应的指令。

页面提示:最新稳定版 PyTorch (2.11.0) 要求 Python 3.10 及以上版本,而你创建的是 python=3.8 的 YOLO 环境,因此不能直接使用最新版命令,需要安装兼容 Python 3.8 的旧版本 PyTorch。

点击页面中的「install previous versions of PyTorch」,即可进入旧版本安装页面,选择适配 Python 3.8 的版本。

这里我根据自己电脑的CUDA版本选择

pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118 -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 数据集准备

2.1下载VisDrone数据集

VisDrone2019-YOLO格式数据集地址:https://aistudio.baidu.com/datasetdetail/295374

  • 打开上述链接,进入百度 AI Studio 数据集页面

  • 在「文件列表」中找到 visdrone2019.zip(大小约 1.86GB)

  • 点击右侧「下载」按钮,即可将数据集压缩包下载到本地电脑

2.2解析数据集内部结构

将数据集压缩之后可以看到如下结构的目录

  • 文件夹名称 数据集划分 数据规模 用途
    VisDrone2019-DET-train 训练集 6471 张图像 模型训练
    VisDrone2019-DET-val 验证集 548 张图像 训练过程中模型评估、超参数调优
    VisDrone2019-DET-test-dev 测试集 1610 张图像 模型最终性能测试、结果提交
    VisDrone2019-DET-train为例,YOLO 格式数据集的标准内部结构如下:
  • VisDrone2019原始标注文件中的每个数值依次代表目标框左上角横坐标、左上角纵坐标、目标框宽度、目标框高度、标注置信度、目标类别编号、目标截断程度、目标遮挡程度。YOLO格式标注文件里的数值依次为目标类别编号、目标框中心点横坐标、中心点纵坐标、目标框宽度、目标框高度,只保留训练所需的坐标与类别信息,不包含截断和遮挡相关属性。
  • VisDrone2019-DET-train/
    ├── annotations/  # 原始标注文件(可选,用于格式回溯)
    ├── images/       # 训练集图像(.jpg 格式,与标注一一对应)
    ├── labels/       # YOLO 格式标注文件(.txt 格式,直接用于训练)
    └── labels.cache  # YOLO 自动生成的缓存文件,加速训练数据加载

3. 官网下载ultralytics源码

访问yolo26(ultralytics)官方仓库:https://github.com/ultralytics/ultralytics

点击Download Zip下载源码,并解压到电脑的合适位置

4. 训练模型

用pycharm打开之前配置所下载的ultralytics项目,配置好之前配置好的yolo环境,具体配置位置如下:

4.1下载yolo26s官方权重

访问 yolo26官方文档:https://docs.ultralytics.com/zh/models/yolo26/#overview,下载yolo26s权重,复制到ultralytics项目根目录下面。

4.2修改数据集配置文件

4.3编写训练脚本

在完成环境搭建、数据集准备与源码下载后,我们编写 YOLO26 训练脚本实现模型训练、验证与导出全流程:首先从 ultralytics 库导入 YOLO 类,在主入口防护下加载 yolo26s.pt 预训练权重,随后通过 model.train 方法配置训练参数,指定 VisDrone.yaml 数据集路径、640×640 输入尺寸、16 批次大小、4 个数据加载线程与 100 训练轮数,训练完成后调用 model.val 在验证集评估 mAP、精确率等核心指标,最后通过 model.export 将模型导出为 opset13、简化后的 ONNX 格式,方便后续部署,脚本可根据硬件性能灵活调整批次、输入尺寸等参数,适配不同算力的训练需求。

from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO("yolo26s.pt")
    model.train(data="datasets/VisDrone.yaml", imgsz=640, batch=16, workers=4, device=0, epochs=200)
    metrics = model.val()
    path = model.export(format="onnx", opset=13, simplify=True)

5. 模型训练结果可视化展示

模型训练完成后,Ultralytics 会自动生成完整的训练结果可视化图表,从损失曲线、精度指标、类别分布、目标分布到 PR 曲线多维度评估模型性能,直观呈现训练效果与模型优劣,为后续优化提供依据。

5.1损失与精度曲线

  • 训练损失曲线(train/box_loss、train/cls_loss、train/dfl_loss):三条训练损失随训练轮数持续下降并逐渐收敛,说明模型在训练集上持续学习、拟合效果良好,无明显震荡或发散问题。
  • 验证损失曲线(val/box_loss、val/cls_loss、val/dfl_loss):验证损失同步下降并稳定收敛,未出现明显上升,证明模型泛化能力良好,无严重过拟合。
  • 精度指标曲线(metrics/precision (B)、metrics/recall (B)、metrics/mAP50 (B)、metrics/mAP50-95 (B)):精确率、召回率、mAP@0.5、mAP@0.5:0.95 随训练轮数稳步提升并最终趋于稳定,其中 mAP@0.5 达到 0.410,验证了模型在 VisDrone 航拍数据集上的检测精度,mAP@0.5:0.95 的提升则体现了模型在不同 IoU 阈值下的综合检测能力。

5.2类别实例分布柱状图

该图表统计了 VisDrone 数据集中 10 类目标的实例数量,其中 car 类别实例数最高(144866),pedestrian 次之(79335),而 awning-tricycle、tricycle 等类别实例数较少,呈现明显的类别不平衡。这一分布直接解释了不同类别检测精度的差异:实例数充足的 car、motor 等类别 mAP 更高,而小样本类别检测精度偏低,为后续数据增强、类别平衡优化提供了明确方向。

    5.3 精确率 - 召回率(PR)曲线

    PR 曲线是目标检测模型的核心评估工具,曲线下面积(AUC)越大,代表模型检测性能越好。图中展示了 10 个类别各自的 PR 曲线与全类别平均 PR 曲线:car 类别 PR 曲线最靠近右上角,AUC 最高(0.808),检测性能最优;bicycle、awning-tricycle 等类别因样本量少、目标尺寸小,PR 曲线偏低,检测性能较弱;全类别平均 mAP@0.5 为 0.410,综合反映了模型在航拍多类别、小目标场景下的整体检测能力。

    Logo

    AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

    更多推荐