【YOLO系列】YOLOv5

YOLOv5

Posted by x-jeff on January 14, 2024

本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.Ultralytics YOLOv5 Architecture

YOLOv5没有发表官方论文。官方github地址:yolov5。本博文参考官方文档,因为YOLOv5还在不断的更新,本博文介绍的是YOLOv5的v6.0/6.1版本。

2.Model Structure

YOLOv5框架包含3个主要部分:

  • Backbone:使用了一个新的CSP-Darknet53网络。
  • Neck:使用了SPPF和一个新的CSP-PAN结构。
  • Head:用的依旧是YOLOv3 Head

YOLOv5整体结构见下:

接下来逐一介绍下需要注意的点。

“ConvBNSiLU”表示卷积层+BN+SiLU激活函数。SiLU的全称是:Sigmoid Linear Unit,公式为:

\[f(x) = x \cdot sigmoid(x) = \frac{x}{1+e^{-x}}\]

SiLU激活函数和ReLU激活函数的比较见下:

“k6, s2, p2, c64”是卷积层的参数,“k”是卷积核的大小,“s”指的是步长,“p”是padding的圈数,“c”是输出通道数。

之前的YOLOv5版本中,输入图像一开始会先进入一个Focus结构:

但是在新版YOLOv5中,作者将Focus结构替换成了$6 \times 6$卷积,这一修改提高了效率。

SPPF是基于SPP进行的修改,SPPF的速度比SPP快两倍多。

作者对PAN结构的修改就是添加了CSP结构。

3.Data Augmentation Techniques

YOLOv5使用的data augmentation方法见下。

Mosaic Augmentation

将4幅图像合成一幅。

Copy-Paste Augmentation

Random Affine Transformations

包括图像的随机旋转、缩放、平移和剪切。

MixUp Augmentation

将2幅图像线性组合在一起。

Albumentations

一个强大的image augmentation库,支持多种augmentation技术。

HSV Augmentation

随机修改图像H、S、V的值。

Random Horizontal Flip

4.Training Strategies

YOLOv5使用了一些复杂的训练策略来提升性能,它们包括:

  • Multiscale Training:输入图像随机缩放0.5~1.5倍。
  • AutoAnchor:即通过k-means聚类得到anchor,和YOLOv2中类似。
  • Warmup and Cosine LR Scheduler:学习率调整策略。Warmup见链接,Cosine LR Scheduler见链接
  • Exponential Moving Average (EMA):使用EMA来稳定训练过程并减少泛化误差。
  • Mixed Precision Training:一种以半精度格式(half-precision format,从32 bit的精度降低到16 bit)进行运算的方法,可减少内存使用并提高计算速度。
  • Hyperparameter Evolution:自动调整超参数以达到最优性能。

5.Additional Features

5.1.Compute Losses

YOLOv5的loss有以下3部分组成:

  • Classes Loss (BCE Loss)
  • Objectness Loss (BCE Loss)
  • Location Loss (CIoU Loss)

最终的loss function可表示为:

\[Loss = \lambda_1 L_{cls} + \lambda_2 L_{obj} + \lambda_3 L_{loc}\]

接下来简单说下CE Loss和BCE Loss的区别。

  1. Cross-Entropy Loss(CE Loss)
    • 用于多分类问题,一般搭配softmax函数使用。
    • 公式:$CE\ Loss = - \sum_{i=1}^N y_i \log (\hat{y}_i)$。$y_i$是真实标签的概率分布(one-hot编码),$\hat{y}_i$是模型预测的概率分布,$N$是样本数量。
  2. Binary Cross-Entropy Loss(BCE Loss)
    • 用于二分类问题,一般搭配sigmoid函数使用。
    • 公式:$BCE\ Loss = -\frac{1}{N} \sum_{i=1}^N [ y_i \log(\hat{y}_i) + (1-y_i) \log (1-\hat{y}_i) ]$。$y_i$是真实标签(0或1),$\hat{y}_i$是模型的预测结果,$N$是样本数量。

在分类问题中,如果类别间不互斥,则需采用sigmoid+BCE当作多个二分类问题处理。如果遇到类别互斥的情况,则使用sigmoid+BCE化为多个二分类问题,或者也可以直接用softmax+CE。

5.2.Balance Losses

objectness losses在三个输出层(P3P4P5)上的权重是不一样的。

\[L_{obj} = 4.0 \cdot L_{obj}^{small} + 1.0 \cdot L_{obj}^{medium} + 0.4 \cdot L_{obj}^{large}\]

5.3.Eliminate Grid Sensitivity

参见:Eliminate Grid Sensitivity

5.4.Build Targets

参见:Using multiple anchors for a single ground truth

6.Conclusion

YOLOv5不同变体之间的区别主要在于:1)网络深度,即CSP block的数量;2)网络的宽度,即卷积核的数量。

在检测任务上的性能:

在分割任务上的性能(YOLOv5 v7.0):

在分类任务上的性能:

7.参考资料

  1. 深入浅出Yolo系列之Yolov5核心基础知识完整讲解