1. 基本概念
YOLOv5模型结构主要包括以下组成部分:
-
输入端:YOLOv5的输入端采用了多种技术来增强模型的性能,包括Mosaic数据增强、自适应锚框计算、以及自适应图片缩放。这些技术有助于提高模型的泛化能力和适应不同尺寸的输入图像。
-
Backbone:Backbone部分是YOLOv5模型的核心,它采用了CSP-Darknet53结构。这种结构结合了CSP(Cross Stage Partial Network)技术和Darknet架构,通过减少计算量和参数数量同时保持高效的特征提取能力。此外,Focus结构作为一种有效的特征融合技术,在Backbone的开始部分被使用,以提高模型对小目标的检测能力。
-
Neck:Neck部分采用了FPN(Feature Pyramid Networks)+PAN(Path Aggregation Network)结构,这种结构能够在不同的特征图层次上进行检测,融合来自不同特征图层次的信息,从而提高目标检测的性能。
-
Prediction:在Prediction部分,YOLOv5使用了CIOU_Loss作为损失函数,这种损失函数可以缓解目标检测中类别不平衡的问题,提高模型的性能。此外,非极大值抑制(NMS)技术也在输出端被应用,对重叠的目标框进行处理,以得到最终的检测结果。
2.输入端
YOLOv5的输入端采用了多种技术来增强模型的性能,包括Mosaic数据增强、自适应锚框计算、以及自适应图片缩放。
2.1 Mosaic数据增强
Mosaic图像增强是一种数据增强技术,通过将多张图片按照一定比例组合成一张图片,以增加数据的多样性和丰富性,从而提高模型的训练效果和泛化能力。
Mosaic图像增强的原理主要涉及以下几个步骤:
- 构建底图:首先,构建一张较大的底图,其尺寸通常大于输入图像的尺寸,例如2176*2176,并且底图通常为灰色(R114,G114,B114)。
- 选择拼接点:在底图上选择一个拼接点,这个点通常位于底图的中心位置,例如点A(544,544)和点B(1632,1632)限定的矩形内。
- 图像裁剪与拼接:随机选择四张图像,根据之前确定的拼接点,分别在这四张图像上裁剪出相应的区域,并将这些区域拼接到底图上。
实战代码模块的YOLOv5s的项目代码中,设置了两种类型,分别是Mosaic4 load和Mosaic9 load,这是两种不同的数据增强方式,它们的区别在于使用的图像数量不同。
- Mosaic4 load会随机选择4张不同的图像,并将它们拼接在一起,形成一张包含4个不同图像的大图像。然后,将大图像作为训练集中的一张图像,对其进行数据增强操作,如随机裁剪、大小变换等。这样可以增加训练集的多样性和难度,提高目标检测模型的鲁棒性和泛化能力。
- Mosaic9 load则会随机选择9张不同的图像,并将它们拼接在一起,形成一张包含9个不同图像的大图像。然后,对大图像进行数据增强操作,如随机裁剪、大小变换等。这样可以进一步增加训练集的多样性和难度,提高模型的鲁棒性和泛化能力。
总之,Mosaic4 load和Mosaic9 load都是用于数据增强的方法,它们的区别在于使用的图像数量不同,Mosaic9 load使用的图像数量更多,相应地增加了训练集的多样性和难度,但也增加了计算量和训练时间。
Mosaic图像增强的优点包括:
- 增加数据多样性:通过组合多张图片,可以生成大量新的、具有丰富背景和目标的训练样本,从而增加模型的泛化能力。
- 提高batch_size:由于四张图片拼接在一起,相当于在一个batch中提供了更多的信息,这在训练深度学习模型时可以提高训练效率和准确性。
然而,Mosaic图像增强也存在潜在的缺点,特别是在处理包含小目标的数据集时。如果数据集中本身就有很多小目标,数据增强之后可能会导致这些小目标在拼接后的图像中变得更小,从而影响模型的泛化能力。因此,在使用Mosaic图像增强时,需要权衡其带来的好处与可能带来的问题,确保模型训练的效果和泛化能力达到最佳。
补充:
YOLOv5图像增强支持多种模式,包括以下几种:
- Mosaic模式:将四张不同的图像拼接成一张图像,用于增加数据集的多样性。
- Random模式:包含多种图像增强方式,如随机缩放、随机裁剪、随机旋转、随机亮度调整、随机对比度调整等,可以随机地选择其中一种或多种方式进行图像增强。
- MixUp模式:将两张不同的图像进行混合,用于增加数据集的多样性和防止过拟合。
- CutMix模式:将两张不同的图像进行裁剪混合,用于增加数据集的多样性和防止过拟合。
- GridMask模式:通过在图像中加入遮罩,可以增加数据集的多样性和防止过拟合。
- AutoAugment模式:通过搜索最优的数据增强策略来提高模型的性能。
2.2 自适应锚框计算
自适应锚框计算是一种在目标检测模型中,特别是YOLO系列模型中,用于优化锚框设置的方法。这种方法旨在根据训练数据集的特性,自动调整锚框的大小和数量,以提高模型的检测性能。自适应锚框计算的实现通常涉及以下几个步骤:
-
数据预处理:在进行锚框计算之前,通常需要对训练数据进行预处理,包括图像的缩放、裁剪、归一化等操作,以确保输入数据的一致性和标准化。
-
白化操作:白化操作旨在去除输入数据的冗余信息,通过降低特征之间的相关性并使所有特征的方差相等,从而优化数据的分布,便于后续的锚框计算。
-
锚框计算:根据预处理后的数据,使用聚类算法(如K-means算法或其改进版K-means++算法)对目标框的尺寸进行聚类,以找到与数据集最匹配的锚框尺寸。这个过程考虑了目标框的大小和形状分布,以确保锚框能够覆盖大多数目标的大小和形状变化。
-
遗传算法:在某些情况下,遗传算法被用来优化锚框的选择,通过模拟自然选择和遗传进化的过程,搜索到最优的锚框配置。
-
调整与验证:根据计算结果调整锚框的设置,并在验证集上进行验证,以确保新的锚框设置能够提高模型的检测性能。
通过自适应锚框计算,YOLO系列模型能够更好地适应不同的数据集,提高目标检测的准确性和效率。
自适应锚框计算的方法主要有两种:
- Anchor-free方法:该方法直接回归目标的位置和尺寸,不需要使用锚框。典型的Anchor-free方法包括CenterNet和CornerNet等。
- Anchor-based方法:该方法使用锚框来检测目标,但是锚框的大小和宽高比等参数是根据输入图像自适应计算的。典型的Anchor-based方法包括RetinaNet和FSAF等。
总之,自适应锚框的方法可以避免手动设置锚框参数的问题,提高目标检测的精度和鲁棒性。同时,自适应锚框的方法也是目标检测领域的一个研究热点。
而 YOLOv5使用的是一种名为ATSS(Adaptive Training Sample Selection)的自适应锚框计算方法。
ATSS是一种基于Anchor-based的目标检测算法,它通过学习的方式自动计算出最适合输入图像的锚框参数,而不需要手动设置。ATSS算法的核心思想是,在训练过程中,根据样本与锚框的匹配度(即交并比IoU),自适应地选择正负样本,从而有效地降低了难样本的影响,并提高了检测精度。ATSS算法在YOLOv5中的应用,使得YOLOv5在目标检测任务中取得了较为出色的性能表现。
2.3 自适应图片缩放
自适应图片缩放是一种常用的技术,可以用于图像识别和目标检测任务,如在YOLO(You Only Look Once)中。在YOLO中,自适应图片缩放是一种基于目标尺度的图像缩放方式,旨在自适应地缩放输入图像的尺寸,以适应不同尺度目标的检测,从而提高检测精度和鲁棒性。
以YOLOv5s为例,自适应图片缩放的原理和步骤如下:
- 计算缩放比例:首先,根据原始图片的大小和输入到网络图片的大小计算缩放比例。
- 计算缩放后的图片大小:接着,根据原始图片的大小和计算出的缩放比例,确定缩放后的图片大小。
- 计算黑边填充数值:特别地,对于短边进行缩放时,还需要计算黑边填充的数值,以确保长边被裁剪到特定的尺寸(如416像素)。
- 仅在模型推理阶段执行:需要注意的是,这一操作仅在模型推理阶段执行。在模型训练阶段,仍然采用传统的方法,即将原始图片裁剪到固定大小(如416x416像素)。
YOLOv5s采用自适应图片缩放的主要目的是解决目标检测中存在的尺度不一致问题,通过这种方式,模型能够更好地适应不同大小的目标,从而提高检测的准确性和鲁棒性。
3. Backbone层
Backbone部分是YOLOv5模型的核心,主要由Focus结构以及CSP结构组成。
3.1 Focus结构
Focus结构是一种特殊的网络结构,用于对输入特征图进行下采样,同时减少计算量和参数量,同时保留输入特征图中的重要信息,以提高模型的特征提取能力。这种结构主要应用于YOLOv5的各个卷积块的第一个卷积层,以实现对输入特征图的下采样和特征压缩。
具体操作:
以YOLOv5s为例,当原始640×640×3的图像输入Focus结构时,具体操作如下:
- 切片操作:在图像的行和列方向上进行隔像素抽取,组成新的特征层。每幅图像可以重组为4个特征层,每个特征层的尺寸都是原图的一半(即320×320),但通道数增加到原来的4倍(即12个通道)。这是因为每隔一个像素取一个值,相当于将原图的像素信息分散到了4个互补的特征层中,且没有信息丢失。
- 堆叠与卷积:将这四个特征层进行堆叠,得到一个新的特征图(320×320×12)。然后,对这个堆叠后的特征图进行一次卷积操作,卷积核大小通常为3×3,输出通道数根据需要设定(在YOLOv5s中为32),最终得到320×320×32的特征图。
优点与特点:
- 高效下采样:Focus结构通过切片和堆叠操作实现了高效的下采样,与传统卷积下采样相比,它在减少计算量的同时保留了更多的信息。
- 增加通道数:切片操作使得输入通道数增加了4倍,这为后续层提供了更丰富的特征信息。
- 减少信息丢失:由于采用了切片而非直接的下采样操作,Focus结构在减少图像尺寸的同时避免了信息的丢失。
特别注意:
*YOLOv5的代码中有时会将Focus结构替换为卷积层。*这是因为Focus结构在实现上比较复杂,需要进行通道分离、卷积、通道拼接等操作,导致计算量较大,不利于模型的训练和推理为了简化网络结构并提高运行效率,YOLOv5的作者采用了一种策略,即将Focus结构替换为标准的卷积层,从而减少计算量和参数量。具体来说,YOLOv5中的卷积层是以步长为2的方式进行下采样的,与Focus结构类似,它可以实现对输入特征图的压缩和下采样。因此,将Focus结构替换为卷积层可以在一定程度上提高模型的训练和推理效率,同时减少代码的复杂度和开发难度。
3.2 CSP结构
CSP(Cross Stage Partial)结构是YOLOv5中的一个重要组成部分,用于构建骨干网络(backbone)。CSP结构最初在CVPR 2020中提出,可以有效地减少网络参数和计算量,同时提高特征提取的效率。
CSP结构的核心思想是将输入特征图分成两部分,一部分经过一个小的卷积网络(称为子网络)进行处理,另一部分则直接进行下一层的处理。然后将两部分特征图拼接起来,作为下一层的输入。
具体来说,CSP结构包括以下几个步骤:
- 将输入特征图分成两部分,一部分进行子网络的处理,另一部分直接进行下一层的处理。
- 在子网络中,先使用一个卷积层将输入特征图进行压缩,然后进行一系列卷积操作,最后再使用一个卷积层进行扩张。这样可以提取出相对较少的高层次特征。
- 在下一层中,将经过子网络处理的特征图与直接处理的特征图进行拼接,然后再进行一系列卷积操作。这样可以将低层次的细节特征和高层次的抽象特征结合起来,提高特征提取的效率。
CSP结构在YOLOv5中被广泛应用,包括骨干网络中的多个阶段以及头部网络(head)中的一些模块。它可以显著地减少网络的参数和计算量,同时提高特征提取的效率,从而加快模型的训练和推理速度。
CSP结构的优点和特点:
- 减少参数量和计算量:通过将输入特征图分为两部分进行处理,可以大幅减少卷积核的数量和参数量,从而降低网络的计算复杂度。
- 增加网络深度:CSP结构允许网络在保持计算效率的同时,扩展到更深的层次,从而提高网络的表达能力和检测性能。
- 提高特征表达能力:通过多个分支的卷积操作,CSP结构能够提取到更多样化的特征,有利于更好地捕捉图像中的目标信息。
- 增强特征的多样性:不同分支的卷积操作可以产生不同尺度和方向的特征图,从而增强特征的多样性,提高模型对不同目标的检测能力
Yolov5中的CSP结构实现:
在YOLOv5中,CSP结构被广泛应用于主干网络(Backbone)和颈部网络(Neck)中。具体来说,YOLOv5采用了两种CSP结构:CSP1_X和CSP2_X。
- CSP1_X:主要应用于主干网络部分。它将输入特征图分为两个分支,一个分支经过多个残差结构(如BottleneckCSP或C3模块),另一个分支则直接进行卷积操作。两个分支的结果通过拼接和卷积操作进行融合,以生成下一阶段的输入特征图。
- CSP2_X:主要应用于颈部网络部分。与CSP1_X类似,但可能包含更多的卷积层或残差组件,以适应颈部网络对特征融合和增强的需求。
4. Neck网络
YOLOv5的Neck网络是目标检测模型中的一个关键组成部分,它位于Backbone(主干网络)和Head(头部网络)之间,主要负责进一步提炼Backbone提取的特征,并进行多尺度特征融合,以提升检测性能。
在YOLOv5中,Neck网络主要采用了FPN(Feature Pyramid Networks)和PAN(Path Aggregation Network)结构相结合的方式,以实现多尺度特征的有效融合。
- FPN结构:FPN通过自顶向下的路径,将高层级的语义特征传递给低层级的特征图,从而增强低层级特征图的语义信息。这种结构有助于模型在检测小目标时能够利用到更多的上下文信息。
- PAN结构:PAN在FPN的基础上增加了自底向上的路径,将低层级的特征信息传递给高层级的特征图,进一步增强了特征图的表达能力。这种双向融合的方式使得模型能够更全面地捕捉到图像中的目标特征。
4.1 FPN结构
定义与作用:
FPN是一种用于目标检测的特征金字塔网络,它通过自顶向下的路径将高层级的语义特征传递给低层级的特征图,从而增强低层级特征图的语义信息。这种结构有助于模型在检测小目标时能够利用到更多的上下文信息。
工作原理:
- 特征图金字塔:FPN首先构建了一个特征图金字塔,其中每个层级都对应不同尺度的特征图。
- 上采样与融合:高层级的特征图通过上采样(如双线性插值)来增大其空间分辨率,然后与相邻的低层级特征图进行融合(如元素相加或拼接)。
- 卷积操作:融合后的特征图通常会经过一个卷积层来减少特征图的通道数,并进一步整合特征信息。
优点:
- FPN能够有效地利用高层级特征图的语义信息来增强低层级特征图的表达能力。
- 通过构建特征图金字塔,FPN能够同时处理不同尺度的目标,提高检测精度。
4.2 PAN结构
定义与作用:
PAN是一种路径聚合网络,它在FPN的基础上增加了自底向上的路径,将低层级的特征信息传递给高层级的特征图。这种双向融合的方式使得模型能够更全面地捕捉到图像中的目标特征。
工作原理:
- 自底向上路径:低层级的特征图通过一系列卷积层和上采样操作逐渐增大其空间分辨率,并与高层级的特征图进行融合。
- 特征融合:与FPN类似,PAN也采用了特征融合的方式,但不同的是,PAN在融合过程中既考虑了自顶向下的语义信息,又考虑了自底向上的细节信息。
- 增强特征表示:通过双向融合,PAN能够生成更具表达力的特征图,为后续的目标检测和定位提供有力的支持。
优点:
- PAN通过双向融合的方式实现了多尺度特征的有效整合和传递。
- 它能够同时利用高层级的语义信息和低层级的细节信息,提高模型的检测性能。
5.Prediction
YOLOv5的输出端主要是预测框,每个预测框由以下信息组成:
- 置信度(confidence score):表示该框内是否存在目标的概率,取值范围为0到1。
- 类别概率(class probabilities):表示该框内目标属于各个类别的概率,一般是预先定义好的类别数量。
- 边界框位置(bounding box coordinates):表示目标的位置和大小,一般用矩形框来表示。
YOLOv5中的输出层一般包括三个不同尺度的特征图,每个特征图对应不同尺度的预测框,每个预测框包含的信息如上述所述。具体地,YOLOv5在输出层通过使用anchor box来预测目标的边界框位置和大小,同时对每个anchor box对应的预测结果使用softmax函数来计算类别概率。
总之,YOLOv5的输出端可以输出图像中目标的位置、大小和类别等信息,以便后续的目标识别和跟踪等任务进行处理。
5.1 Bounding box损失函数
YOLOv5中的Bounding box损失函数采用IoU loss函数,主要用于衡量预测的边界框与真实边界框之间的差异。
IoU loss是Intersection over Union(IoU)的一种变形,它是一种用于测量预测边界框与真实边界框之间重叠程度的指标。在目标检测中,IoU通常被用来评估预测框和真实框的重叠情况,以确定预测框是否正确。
具体而言,对于每个预测边界框,我们计算其与所有真实边界框的IoU值,然后选择IoU最大的那个真实边界框作为其对应的匹配目标,从而计算出其IoU loss。
回归损失函数近些年的发展过程是:
Smooth L1 Loss → IoU Loss(2016)→ GIoU Loss(2019)→ DIoU Loss(2020)→ CIoU Loss(2020)
IOU_Loss:主要考虑检测框和目标框重叠面积。
GIOU_Loss:在IOU的基础上,解决边界框不重合时的问题。
DIOU_Loss:在IOU和GIOU的基础上,考虑边界框中心点距离的信息。
CIOU_Loss:在DIOU的基础上,考虑边界框宽高比的尺度信息。
5.2 NMS非极大值抑制
在目标检测任务中,一个物体可能被多个预测框检测出来,为了避免对同一个物体进行多次检测,需要对重复的预测框进行过滤,这个过程就是非极大值抑制(Non-maximum suppression,简称NMS)。
在YOLOv5中,NMS主要是通过以下几个步骤实现的:
- 首先,对所有预测框按照置信度从高到低进行排序。
- 然后,从置信度最高的预测框开始,依次遍历每个预测框,判断该预测框与后面所有预测框之间的IOU值是否大于一定的阈值(一般为0.5或0.6)。
- 如果IOU值大于阈值,则将该预测框从候选框列表中剔除,否则保留该预测框。
- (剔除的是相对于当前框(即置信度高的框)的预测框,这些框被认为可能是冗余的(因为它们与当前框重叠较多,且置信度较低))
- 继续遍历下一个预测框,重复上述步骤,直到所有预测框都被遍历一遍。
- 最终,保留下来的预测框就是经过NMS处理后的结果,即每个物体只对应一个预测框。
NMS算法的核心是通过比较重复预测框之间的IOU值,去除冗余的预测框,保留最优的结果。在YOLOv5中,NMS可以避免同一个物体被重复检测的问题,提高了检测的精度和效率。