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区域(有目标,但是未标注),应该进行抹黑处理,并出现标注不完整的情况。
    在这里插入图片描述
本文章已经生成可运行项目
### 关于 VisDrome2019 数据集和模型下载及使用 VisDrone 是一项专注于无人机(UAV)拍摄场景下的目标检测、跟踪以及分类竞赛。其数据集广泛应用于计算机视觉领域中的物体检测任务,尤其是针对复杂背景下的小型移动对象的识别。 #### 下载 VisDrone2019 数据集 VisDrone2019 的官方数据集可以通过访问官网获取[^4]。通常情况下,该数据集分为以下几个部分: - **训练集 (Train)**:用于模型训练- **验证集 (Validation)**:用于评估模型性能。 - **测试集 (Test)**:仅提供图片而不含标注文件,需通过提交预测结果至主办方平台获得最终评测分数。 在官方网站上注册账号后可以免费申请下载链接。注意遵循相关条款规定合理合法地利用这些资源进行研究学习活动。 #### 使用 TensorFlow/Keras 实现基于 VisDrone2019YOLOv2 模型构建与训练 为了实现对 VisDrone2019 数据集中目标的有效检测,可以选择采用深度学习框架如 TensorFlow 或 Keras 来搭建并优化网络结构。具体流程如下: ##### 准备工作环境 确保安装有 Python3 及相应版本库支持,例如 NumPy, Matplotlib 和 OpenCV 等辅助工具包。同时还需要加载预编译好的 Darknet 架构权重作为初始化参数来加速收敛速度[^1]。 ##### 配置项目目录树 按照惯例整理好本地存储路径以便后续脚本调用方便管理各类素材资料。例如创建名为 `visdrone_yolov2` 文件夹存放所有必需组件包括但不限于配置文档(.cfg),标签说明(txt/csv形式),还有实际影像素材(jpg/png格式)[^3]: ``` visdrone_yolov2/ ├── data/ │ ├── images/ │ └── labels/ ├── cfg/ └── weights/ ``` ##### 修改默认参数设置 打开所选源码工程内的核心定义文件比如 `.py`,`.sh` 脚本或者 JSON/YAML 类型描述符找到涉及输入尺寸大小(batch size,height,width)锚框数量(anchor box count per grid cell )等方面的关键字字段逐一调整适配当前特定需求情境下最佳表现组合方案. ```yaml # Example config snippet from YAML file used to specify training parameters. batch_size: 8 image_height: 608 image_width: 608 anchors_per_grid_cell: 5 epochs: 50 learning_rate: 0.001 train_data_path: "./data/images/train/" val_data_path: "./data/images/validation/" pretrained_weights: "/path/to/darknet53.conv.74" output_dir: "./weights/output_model.hdf5" tensorboard_logdir: "./logs/tensorboard_logs/" ``` ##### 启动 TensorBoard 进行实时监控反馈 执行命令启动服务端口监听模式从而允许浏览器界面远程连接查看损失函数变化趋势图表以及其他诊断指标统计摘要信息等内容展示效果更直观清晰明了有助于及时发现问题所在进而采取针对性措施加以改进提升整体效率水平: ```bash tensorboard --logdir=./logs/tensorboard_logs/ ``` 最后提醒一点就是考虑到计算量庞大建议优先考虑GPU硬件加速选项如果条件允许的话这样能够大幅缩短迭代周期加快实验进程节奏安排更加紧凑高效!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

深图智能

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

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

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

打赏作者

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

抵扣说明:

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

余额充值