Scaled-YOLOv4 简单学习笔记

参考链接:

全文翻译【Scaled-YOLOv4: Scaling Cross Stage Partial Netw】_聪明的小菠菜-CSDN博客

论文阅读笔记 之 YOLOv4 & scaled YOLOv4_流觞时光的博客-CSDN博客_scaled yolov4

这篇看着还好点,看原文有点头大

https://blog.csdn.net/kobayashi_/article/details/109960073 
Scaled-YOLOv4:CSP网络的缩放

以下仅仅是自己注意到的一些简单摘出来,作为自己复习,完整的话建议看原文和上面的两篇。

Scaled-YOLOv4感觉挺难理解,很多涉及到数学,涉及到网络的大调整。小模块改动还行,可能这也是综述和具体到方法论文的区别,后者更难理解,更深入。还是那些即插即用模块简单。

Scaled-YOLOv4

scaled-YOLOv4的设计过程如下。首先,我们重新设计YOLOv4并提出YOLOv4-CSP,然后基于YOLOv4-CSP我们开发了scale-YOLOv4。在提出的缩放YOLOv4中,我们讨论了线性缩放模型的上下边界,并分别分析了在小模型和大模型的模型缩放中需要注意的问题。因此,我们能够系统地开发YOLOv4-large和YOLOv4-tiny模型。Scaled-YOLOv4可以在速度和准确性之间取得最佳平衡,并能够在15 fps,30 fps和60 fps影片以及嵌入式系统上执行实时对象检测.

  1. 传统的模型缩放方法是更改模型的深度,即添加更多的卷积层。
  2. 后来,Zagoruyko等人。[39]考虑了网络的宽度,他们改变了卷积层的内核数以实现缩放。
  3. 随后的DenseNet [11]和ResNeXt [37]也设计了一种考虑深度和宽度的复合缩放版本。对于图像金字塔推断,这是在运行时执行增强的一种常见方法。它获取输入图像并进行各种不同的分辨率缩放,然后将这些不同的金字塔组合输入到经过训练的CNN中。最后,网络将把多组输出作为最终结果进行集成。Redmon等[26]使用以上概念来执行输入图像尺寸缩放。他们使用更高的输入图像分辨率对经过训练的Darknet53进行微调,执行此步骤的目的是获得更高的精度。

 

从表1中可以看出,缩放尺寸,深度和宽度会导致计算成本的增加。它们分别显示平方,线性和平方增加。

Wang等人提出的CSPNet [33]。可以应用于各种CNN架构,同时减少参数和计算量。此外,它还提高了准确性并减少了推理时间。我们将其应用于ResNet,ResNeXt和Darknet,并观察计算量的变化,如表2所示。

 

根据表2中的图表,我们观察到将上述CNN转换为CSPNet之后,新架构可以有效地将ResNet,ResNeXt和Darknet上的计算量(FLOP)减少23.5%,46.7%和50.0%,分别。因此,我们将CSP模型化为执行模型缩放的最佳模型。

特征图的最小化/平衡大小:为了获得最佳的计算速度权衡,我们提出了一个新的概念,即在CSPOSANet的计算块之间执行梯度截断。如果我们将原始CSPNet设计应用于DenseNet或ResNet体系结构,因为这两种体系结构的第jth层输出是第1st层至第(j – 1)th层输出的集成,因此我们必须将整个计算块作为一个整体来对待。因为OSANet的计算块属于PlainNet体系结构,所以从计算块的任何层制作CSPNet都可以实现梯度截断的效果。我们使用此功能重新规划基础层的b通道和由计算块生成的kg通道,并将它们分成具有相同通道号的两条路径,如表4所示。

当通道数为b + kg时,如果要将这些通道分为两条路径,最好的划分方法是将其分为两个相等的部分,即(b + kg)/ 2。当我们实际考虑硬件的带宽τ时,如果不考虑软件优化,则最佳值为ceil((b + kg)/2τ)×τ。我们设计的CSPOSANet可以动态调整通道分配。

卷积后保持相同数量的通道:为了评估低端设备的计算成本,我们还必须考虑功耗,影响功耗的最大因素是内存访问成本(MAC)。通常,用于卷积运算的MAC计算方法如下:

 

 

其中h,w,Cin,Cout和K分别表示特征图的高度和宽度,输入和输出的通道数以及卷积滤波器的内核大小。通过计算几何不等式,我们可以得出Cin = Cout时最小的MAC。

最小化卷积输入/输出(CIO):CIO是可以测量DRAM IO状态的指示器。表5列出了OSA,CSP和我们设计的CSPOSANet的CIO。

当kg> b / 2时,建议的CSPOSANet可以获得最佳CIO。

 图像分类和对象检测之间的最大区别在于,前者仅需要识别图像中最大成分的类别,而后者则需要预测图像中每个对象的位置和大小。在一级对象检测器中,与每个位置相对应的特征向量用于预测该位置上对象的类别和大小。更好地预测对象大小的能力基本上取决于特征向量的接受场。在CNN架构中,与接受领域最直接相关的是阶段,而特征金字塔网络(FPN)架构告诉我们,更高的阶段更适合于预测大型物体。在表7中,我们说明了感受野和几个参数之间的关系。

从表7可以明显看出,宽度缩放可以独立进行。当输入图像尺寸增加时,如果要对大型物体具有更好的预测效果,则他/她必须增加网络的深度或级数。在表7列出的参数中,{sizeinput,#stage}的复合结果影响最大。因此,在进行放大时,我们首先对sizeinput,#stage进行复合缩放,然后根据实时要求,分别对深度和宽度进行缩放。

如果上面难理解的话,重点看看与yolov4的区别

 

CSP格式的YOLOv4

YOLOv4设计用于在通用GPU上进行实时对象检测。在本小节中,我们将YOLOv4重新设计为YOLOv4-CSP,以获得最佳的速度/精度权衡。

骨干:在CSPDarknet53的设计中,跨阶段处理的下采样卷积的计算不包含在残差块中。因此,我们可以推断出每个CSPDarknet阶段的计算量为whb2(9/4 + 3/4 + 5k / 2)。根据上面推导的公式,我们知道CSPDarknet阶段仅在满足k> 1时才会比Darknet阶段具有更好的计算优势。CSPDarknet53中每个阶段拥有的剩余层数分别为1-2-8-8-4。为了获得更好的速度/精度权衡,我们将第一个CSP阶段转换为原始的Darknet残留层。

Neck:为了有效减少计算量,我们在YOLOv4中对PAN体系结构进行了CSP大小化。PAN体系结构的计算列表如图2(a)所示。它主要集成来自不同要素金字塔的要素,然后穿过两组反向的Darknet残差层,而没有快捷连接。CSP化之后,新计算列表的体系结构如图2(b)所示。此新更新有效地减少了40%的计算量。

SPP:SPP模块最初插入到脖子的第一个计算列表组的中间位置。因此,我们也将SPP模块插入CSPPAN的第一个计算列表组的中间位置。

我们使用MSCOCO 2017对象检测数据集来验证建议的可缩放YOLOv4。我们不使用ImageNet预训练模型,并且所有缩放的YOLOv4模型都是从头开始训练的,采用的工具是SGD优化器。训练YOLOv4-tiny的时间为600 epoch,而训练YOLOv4-CSP的时间为300 epoch。对于YOLOv4-large,我们先执行300个纪元,然后再使用更强大的数据增强方法训练150个纪元。对于超参数的拉格朗日乘数,例如学习率的锚点,不同数据扩充方法的程度,我们使用k均值和遗传算法来确定。附录中详细介绍了与超参数有关的所有细节。

 

 作者将模型分为 输入、backbone、neck、预测部分,其中Dense Prediction加前三部分为one-stage检测模型框架,Sparse Predition 加前三部分为two-stage 检测模型框架。这里的Neck部分主要指的是网络中对backbone提取的特征进行多尺度融合(如FPN等)或者进一步处理(注意力机制等)。并且作者也列出来各个部分目前表现较好的方案,俗称“轮子”。

YOLOv4

论文阅读笔记 之 YOLOv4 & scaled YOLOv4_流觞时光的博客-CSDN博客_scaled yolov4

YOLOv4的模型结构如下图所示:(图片来源于其它博客,上面有该大佬信息)

 可以看出整体结构与YOLOv3很相似,只是对各个模块都进行了改进,用于预测的head部分没有改动,仍沿用了YOLOv3的head。backbone 使用了添加了CSP结构的darknet53,Neck部分使用了PANet结构,在下面的Scaled YOLOv4结构中可能更清楚。并且在其中也引进了SPP结构,这个来源于2015年左右何凯明大佬团队提出的SPPNet。这几部分后面都会进一步介绍。

Scaled YOLOv4

如上图所示为Scaled-YOLOv4结构,可分为三个模型,分别为面向云GPU的YOLOv4-large,面向常规GPU的YOLOv4-CSP,面向小型轻量级GPU的YOLOv4-Tiny。
本文将重点介绍YOLOv4-CSP结构中的各个部分。
 Backbone

YOLOv4以及Scaled YOLOv4的backbone都采用添加了CSP结构的DarkNet结构,只是其中各块的层数以及规模不同。由结构图可以看到,backbone主要由CSPblock组成,而CSP结构取自于CSPNet论文[4]

CSP结构

 

如上图所示为一个CSPblock结构,而图中红框区域表示为一个残差块结构[5],图中的 m 表示这个CSPblock中残差块的数量。

前文也提到了CSP来源于CSPNet,这一结构工作原理如上图,输入特征图首先经过一个1×1卷积层,而后将得到的特征图在深度维度上一分为二,一部分输入到后续卷积层中进行处理,而另一部分直接跳层与第一部分多次卷积后的结果进行拼接作为这一block的输出结果。这样做的主要目的是为了减少计算量。通过计算得到相比于DarkNet,CSPDarkNet能够减少约50%的计算量,大幅提高了计算速度,并且实验结果证明准确度并无对准确度并无大幅影响。

值得一提的是,YOLOv4-CSP中的CSP结构并不是直接将特征图分为两部分分别处理,而是设定最初的1×1卷积层的输出通道为c/2(原通道数为c),而后再将其分别输入到后续卷积层以及跳层用于concat操作。

 PAN结构

 

如上图所示为YOLOv4-CSP的网络结构,其中的Neck部分为PAN结构,head部分(图中的灰色部分)沿用YOLOv3的head。
PAN结构如下图所示:

 

这一结构来源于分割领域的PANet[6],其简要来说是在FPN的基础上增加了一个自底向上的传输路径(Bottom-up Path Augmentaion)。因为底层特征更能提供边缘等细节特征,高层特征更提供深度的语义特征,FPN在传统的卷积网络基础上增加了自上而下的特征融合通道,能够增加高维特征的利用率,因为分割的=需要像素级别的准确度,因此PAN在FPN基础上增加自下而上的通路以提升定位精度。

在YOLOv4中,对PAN结构进行了一处小的改进,在不同尺度特征融合时并没有采用原本的直接相加的方式,而是采用了concat方式将特征图进行拼接,如下图所示,左侧为原来的相加融合,右侧为YOLOv4的融合方式:

 

SPP结构

从结构图中可以发现还有一个CSPSPP块,这是在CSPblock的结构中增加了SPP结构组成的。SPP来源于何凯明团队提出的SPPNet,这篇论文的发表时间还在fast-RCNN之前,并且fast-RCNN也是在其基础上被提出的。

当时神经网络中包含全连接层,进而导致网络输入图片大小必须为固定尺寸,SPP结构最初在SPPNet中被提出就是为了解决此问题而提出的。

SPPNet中SPP结构如下:

 

可以看到最开始的SPP结构输出为一个一维向量,用于输入到全连接层。其主要工作原理为:将输入特征图在不同尺度上划分为几个区域,例如1×1,2×2,4×4,然后分别对这每一个小块进行最大池化,最后得到1+4+16 长的向量。

在后来的各种全卷积网络中对SPP进行了针对全卷积网络的改进,改进后的结构如下图所示:

 

在进行池化操作时对特征图首先进行了Padding后再进行步长为1的池化,因此池化后得到的特征图与原特征图大小相同,而后再将这些得到的特征图concat,输入到后面的卷积层中用于计算。

YOLOv4这里引进SPP结构的主要原因是SPP结构能够增大感受野,并且也能够融合不同尺度的特征。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clark-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值