1.原理:YOLOv5继承了YOLO系列算法的核心优势,即通过一次前向传播即可完成图像中所有目标的位置和类别预测。采用CSPDarknet53作为其基础网络架构,CSPDarknet53是一种轻量级且强大的网络,能够在保持检测速度的同时提供较高的精度。算法中融入了特征金字塔网络(FPN)和路径聚合网络(PANet),这两者共同作用,通过不同尺度的特征图融合,增强了模型对各种大小物体的检测能力。此外自适应锚框计算(Anchors)的使用帮助模型更准确预测物体的位置,而日志空间锚框则进一步优化了小物体的检测性能。在预测阶段,非极大值抑制(NMS)技术被用来去除多余的预测框,确保每个物体只被标记一次,从而提高检测的精确性。
2.网络结构:
YOLOv5s主要由 Backbone、Neck 和Head 三部分组成,其中:Backbone 主要负责对输入图像进行特征提取,Neck 负责对特征图进行多尺度特征融合,并把这些特征传递给预测层,Head 进行最终的回归预测。
(1)Backbone骨干网络:骨干网络是指用来提取图像特征的网络,它的主要作用是将原始的输入图像转化为多层特征图,以便后续的目标检测任务使用。Backbone中的主要结构有Conv模块、CSP/C3模块、SPPF模块。
1)Conv模块:Conv模块是卷积神经网络中常用的一种基础模块,它主要由卷积层、池化层、BN层和激活函数组成。YOLOv5的Conv模块采用卷积层、BN层和激活函数(SILU)构成,结构图如图2-2所示。卷积层是卷积神经网络中最基础的层之一,用于提取输入特征中的局部空间信息。卷积核的大小、步长、填充方式等超参数决定了卷积层的输出大小和感受野大小。卷积神经网络中,卷积层通常被用来构建特征提取器。BN层是在卷积层之后加入的一种归一化层,用于规范化神经网络中的特征值分布。用于加速训练过程,提高模型泛化能力,减轻模型对初始化的依赖性。BN层的输入为一个batch的特征图,它将每个通道上的特征进行均值和方差的计算,并对每个通道上的特征进行标准化处理。标准化后的特征再通过一个可学习的仿射变换(拉伸和偏移)进行还原,从而得到BN层的输出。激活函数是一种非线性函数,用于给神经网络引入非线性变换能力常用的激活函数包括sigmoid、ReLU、LeakyReLU、ELU等。它们在输入值的不同范围内都有不同的输出表现,可以更好地适应不同类型的数据分布。
2)C3模块:C3模块是YOLOv5网络中的一个重要组成部分,其主要作用是增加网络的深度和感受野,提高特征提取的能力。C3模块是由三个Conv块构成的,C3模块中的第一个Conv块的步幅为2,红色方框内两个Conv组成Bottleneck,这意味着它会将特征图的尺寸减半。这样做的目的是为了增加网络的感受野,同时减少计算量。通过将特征图的尺寸减半,可以使网络更加关注物体的全局信息。第二个和第三个Conv块的步幅为1,这意味着它们不会改变特征图的尺寸,目的是为了保持特征图的空间分辨率,从而更好地保留物体的局部信息。同时,这两个Conv块的主要作用是进一步提取特征,增加网络的深度和感受野。C3模块中的Conv块采用的都是3x3的卷积核。在每个Conv块之间,还加入了BN层和LeakyReLU激活函数,以提高模型的稳定性和泛化性能。总的来说,C3模块通过增加网络的深度和感受野,提高了特征提取的能力。这对于目标检测等计算机视觉任务来说非常重要,因为这些任务需要对物体进行准确的识别和定位,而准确的识别和定位需要良好的特征提取能力。
3)SPPF模块:SPP模块是一种池化模块,通常应用于卷积神经网络中,旨在实现输入数据的空间不变性和位置不变性,以便于提高神经网络的识别能力。在SPP模块中,首先对输入特征图进行不同大小的池化操作,以得到一组不同大小的特征图,然后将这些特征图连接在一起,并通过全连接层进行降维,最终得到固定大小的特征向量。
1)对最后一层特征图进行上采样,得到更精细的特征图;
2)将上采样特征图与上一层特征图进行融合,得到更丰富的特征表达;
3)重复以上两个步骤,直到达到最高层。
自下向上部分主要是通过使用一个卷积层来融合来自不同层次的特征图,主要分为以下几步:
1)对最底层特征图进行卷积,得到更丰富的特征表达;
2)将卷积后的特征图与上一层特征图进行融合,得到更丰富的特征表达;
3)重复以上两个步骤,直到达到最高层。
最后,自顶向下部分和自下向上部分的特征图进行融合,得到最终的特征图,用于目标检测。
(3)Head头部网络:目标检测头是用来对特征金字塔进行目标检测的部分,它包括了一些卷积层、池化层和全连接层等。在 YOLOv5 模型中,检测头模块主要负责对骨干网络提取的特征图进行多尺度目标检测。主要包括三个部分,包括Anchors、Classification和Regression,此外,YOLOv5还使用了一些技巧来进一步提升检测精度,比如GIoU loss、Mish激活函数和多尺度训练等。
Anchors:用于定义不同大小和长宽比的目标框,通常使用 K-means 聚类对训练集的目标框进行聚类得到,可以在模型训练之前进行计算,存储在模型中,用于预测时生成检测框。
Classification:用于对每个检测框进行分类,判断其是否为目标物体,通常采用全连接层加 Softmax 函数的形式对特征进行分类。
Regression:用于对每个检测框进行回归,得到其位置和大小,通常采用全连接层的形式对特征进行回归。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/23467.html