基于YOLOv5的目标检测任务实战

目录

  • 前言
  • 一、YOLOv5
    • SPPF
      • 1)空间金字塔池化(Spatial Pyramid Pooling, SPP)
      • 2)SPP
      • 3)SPPF
    • 数据增强
  • 二、实战代码
    • 1)代码结构
    • 2)边界框格式及损失指标
    • 3)代码问题及解决

前言

这是一个kaggle上的目标检测竞赛: Help Protect the Great Barrier Reef
赛题目标:建立一个根据珊瑚礁水下视频训练的目标检测模型,实时准确地识别海星
本文将介绍一下yolov5的网络结构和原理,并将其运用到这个赛题的解决上。

一、YOLOv5

YOLOv5项目的作者是Glenn Jocher,也不是原Darknet项目的作者Joseph Redmon。并且这个项目至今都没有发表过正式的论文。

网络的大体结构与YOLOv3相似1
基于YOLOv5的目标检测任务实战_第1张图片

SPPF

1)空间金字塔池化(Spatial Pyramid Pooling, SPP)

之前介绍过ROI pooling,作用是将不同尺寸的输入统一为相同尺寸的输出,这里的SPP效果也差不多(ROI是受SPP启发提出的):将不同尺寸的输入化为相同维度的向量输出。

以下图为例,一张图片输入,我们将它分别划分为 16 × 16 , 4 × 4 , 1 × 1 16\times 16,4\times 4,1\times 1 16×16,4×4,1×1块,对每一块提取256维的特征,最后将特征拼在一起,这样就得到一个 21 × 256 21\times 256 21×256维的输出。
基于YOLOv5的目标检测任务实战_第2张图片

2)SPP

这一小节的SPP与上面的SPP略有不同,受上面的SPP的启发,YOLOv3有一个SPP版本,效果有所提升。

SPP就是将特征层分别通过一个池化核大小为5x5、9x9、13x13的最大池化层,然后在通道方向进行concat拼接在做进一步融合,这样能够在一定程度上解决目标多尺度问题,如下图所示。它和ROI Pooling效果类似,都能将不同的输入
基于YOLOv5的目标检测任务实战_第3张图片

3)SPPF

YOLOv5 中对SPP进行了改进,两者的作用和输出是一模一样的,但是SPPF效率更高。其原理是串行两个5x5大小的MaxPool层是和一个9x9大小的MaxPool层计算结果是一样的,串行三个5x5大小的MaxPool层是和一个13x13大小的MaxPool层计算结果是一样的

用串行的几个5x5MaxPool层代替了原来的结构,避免了冗余计算,运算速度能提高两倍以上1
基于YOLOv5的目标检测任务实战_第4张图片

数据增强

  1. Mosaic
    将四张图片拼成一张图片
    1)增加数据多样性
    2)增加目标个数
    3)BN能一次统计到更多图片的参数

  2. Copy paste
    将部分目标随机的粘贴到图片中,前提是数据要有segments数据才行,即每个目标的实例分割信息。

  3. Random affine(Rotation, Scale, Translation and Shear)
    随机进行仿射变换,但根据配置文件里的超参数发现只使用了Scale和Translation即缩放和平移。

  4. Random horizontal flip
    随机水平翻转

  5. Augment HSV(Hue, Saturation, Value)
    随机调整色度,饱和度以及明度。

  6. MixUp
    就是将两张图片按照一定的透明度融合在一起,具体有没有用不太清楚,毕竟没有论文,也没有消融实验。代码中只有较大的模型才使用到了MixUp,而且每次只有10%的概率会使用到。

二、实战代码

YOLOv5的代码作者开源在GitHub上。预训练模型有不同的规模,规模越大一般来说精度越高,考虑到算力限制和数据集大小我们这里选择轻量级的YOLOv5s
基于YOLOv5的目标检测任务实战_第5张图片
依旧是白嫖kaggle的算力,由于代码比较长,就不一点一点贴上来了,放在这里。下面主要讲讲代码的大致内容和在这个过程中遇到的问题以及学习到的东西。
基于YOLOv5的目标检测任务实战_第6张图片

1)代码结构

  1. 数据预处理
    训练集由三段视频构成,一共有23501张图片,其中只有4917张有标注信息(有CTOS)。
  2. 数据读入
  3. YOLO训练
  4. 推理

2)边界框格式及损失指标

3)代码问题及解决

参考:
csdn:https://blog.csdn.net/qq_56591814/article/details/127083901

runtime error
https://blog.csdn.net/weixin_62375097/article/details/128961368


  1. https://blog.csdn.net/qq_37541097/article/details/123594351 ↩︎ ↩︎

你可能感兴趣的:(目标检测,YOLO,深度学习)