yoloV5训练visDrone2019-Det无人机视觉下目标检测

一、visDrone2019数据集详解

visDrone2019数据集是无人机视角下最具挑战性的目标检测基准数据集之一,由天津大学机器学习与数据挖掘实验室联合其他研究机构共同构建。该数据集采集自中国14个不同城市,覆盖复杂城市场景、交通枢纽、密集人群等多种环境。
在这里插入图片描述

数据集构成:

  • 训练集:6,471张图像(含6471个标注文件)
  • 验证集:548张图像
  • 测试集:3,190张图像
  • 标注类别:10个主要目标类别
    pedestrian(行人)、people(人群)、bicycle(自行车)、car(轿车)、van(厢式货车)、truck(卡车)、tricycle(三轮车)、awning-tricycle(带篷三轮车)、bus(公交车)、motor(摩托车)

标注格式特点:
每个图像对应.txt标注文件包含多行数据,每行格式为:
<bbox_left>,<bbox_top>,<bbox_width>,<bbox_height>,<score>,<category>,<truncation>,<occlusion>
其中关键参数说明:

  • bbox_left:边界框左上角x坐标
  • bbox_top:边界框左上角y坐标
  • category:目标类别(1-10对应上述类别)
  • occlusion:遮挡程度(0=完全可见,1=部分遮挡,2=严重遮挡)

二、数据预处理与标签格式转换

YOLOv5要求标签格式为归一化的中心坐标+宽高形式:
<class_id> <x_center> <y_center> <width> <height>

转换步骤详解:

  1. 类别说明(visdrone.names):
0 pedestrian
1 people
2 bicycle
3 car
4 van
5 truck
6 tricycle
7 awning-tricycle
8 bus
9 motor
  1. Python转换脚本
def visdrone2yolo(dir):
      from PIL import Image
      from tqdm import tqdm

      def convert_box(size, box):
          # Convert VisDrone box to YOLO xywh box
          dw = 1. / size[0]
          dh = 1. / size[1]
          return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh

      (dir / 'labels').mkdir(parents=True, exist_ok=True)  # make labels directory
      pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}')
      for f in pbar:
          img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size
          lines = []
          with open(f, 'r') as file:  # read annotation.txt
              for row in [x.split(',') for x in file.read().strip().splitlines()]:
                  if row[4] == '0':  # VisDrone 'ignored regions' class 0
                      continue
                  cls = int(row[5]) - 1
                  box = convert_box(img_size, tuple(map(int, row[:4])))
                  lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n")
                  with open(str(f).replace(os.sep + 'annotations' + os.sep, os.sep + 'labels' + os.sep), 'w') as fl:
                      fl.writelines(lines)  # write label.txt


  # Download
  dir = Path('')  # 修改为你保存VisDrone数据的目录
  # Convert
  for d in 'VisDrone2019-DET-train', 'VisDrone2019-DET-val', 'VisDrone2019-DET-test-dev':
      visdrone2yolo(dir / d)  # convert VisDrone annotations to YOLO labels

关键注意事项:

  1. 处理遮挡标注:建议保留occlusion<2的样本(过滤严重遮挡目标)
  2. 小目标处理:无人机图像普遍存在小目标问题,需保持原始分辨率
  3. 类别平衡:分析各类别分布,必要时进行过采样/欠采样

三、YOLOv5参数设置

1. 数据配置文件(visdrone.yaml)

path: ../datasets/VisDrone  # dataset root dir
train: VisDrone2019-DET-train/images  # train images (relative to 'path')  6471 images
val: VisDrone2019-DET-val/images  # val images (relative to 'path')  548 images
test: VisDrone2019-DET-test-dev/images  # test images (optional)  1610 images

# Classes
names:
  0: pedestrian
  1: people
  2: bicycle
  3: car
  4: van
  5: truck
  6: tricycle
  7: awning-tricycle
  8: bus
  9: motor

2. 关键训练参数解析

  • 预训练模型:
--weights yolov5s.pt
  • 训练超参选择hyp.scratch-low.yaml
--hyp scratch-low.yaml

yp.scratch-low.yaml 参数基本说明

lr0: 0.01        # 初始学习率
lrf: 0.1         # 最终学习率系数
momentum: 0.937  # SGD动量
weight_decay: 0.0005  # 权重衰减
warmup_epochs: 3.0    # 学习率预热
warmup_momentum: 0.8  
warmup_bias_lr: 0.1   
box: 0.05        # 边界框损失权重
cls: 0.3         # 分类损失权重
cls_pw: 1.0      # 分类正样本权重
obj: 0.7         # 目标存在损失权重
obj_pw: 1.0      # 目标存在正样本权重
iou_t: 0.20      # IoU训练阈值
anchor_t: 4.0    # anchor阈值
fl_gamma: 0.0    # Focal loss gamma

四、小结

  • 在训练启动的过程中,提示默认的anchors值不是最优的配置,并给出了重新聚类后的anchors。
  • VisDrone2019存在大量的极小目标,使用640*640的训练尺寸,会导致在训练时,大量的小目标,被缩放为一个点目标,这对训练会起到副作用,所以,这个问题得去优化。
  • VisDrone2019存在inogre区域(有目标,但是未标注),应该进行抹黑处理,并出现标注不完整的情况。
    在这里插入图片描述
### 使用 YOLOv11 训练 VisDrone2019 数据集 尽管当前提到的是 YOLOv5 的相关内容[^2],但可以推测 YOLOv11 应该继承并改进了其前代版本的功能。以下是基于现有知识以及类比 YOLOv5 的方法来描述如何配置和训练 YOLOv11。 #### 一、环境验证 在开始之前,需确认安装的框架能够正常运行。可以通过尝试加载预定义的数据集(如 COCO128),观察是否有预测结果输出以判断环境是否搭建成功[^1]。 #### 二、数据集准备 对于 VisDrone2019 数据集,需要按照模型的要求整理图像及其标注信息: - **路径结构**: 创建一个 YAML 文件用于指定数据的位置与类别标签。 ```yaml # visdrone.yaml path: ../datasets/VisDrone # 数据集根目录 train: VisDrone2019-DET-train/images # 训练图片位置 (相对于'path') val: VisDrone2019-DET-val/images # 验证图片位置 (相对于'path') test: VisDrone2019-DET-test-dev/images # 测试图片位置 (可选) names: 0: pedestrian # 行人 1: people # 多人群体 2: bicycle # 自行车 3: car # 小汽车 4: van # 货车 5: truck # 卡车 6: tricycle # 三轮车 7: awning-tricycle # 带遮阳棚的三轮车 8: bus # 巴士 9: motor # 摩托车 ``` 此部分直接沿用了已有资料中的设定,适用于大多数目标检测任务。 #### 三、参数调整 针对具体应用场景可能涉及多个超参的选择,下面列举几个重要选项供参考: - `imgsz`: 输入网络层大小,默认可能是 640×640; - `batch_size`: 批次数量依据 GPU 显存容量决定; - `epochs`: 总迭代次数取决于收敛速度及资源限制情况; - `weights`: 初始化权重来源,可以选择官方提供的预训练模型或者自定义路径; 例如启动脚本如下所示: ```bash python train.py --data visdrone.yaml \ --cfg yolov11.cfg \ --weights '' \ --name yolo_v11_visdrone_results \ --img-size 640 \ --batch-size 16 \ --epochs 50 ``` 上述命令行调用了特定于项目的配置文件(`visdrone.yaml`) 和架构设计文档 (`yolov11.cfg`)[^假设存在此类文件]. #### 四、注意事项 由于实际操作过程中可能会遇到各种问题,因此建议密切关注日志记录,并适时保存中间状态以便后续分析调试之用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深图智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值