一、提出原因
CSPNet是从网络结构体系角度提出的跨阶段局部网络,主要有以下几个目的:
(1)增强CNN的学习能力,并且在轻量化的同时保持准确性
神经网络推理过程中计算量过高是网络优化中的梯度信息重复所导致的。CSPNet将梯度的变化从头到尾集成到特征图中,这样就可以在减少了计算量的同时可以保证准确率。
(2)降低计算瓶颈
过高的计算瓶颈会导致更多的周期来完成神经网络的推理过程,或者一些算术单元经常处于空闲状态。因此,如果能在CNN的每一层上均匀地分配计算量,就能有效地提高每个计算单元的利用率,从而减少不必要的能耗。
(3)降低内存成本
在特征金字塔生成过程中采用跨通道池来压缩特征映射,可以减少内存使用。
二、CSPNet结构分析
CSPNet不单单是一个网络,更是一种可移植的思想方法,可以与多种网络结构结合。
2.1 DenseNet
(1)DenseNet的每个阶段包含一个稠密块和一个过渡层,**Dense Block(稠密块)**将之前所有层的输出特征连接起来,作为下一层的输入,最大化 cardinality(分支路径的数量)。稠密块为了特征融合,相当于yolov2中PassThrough层。transition layers放在两个Dense Block中间,是因为每个Dense Block结束后的输出通道数很多,要使用1*1的卷积核来降维。
这将导致稠密层反复学习同样的梯度信息,优点:特征重复使用。
2.2 跨阶段局部DenseNet
所提出的CSPDenseNet保留了DenseNet特性重用特性的优点,但同时通过截断梯度流防止了过多的重复梯度信息。(具体为何数学公式推导)该思想通过设计一种分层的特征融合策略来实现,并应用于局部过渡层。
2.3 局部稠密块
设计局部稠密块(通过特征融合实现)的目的是:
1、省参数。在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半。对于工业界而言,小模型可以显著地节省带宽,降低存储开销。
2、省计算。达到与 ResNet 相当的精度,DenseNet 所需的计算量也只有 ResNet 的一半左右。计算效率在深度学习实际应用中的需求非常强烈。
3、抗过拟合。DenseNet 具有非常好的抗过拟合性能,尤其适合于训练数据相对匮乏的应用。对于 DenseNet 抗过拟合的原因有一个比较直观的解释:神经网络每一层提取的特征都相当于对输入数据的一个非线性变换,而随着深度的增加,变换的复杂度也逐渐增加(更多非线性函数的复合)。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet 可以综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。。
4、泛化性能更强。如果没有data augmention,CIFAR-100下,ResNet表现下降很多,DenseNet下降不多,说明DenseNet泛化性能更强。
2.4 局部传输层
设计局部过渡层的目的是使「梯度组合的差异最大」。局部过渡层是一种层次化的特征融合机制,它利用梯度流的聚合策略来防止不同的层学习重复的梯度信息。在这里,作者设计了两个CSPDenseNet变体来展示这种梯度流截断是如何影响网络的学习能力的。
上图中的 © 和 (d) 展示了两种不同的融合策略:
「Fusion First」:是将两部分生成的feature map进行拼接,然后进入过渡层。如果采用这种策略,将会损失大量的梯度信息。
「Fusion Last」:对于fusion last策略,来自稠密块的输出将经过过渡层,然后与来自Part1的feature map进行连接。如果采用这种策略,由于梯度流被截断,梯度信息将不会被重用。