文章目录
YOLOv4是一种先进的目标检测算法,它在YOLO系列的基础上进行了多项改进和优化。
一、整体网络结构
1.v4网络结构图
2.网络整体改进
- YOLOv3:采用Darknet53作为主干网络(Backbone),具有全卷积网络结构。它使用FPN(Feature Pyramid Networks)作为特征融合方法,实现了多尺度特征图的融合,从而提高了对不同大小目标的检测能力。
- YOLOv4:在YOLOv3的基础上进行了多项改进。主干网络采用了CSPDarknet53,这是Darknet53的增强版,通过引入CSP(Cross Stage Partial)结构,增强了网络的学习能力,同时降低了计算复杂度。此外,YOLOv4还整合了多种先进的目标检测技术,如空间金字塔池化(SPP)、注意力机制、PAN(Path Aggregation Network)结构和Mish激活函数等。
二、spp-net网络
1.来源
SPP-Net,即空间金字塔池化网络,是何凯明《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》中提出的一种网络结构,可以不用考虑图像大小,输出图像固定长度,并且在图像变形情况下表现稳定。这种方法在速度上比R-CNN快24-102倍,并且在不同的数据集上面得到验证。
2.核心思想
SPP-Net的核心思想是在卷积层与全连接层之间加入空间金字塔池化层,以实现对任意尺寸输入图像的处理。空间金字塔池化层通过将输入特征图划分为不同大小的网格块,并对每个网格块进行池化操作,从而得到固定长度的特征向量。这种池化方式不仅保留了图像的重要特征,还使得网络能够处理不同尺寸的输入。
3.SPP-Net的主要贡献
- 减少卷积计算:SPP-Net在最后一个卷积层后接入了金字塔池化层,保证传到下一层全连接层的输入固定,从而避免了RCNN中对每个候选区域进行重复卷积计算的问题,大大减少了计算量。
- 输入图片任意:在普通的CNN机构中,输入图像的尺寸往往是固定的(比如224*224像素),输出则是一个固定维数的向量。SPP-Net在普通的CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。
三、CSP-net网络
CSPNet是作者Chien-Yao Wang于2019年发表的论文《CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN》中提出的一种新的网络结构,它可以增强CNN的学习能力,并且在轻量化的同时保持准确性。
1.做法
1.将输入特征图按照一定比例(如0.5)分成两部分。
2.一部分特征图经过一个或多个Dense Block(密集连接块)进行处理,得到丰富的特征表示。
3.另一部分特征图则直接进行卷积操作,保持其原始信息。
4.将两部分特征图的输出进行合并(如通过concatenate操作),形成最终的特征图。
2.主要解决问题
CSPNet主要是为了解决三个问题:
- 增强CNN的学习能力;降低内存成本;以及减少计算瓶颈。
- 它通过将梯度的变化从头到尾地集成到特征图中,从而减少了计算量的同时保证了准确率。在特征金字塔生成过程中采用跨通道池来压缩特征映射,可以减少内存使用。
- 同时,CSPNet方法可以减少模型计算量和提高运行速度,还能和多种网络结构结合在一起。
四、CBAM
1.定义
CBAM(Convolutional Block Attention Module)是一种针对深度神经网络的注意力机制模块,用于提高模型在分类、检测和分割等任务中的表现。它结合了通道注意力和空间注意力,几乎可以嵌入任何CNN网络中,在稍微增加一点计算量和参数量的情况下,可以大大增强模型性能。
CBAM模块主要包含两个子模块:通道注意力模块(Channel Attention Module, CAM)和空间注意力模块(Spatial Attention Module, SAM)。v4中用到的是SAM模块。
2.空间注意力模块(SAM)
在通道注意力模块的输出特征图上,首先进行通道维度的平均池化和最大池化,得到两个二维空间描述符。
这两个描述符通过7x7的卷积层(或3x3的卷积层,取决于输入特征图的大小)进行融合。
然后,通过sigmoid激活函数得到空间注意力权重。
最后,将权重与通道注意力模块的输出特征图相乘,实现空间维度的加权。
五、PAN结构
FPN(Feature Pyramid Networks)是一种用于目标检测和语义分割的深度学习模型,它能够有效地处理不同尺度的目标。
FPN使用图像金字塔的思想,通过对原始图像进行多尺度处理,构造出一个类似真实金字塔的特征金字塔。在特征金字塔的每一层,FPN都会提取出不同的特征,并进行相应的预测。这样,对于不同尺度的目标,FPN可以在不同的特征层上进行预测,从而获得更好的检测效果。
FPN的主要优点是它能够在不增加计算量和内存开销的情况下提高目标检测的精度。此外,FPN还可以通过横向连接和自上而下(top-down)的模型来进一步增强特征信息,提高目标检测的性能。
在 FPN 的基础上,一些研究引入了类似于 PAN结构来增强特征金字塔的路径连接。
这种结构通常包括自底向上和自顶向下的路径,以及额外的横向连接,以提高特征融合的效果。
六、Mish激活函数
计算公式:
M i s h ( x ) = x ∗ t a n h ( s o f t p l u s ( x ) ) Mish(x) = x * tanh(softplus(x)) Mish(x)=x∗tanh(softplus(x))
其中,tanh是双曲正切函数,softplus是平滑函数,其定义为:
s o f t p l u s ( x ) = l n ( 1 + e x ) softplus(x) = ln(1 + e^x) softplus(x)=ln(1+ex)
- Mish激活函数:与ReLU相比,Mish函数在训练过程中能够使梯度更加平滑,避免了神经元的死亡问题,从而提高了模型的准确率。
- 下面是ReLU(左)和Mish(右)激活函数的图像