实战指南:从零开始用YOLOv8训练VisDrone无人机检测模型

1. 环境准备与数据集初探

大家好,我是老张,一个在AI和无人机视觉领域摸爬滚打了十来年的工程师。今天咱们不聊那些虚头巴脑的理论,直接上手干。如果你一直想用YOLOv8来训练一个能识别无人机航拍画面中车辆、行人的模型,但被繁琐的数据处理和配置劝退,那这篇文章就是为你准备的。我会手把手带你走完全程,从下载数据集到训练出第一个模型,过程中我踩过的坑、总结的技巧,都会毫无保留地分享给你。

咱们今天的主角是VisDrone2019数据集YOLOv8。VisDrone这个数据集在业内非常有名,它是由天津大学的团队精心采集和标注的,专门用于无人机视角下的各种计算机视觉任务。里面包含了超过1万张图片,标注了行人、小汽车、卡车、公交车等10个类别的目标,场景覆盖了城市、乡村、白天、夜晚,非常丰富。用这个数据集训练出来的模型,对于开发无人机巡检、交通监控、安防这些应用,是绝佳的基础。

那么,第一步就是准备好我们的“战场”。你需要一个Python环境,我强烈建议使用Python 3.8或3.9,太新的版本有时候会遇到一些奇怪的依赖冲突。深度学习框架我们选择PyTorch,记得根据你的CUDA版本去官网选择对应的安装命令。最后,安装我们今天最核心的库:ultralytics。这个库把YOLOv8封装得非常好用,一行命令就能搞定安装:pip install ultralytics。安装完成后,在命令行里输入 yolo version 检查一下,如果能显示出版本号,比如 8.0.xx,那恭喜你,环境的基础就打好了。

接下来是数据集。VisDrone的官方下载地址可能需要科学上网,对国内用户不太友好。别担心,我这里提供一个国内网盘的下载链接(链接见后文),或者你也可以用 ultralytics 库内置的下载功能,它会自动处理。我个人的习惯是先在本地创建一个清晰的项目目录,比如叫做 yolov8_visdrone,然后在里面再建一个 datasets 文件夹,专门用来存放数据。这样结构清晰,以后找什么都方便。

2. 获取与理解VisDrone数据集

2.1 下载与解压

数据集我们主要关注**目标检测(DET)**任务的部分。VisDrone2019-DET数据集主要包含三个部分:训练集(train)、验证集(val)和测试集(test-dev)。训练集有6471张图,是我们训练模型的主力;验证集548张,用来在训练过程中评估模型性能,防止过拟合;测试集1610张,留到最后模型训练完了,再做一次最终的性能评测。

你可以使用我提供的百度网盘链接(链接:https://pan.baidu.com/s/1e2Q0NgNT-H-Acb2H0Cx8sg 提取码:31dl)下载压缩包。下载后,将 VisDrone2019-DET-train.zipVisDrone2019-DET-val.zipVisDrone2019-DET-test-dev.zip 这三个文件,都解压到刚才创建的 datasets/VisDrone 目录下。解压后的结构应该是这样的:

datasets/VisDrone/
├── VisDrone2019-DET-train/
│   ├── annotations/  (存放标注的txt文件)
│   └── images/       (存放训练的jpg图片)
├── VisDrone2019-DET-val/
│   ├── annotations/
│   └── images/
└── VisDrone2019-DET-test-dev/
    ├── annotations/
    └── images/

2.2 解读原始数据格式

现在,我们打开一个 annotations 文件夹里的txt文件看看。你会发现它的格式和YOLO需要的格式不太一样。VisDrone的原始标注格式是这样的:每一行代表一个目标,包含多个用逗号分隔的数字,比如 590,410,62,51,0,0,0,0

这每一列是什么意思呢?我结合官方说明和自己的经验给你解释一下:

  • 前4个数(590,410,62,51):这是目标的边界框。590410是框左上角顶点的x和y坐标,6251是框的宽度和高度。注意,这里的坐标是绝对像素值
  • 第5个数(0):这是目标可见性分类。0代表“忽略区域”,比如严重遮挡或非常小的目标,在训练时我们通常会跳过这类标注。
  • 第6个数(0):这才是我们关心的目标类别。它的取值范围是1到10,分别对应:1-行人,2-人群,3-自行车,4-小汽车,5-面包车,6-卡车,7-三轮车,8-带篷三轮车,9-公交车,10-摩托车。
  • 后面还有几个属性是关于遮挡和姿态的,对于基础检测任务我们先不用管。

而YOLOv8训练需要的是另一种格式:每个标注文件对应一张图片,每一行是 class_id center_x center_y width height。这里的 center_x, center_y, width, height 都是相对于图片宽度和高度的比例值(范围在0到1之间)。所以,我们必须进行一次格式转换。

3. 数据格式转换:从VisDrone到YOLO

3.1 编写转换脚本

格式转换是新手最容易出错的一步,但别怕,我已经把代码准备好了。在你的项目根目录下(和 datasets 同级),新建一个Python文件,就叫 visdrone2yolo.py。把下面的代码完整地复制进去。

import os
from pathlib import Path
from PIL import Image
from tqdm import tqdm

def convert_box(img_size, box):
    """将VisDrone的绝对坐标框转换为YOLO格式的相对坐标框"""
    # img_size是 (width, height)
    dw = 1. / img_size[0]
    dh = 1. / img_size[1]
    x, y, w, h = box
    # 计算中心点坐标并归一化
    x_center = (x + w / 2) * dw
    y_center = (y + h / 2) * dh
    w_norm = w * dw
    h_norm = h * dh
    return x_center, y_center, w_norm, h_norm

def visdrone2yolo(data_dir):
    """核心转换函
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值