当前位置:   article > 正文

【人工智能】使用yolov7和youlov8以及re-detr模型实现安全帽检测_redetr

redetr

1 问题描述

数据集共包括40000张训练图像和1000张测试图像,每张训练图像对应 xml标注文件:
在这里插入图片描述

共包含3类:0:‘head’, 1:‘helmet’, 2:‘person’ 提交格式要求,提交名为pred_result.txt的文件:每一行代表一个目标,每一行内容分别表示 图像名 置信度 xmin ymin xmax ymax 类别
![[Pasted image 20240113144435.png]]

2 数据准备

2.1 数据加载

解压项目提供的数据:

!unzip  /home/aistudio/data/data126280/HelmetDetection.zip -d /home/aistudio
  • 1

更改文件位置:

%cd /home/aistudio
%mv data/data126280/helmet/train/annotations work/dataset/Annotations
%mv data/data126280/helmet/train/images work/dataset/JPEGImages
  • 1
  • 2
  • 3

文件目录结构如下:

dataset/                          dataset/
  ├── annotations/      -->         ├── Annotations/
  ├── images/                       ├── JPEGImages/
  • 1
  • 2
  • 3

2.2 数据预处理

训练数据预处理和增强操作:

  1. MixupImage:
    • mixup_epoch=-1:应用 Mixup 数据增强,这是一种通过混合两个图像来生成新的训练样本的技术。mixup_epoch=-1 表示在所有训练周期中都应用 Mixup。
  2. RandomDistort:
    • 随机扭曲图像,增加训练数据的多样性。
  3. RandomExpand:
    • 随机扩展图像,通过填充值 [123.675, 116.28, 103.53] 进行填充。有助于增加模型对输入图像边界的鲁棒性。
  4. RandomCrop:
    • 随机裁剪图像,增加训练数据的多样性。
  5. RandomHorizontalFlip:
    • 随机水平翻转图像,增加训练数据的多样性。
  6. BatchRandomResize:
    • 随机调整图像尺寸,可选择多个目标尺寸 [320, 352, 384, 416, 448, 480, 512, 544, 576, 608],并使用随机的插值方法。
  7. Normalize:
    • 将图像进行标准化,使用均值 [0.485, 0.456, 0.406] 和标准差 [0.229, 0.224, 0.225] 进行归一化。
train_transforms = T.Compose([
    T.MixupImage(mixup_epoch=-1), T.RandomDistort(),
    T.RandomExpand(im_padding_value=[123.675, 116.28, 103.53]), T.RandomCrop(),
    T.RandomHorizontalFlip(), T.BatchRandomResize(
        target_sizes=[320, 352, 384, 416, 448, 480, 512, 544, 576, 608],
        interp='RANDOM'), T.Normalize(
            mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

eval_transforms = T.Compose([
    T.Resize(
        target_size=480, interp='CUBIC'), T.Normalize(
            mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

划分训练集和验证集的比例为:0.85:0.15

!paddlex --split_dataset --format voc --dataset_dir /home/aistudio/work/dataset --val_value 0.15
  • 1

得到文件:
labels.txt,val_list.txt,train_list.txt
定义训练集和验证集:

train_dataset = pdx.datasets.VOCDetection(
    data_dir='/home/aistudio/work/dataset',
    file_list='/home/aistudio/work/dataset/train_list.txt',
    label_list='/home/aistudio/work/dataset/labels.txt',
    transforms=train_transforms,
    shuffle=True)

eval_dataset = pdx.datasets.VOCDetection(
    data_dir='/home/aistudio/work/dataset',
    file_list='/home/aistudio/work/dataset/val_list.txt',
    label_list='/home/aistudio/work/dataset/labels.txt',
    transforms=eval_transforms,
    shuffle=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3 模型选择

由于PaddleX有大量的有关目标检测的集成模型可供选择,所以本次实验采用PaddleX库进行训练。版本:python=3.7 PaddlePaddle=2.4.0

!pip install paddlex
!pip install --user --upgrade pyarrow==11.0.0
  • 1
  • 2

本次实验分别选取了yolov3yolov7yolov8rt-detr四种模型进行训练,并挑选出训练情况相对较好的模型进行进一步的优化,以下是模型的初步训练过程。

3.1yolov7的训练

V7的模型架构:
在这里插入图片描述
V7的改进:

推荐阅读
相关标签