ResNet全家桶

ResNet

2015 年,ResNet 横空出世,一举斩获 CVPR 2016 最佳论文奖,而且在 Imagenet 比赛的三个任务以及 COCO 比赛的检测和分割任务上都获得了第一名。四年过去,这一论文的被引量已超 40000 次.。
我们知道,增加网络深度后,网络可以进行更加复杂的特征提取,因此更深的模型可以取得更好的结果。但事实并非如此,人们发现随着网络深度的增加,模型精度并不总是提升,并且这个问题显然不是由过拟合(overfitting)造成的,因为网络加深后不仅测试误差变高了,它的训练误差竟然也变高了。作者提出,这可能是因为更深的网络会伴随梯度消失/爆炸问题,从而阻碍网络的收敛。作者将这种加深网络深度但网络性能却下降的现象称为退化问题(degradation problem)。

ResNet中的Bottleneck结构和1*1卷积

ResNet50起,就采用Bottleneck结构,主要是引入1x1卷积。我们来看一下这里的1x1卷积有什么作用:

  • 对通道数进行升维和降维(跨通道信息整合),实现了多个特征图的线性组合,同时保持了原有的特征图大小;
  • 相比于其他尺寸的卷积核,可以极大地降低运算复杂度;
  • 如果使用两个3x3卷积堆叠,只有一个relu,但使用1x1卷积就会有两个relu,引入了更多的非线性映射;

ResNet全家桶
我们来计算一下1*1卷积的计算量优势:首先看上图右边的bottleneck结构,对于256维的输入特征,参数数目:1x1x256x64+3x3x64x64+1x1x64x256=69632,如果同样的输入输出维度但不使用1x1卷积,而使用两个3x3卷积的话,参数数目为(3x3x256x256)x2=1179648。简单计算下就知道了,使用了1x1卷积的bottleneck将计算量简化为原有的5.9%,收益超高。

ResNet的网络设计规律

ResNet全家桶
整个ResNet不使用dropout,全部使用BN。此外,回到最初的这张细节图,我们不难发现一些规律和特点:

  • 受VGG的启发,卷积层主要是3×3卷积;
  • 对于相同的输出特征图大小的层,即同一stage,具有相同数量的3x3滤波器;
  • 如果特征地图大小减半,滤波器的数量加倍以保持每层的时间复杂度;(这句是论文和现场演讲中的原话,虽然我并不理解是什么意思)
  • 每个stage通过步长为2的卷积层执行下采样,而却这个下采样只会在每一个stage的第一个卷积完成,有且仅有一次。
  • 网络以平均池化层和softmax的1000路全连接层结束,实际上工程上一般用自适应全局平均池化 (Adaptive Global Average Pooling);

从图中的网络结构来看,在卷积之后全连接层之前有一个全局平均池化 (Global Average Pooling, GAP) 的结构。

总结:

  • 相比传统的分类网络,这里接的是池化,而不是全连接层。池化是不需要参数的,相比于全连接层可以砍去大量的参数。对于一个7x7的特征图,直接池化和改用全连接层相比,可以节省将近50倍的参数,作用有二:一是节省计算资源,二是防止模型过拟合,提升泛化能力;
  • 这里使用的是全局平均池化,但我觉得大家都有疑问吧,就是为什么不用最大池化呢?这里解释很多,我查阅到的一些论文的实验结果表明平均池化的效果略好于最大池化,但最大池化的效果也差不到哪里去。实际使用过程中,可以根据自身需求做一些调整,比如多分类问题更适合使用全局最大池化(道听途说,不作保证)。如果不确定话还有一个更保险的操作,就是最大池化和平均池化都做,然后把两个张量拼接,让后续的网络自己学习权重使用。

为了更好地理解,大家看一下何凯明的现场演讲,有助于更好地理解ResNet,CVPR2016 最佳论文, ResNet 现场演讲:
https://zhuanlan.zhihu.com/p/54072011

ResNext

ResNeXt是FAIR的大神们(恺明、Ross、Piotr等)对ResNet的改进。其关键核心模块如下所示。尽管ResNeSt与ResNeXt比较类似,不过两者在特征融合方面存在明显的差异:ResNeXt采用一贯的Add方式,而ResNeSt则采用的Cat方式。这是从Cardinal角度来看,两者的区别所在。这点区别也导致了两种方式在计算量的差异所在。其中,inception block人工设计痕迹比较严重,因此引入参数K,直接将子模型均分,有K个bottleneck组成。如下图所示。
ResNet全家桶

ResNeSt

ResNeSt 提出了一种模块化 Split-Attention 块,可以将注意力分散到若干特征图组中。按照 ResNet 的风格堆叠这些 Split-Attention 块,研究者得到了一个 ResNet 的新变体,称为 ResNeSt。它保留了整体的 ResNet 结构,可直接用于下游任务,但没有增加额外的计算量。主要是基于 SENet,SKNet 和 ResNeXt,把 attention 做到 group level。
Split-Attention 块:
Split-Attention 块是一个由特征图组和 split attention 运算组成的计算单元,下图展示了 Split-Attention 块的整体思路:
ResNet全家桶
特征图组(Feature-map Group)
与 ResNeXt 块一样,输入的特征图可以根据通道维数被分为几组,特征图组的数量由一个基数超参数 K 给出,得到的特征图组被称为基数组(cardinal group)。研究者引入了一个新的底数超参数 R,该参数规定了基数组的 split 数量。

然后将块输入 X 根据通道维数 X = {X1, X2, …XG} 分为 G = KR 个组。在每个单独的组中应用不同的变换 {F_1, F_2, …F_G},则每个组的中间表征为 Ui = Fi(Xi), i ∈ {1, 2, …G}。

ResNeSt 块
随后,将基数组表征根据通道维数进行级联:V = Concat{V^1 , V^2 , …V^K}。和标准残差块中一样,如果输入和输出特征图共享相同的形状,则使用快捷连接生成 Split-Attention 块的最终输出 Y,Y = V +X。对于步幅较大的块,将适当的变换 T 应用于快捷连接以对齐输出形状:Y = V + T(X)。T 可以是跨步卷积或带有池化的组合卷积。

图 1 展示了 ResNeSt 块与 SE-Net 和 SK-Net 块的整体对比。图 1 右为 Split-Attention 块的实例,组变换 F_i 是 1×1 卷积,然后是 3×3 卷积,注意力权重函数 G 使用两个带有 ReLU **函数的全连接层进行参数化。
ResNet全家桶
Split-Attention 的细节可参考图 2。

ResNet全家桶

Res2Net

对于许多视觉任务来说,在多个尺度上表示特征是非常重要的。近年来,背骨神经网络(CNNs)的发展不断显示出更强的多尺度表示能力,从而在广泛的应用中获得一致的性能提升。然而,大多数现有的方法都是在一个层中表示多尺度特征明智的方式。在本文中,我们提出了一种新的CNNs构建块,即Res2Net,通过在一个残差块内构造层次残差类连接。Res2Net代表了粒度级别的多尺度特性,并增加了每个网络层的接受域范围。建议的Res2Net块可以插入到最先进的CNN骨干模型,例如。、ResNet、ResNeXt和DLA。我们在所有这些模型上评估了Res2Net块,并展示了一致的性能改进在广泛使用的数据集(如CIFAR-100和ImageNet)上建立超过基线的模型。针对典型的计算机视觉任务,如目标检测、类**映射和突出目标检测,进一步的消融研究和实验结果进一步验证了Res2Net相对于最先进的基线方法的优越性。源代码和经过训练的模型将公开可用。
论文不像SSD或特征金字塔网络(FPN)采用层间多尺度特征表达的方式,而是在resnet的基础上,对resnet的block串行的滤波器堆叠结构改进,增加了多尺度融合,提高了网络的复杂度和性能。
模型结构
多尺度表示对于各种视觉任务都是必不可少的,比如感知目标对象的边界、区域和语义类别。即使是最简单的识别对于理解部件、对象(例如,本例中的沙发、桌子和杯子)及其周围的上下文(例如,“在桌子上”上下文有助于识别黑色斑点)来说,从非常不同的尺度感知信息是至关重要的。
ResNet全家桶
res2net的模型结构block如下图所示:
ResNet全家桶
网络将原来串行的方式,通过在通道上进行拆分,不同尺度特征的提取,在融合特征,提高网络的复杂度和表达能力。上图表示在一个block中有4个尺度。

同时,参考Squeeze-and-excitation networks,作者在原有的基础上加了一个SE block,能够自适应的矫正通道之间的权重,也即是不同尺度特征信息之间的权重。于是新的模型为:
ResNet全家桶
整个流程为:

  • 通道拆分
  • 不同通道不同尺度的特征计算和融合
  • SE block进行在channel上自适应权重调整
  • 残差连接

实验结果
ResNet全家桶

PyConvResNet

该文提出一种金字塔卷积(Pyramidal Convolution, PyConv),它可以在多个滤波器尺度对输入进行处理。PyConv包含一个核金字塔,每一层包含不同类型的滤波器(滤波器的大小与深度可变,因此可以提取不同尺度的细节信息)。除了上述提到的可以提取多尺度信息外,相比标准卷积,PyConv实现高效,即不会提升额外的计算量与参数量。更进一步,它更为灵活并具有可扩展性,为不同的应用提升了更大的架构设计空间。

PyConv几乎可以对每个CV任务都有正面影响,作者基于PyConv对四大主流任务(图像分类、视频分类、目标检测以及语义分割)进行了架构设计。相比baseline,所提方法取得了一致性的性能提升。比如在图像分类任务上,所提50层模型优于ResNet152,同时具有更少的参数量(2.39x-fewer)、计算复杂度(2.52x-fewer)以及更少的层数和;在语义分割任务上,它在ADE20K数据集上指标达到SOTA(注:好像并不如ResNeSt的指标)。

首先,我们先来说明一下已有CNN网络架构在感受野方面存在的两个问题:

  • 尽管当前主流CNN网络架构理论具有非常大的感受野(包含输入的大部分、甚至全含整个输入),但是有研究表明:实际CNN的感受野要比理论小的多(2.7x-less);
  • 已有的下采样方案(如池化、stride卷积)会造成信息的损失,进而影响模型的性能。

然后,我们再来简单介绍一下实际场景中物体的尺度信息。以下图为例,包含室内与室外两个场景及其对应的语义标签。从图中可以看到:部分物体具有非常大的空间形式(比如建筑物、树以及沙发),部分物体具有非常小的空间表现形式(比如行人、书本等)。甚至同一物体具有非常大的可变的空间变现形式(比如室外场景中的汽车)。
ResNet全家桶
上述这种空间变大巨大的表现形式是标准卷积所无法有效提取的,而CV的终极目标是:提取输入的多尺度信息。在这方面最为知名的当属SIFT,它可以从不同尺度提取特征描述算子。然而深度学习中的卷积却并未具有类似SIFT这种提取多尺度特征的能力。

最后,我们再来说明一下作者为解决上述挑战而提出的几点创新:

  • 作者引入一种金字塔卷积(PyConv),它包含不同尺度与深度的卷积核,进而确保了多尺度特征的提取;
  • 作者为图像分类任务提出了两种网络架构并以极大优势优于baseline,同时具有更少的参数量与计算复杂度;
  • 作者为语义分割任务提出了一个新的框架:一种新颖的Head用于对backbone提取的特征可以从局部到全局进行上下文信息特征提取,并在场景解析方面取得了SOTA性能;
  • 作者基于PyConv而设计的网络架构在目标检测与视频分类任务上取得了性能的极大提升。

网络结构
ResNet全家桶
上图b给出了所提PyCOnv的示意图,它包含一个由n层不同类型核构成的金字塔。PyConv的目标是:在不提升计算复杂或参数量的前提下采用多尺度核对输入进行处理。PyConv每一层的核包含不同的空间尺寸(自下而上提升),随卷积核的提升而逐渐降低核的深度。

为使PyConv在不同层使用不同深度的卷积核,需要将输入特征划分为不同的组并独立的进行卷积计算,称之为组卷积(见下图示例)。不知各位有没有觉得这个思想跟谷歌的MixNet思想非常相似,MixNet中也是采用了类似组卷积方式进行不同尺寸卷积核计算,文末附对比分析。
ResNet全家桶
但是,需要注意哈:组卷积中每组的通道数是相同的。MixNet中的也是相同的,而PyConv则是不相同的,可以说MixNet是PyConv的一个特例。每组特征通道数上的区别构成MixConv与PyConv的最大区别所在。

在实际应用时,作者为PyConv添加了额外的规则:每一层的通道数应当是相同的。这也就要求了PyConv的输入通道数应当是2的幂次。

所提PyConv具有这样几个优点:

  • Multi-scale Processing. 这个特性是非常明显的,卷积核尺寸是多尺度的嘛;
  • Efficiency. PyConv可以通过并行的方式进行计算,因此计算高效(组卷积在GPU上的效率好像并不高,反而更适合CPU);
  • Flexibility. 由于具有与标准卷积相近的参数量和计算复杂度,那么用户可以更灵活的去调节PyConv的超参数(比如层数、不同层的输出通道数,不同深度设置不同的PyConv参数、不同层采用不同的组数)。注:这一点又跟MixNe相似了,MixNet通过NAS方式进行搜索的。

image classification
下图给出了在图像分类任务中PyConv模块示意图,它是将PyConv嵌入到Bottleneck中,这也是目前卷积改进的一种常用思路,好像没什么值得进一步深入介绍的。
ResNet全家桶
下表给出了基于上述模块构建网络的配置信息,包含PyConvResNet与PyConvHGResNet两种。配置信息还是挺详细的,好像并没有什么值得深入介绍的,表格一看就懂。PyConvHGResNet中不同层的分组数更高而已,其他基本相同。
ResNet全家桶
实验结果:
ResNet全家桶

参考

https://mp.weixin.qq.com/s/7wBZcDPvSkB6kaJMqZEM1Q
https://mp.weixin.qq.com/s/scFnuqx0zOtBvFh0JYA0UA