赞
踩
对于传统深度学习,总是想达到一个增加速度同时精度提高的效果。而CSPNet的出现,告诉人们:这是可能的!
CSPNet解决了其他大型卷积神经网络框架Backbone中网络优化的梯度信息重复问题,将梯度的变化从头到尾地集成到特征图中,因此减少了模型的参数量和FLOPS数值,既保证了推理速度和准确率,又减小了模型尺寸。
在YOLOv4中,使用CSPDarknet53作为Backbone。CSPDarknet53对YOLOv3中使用的Darknet53做了一点改进,借鉴了CSPNet,CSPNet全称是Cross Stage Partial Networks,也就是跨阶段局部网络。CSPNet的网络结构如下图:
如果看过之前的DenseNet的相关介绍,就会发现CSPNet的结构与其实类似的。区别在于在输入部分将数据分成了两个部分:
x
0
′
x_{0'}
x0′ 和
x
0
′
′
x_{0''}
x0′′ 。然后
x
0
′
′
x_{0''}
x0′′ 的部分传入网络进行相关的DenseNet操作。
CSPNet的优点主要包括两个方面:
在CSPNet中,由于参与DenseNet 操作的基础层通道仅占原始数据的一半,可以有效解决近一半的计算瓶颈,从而减少了模型的参数量和FLOPS数值。
在DenseNet 网络中,前向传播和对应的反向传播是这样的:
我们可以发现,大量的梯度信息被重用来更新不同Dense层的权值。「这将导致无差异的稠密层反复学习同样的梯度信息。」
而在CSPNet中,前向传播和对应的反向传播是这样的:
从上面的权值更新方程可以看出,来自密集层的梯度是单独积分的。而且,没有经过密集层的特征图
x
0
′
x_{0'}
x0′ 也被单独积分。对于更新权值的梯度信息,两边不包含属于其他边的重复梯度信息。
总的来说,所提出的CSPDenseNet保留了DenseNet特性重用特性的优点,但同时通过截断梯度流防止了过多的重复梯度信息。该思想通过设计一种分层的特征融合策略来实现,并应用于局部过渡层。
假设DenseNet中一个dense block的base feature map大小为 w × h × c w × h × c w×h×c,增长率为 d d d ,总共有m个dense layers。那么,该dense block的CIO为 ( c × m ) + ( ( m 2 + m ) × d ) / 2 (c×m)+((m^2+m)×d)/2 (c×m)+((m2+m)×d)/2。与此同时,CSPDenseNet中partial dense block的CIO为 ( ( c × m ) + ( m 2 + m ) × d ) / 2 ((c×m)+(m2+m)×d)/2 ((c×m)+(m2+m)×d)/2 。虽然m和d通常远小于c,但partial dense block最多能够节省网络一半的memory traffic。
在CSPDenseNet中,存在多种特征融合策略。具体网络结构如下图所示。
其中,图(a)单路径DenseNet,图(b) 提出的CSPDenseNet:transition—>concatenation—>transition,图(c) concatenation—>transition,以及图(d) transition—>concatenation。
其中Transition layer的含义同DenseNet,是一组1x1的卷积层。上图中,不同类型的transition layer决定了梯度的结构方式,并且各有其优势:(c)图Fusion First的先将两个部分进行concatenate,然后再进行输入到Transion layer中,采用这种做法会是的大量特梯度信息被重用,有利于网络学习;(d)图中Fusion Last先将部分特征输入Transition layer,然后再进行concatenate,这样做损失了部分的梯度重用,但是由于Transition的输入维度比(c)图少,大大减少计算复杂度。论文中CSPNet采用的是图(b)中的结构,其结合了(c)(d)的结合,进一步提升了学习能力,但是也进一步提高了一些计算复杂度。
CSPDenseNet网络在降低传统网络结构模型尺寸的基础上,提高了模型的精度。在实际数据集上的验证证明了其是一个效果优异的网络框架结构,可以适合在各种各样的网络结构上使用。
关于CSPDenseNet网络结构的具体代码在下一节进行讲述。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。