今天跟大家分享TPAMI2021中的一篇文章,文章详细信息如下:
这篇文章是ResNet的变体,通过改进ResNet中的残差模块,在几乎不改变计算量的前提下,提高了网络提取多尺度特征的能力。
下载链接:https://arxiv.org/abs/1904.01169
开源代码地址:https://github.com/Res2Net
在图像分类、目标检测、分割等计算机视觉任务中,网络提取多尺度特征的能力是至关重要的。
当前很多Backbone都是在layer-wise这个层面做改进,以提高网络提取多尺度特征的能力。这篇文章提出在一个更细的粒度(a more granular level)中改进,即改进Residual Block内部,以提高该模块提取多尺度特征的能力。
ResNet中的Bottleneck block如下图中图(a)所示:
作者以上图中图(a)中的结构为基础,构造上图中图(b)所示的结构,并将其称作Res2Net模块。
在Res2Net模块中,将输入特征分为 s s s组,分别记作 x i \mathbf{x}_{i} xi,$ i \in{1,2, \ldots, s}$;每组feature map的通道数均为输入feature map通道数的 1 / s 1 / s 1/s。除了 x 1 \mathbf{x}_{1} x1外,每组feature map都会经过1个 3 × 3 3 \times 3 3×3卷积,将该卷积操作记作 K i ( ) \mathbf{K}_{i}() Ki()。除了 x 1 \mathbf{x}_{1} x1和 x 2 \mathbf{x}_{2} x2外,第 i i i组的feature map x i \mathbf{x}_{i} xi先与前一组 K i − 1 ( ) \mathbf{K}_{i-1}() Ki−1()的输出相加,将相加后的结果进行 K i ( ) \mathbf{K}_{i}() Ki()操作。上述操作可用如下公式表示:
y i = { x i i = 1 K i ( x i ) i = 2 K i ( x i + y i − 1 ) 2 < i ⩽ s \mathbf{y}_{i}=\left\{\begin{array}{ll} \mathbf{x}_{i} & i=1 \\ \mathbf{K}_{i}\left(\mathbf{x}_{i}\right) & i=2 \\ \mathbf{K}_{i}\left(\mathbf{x}_{i}+\mathbf{y}_{i-1}\right) & 2yi=⎩⎨⎧xiKi(xi)Ki(xi+yi−1)i=1i=22<i⩽s
将这 s s s组的输出在通道维度拼接,然后进行 1 × 1 1 \times 1 1×1卷积操作。
显然,第 i i i组的卷积操作 K i ( ) \mathbf{K}_{i}() Ki()的输入包含了多组输入特征: { x j , j ≤ i } \left\{\mathbf{x}_{j}, j \leq i\right\} {xj,j≤i}。Res2Net能够提取不同感受野、多种尺度的特征,能够有效地提取全局特征和局部特征。
由于该模块是residual-like connections within a single residual block,因此将其称作Res2Net。
Res2Net模块不仅可以无缝替换原ResNet中的残差结构,还可以与多种结构融合,形成更强的Backbone。
比如可以将Res2Net模块与ResNeXt、SE结合:参照ResNeXt,将每组中的 3 × 3 3 \times 3 3×3卷积改为分组卷积;在残差连接前加入SE block。形成的网络结构如下图所示:
关于ResNeXt的相关信息,参考ResNeXt。
在ImageNet数据集上,分别对ResNet、ResNeXt、DLA、Big-Little Net等多种网络进行改进,将其中的残差模块替换为Res2Net模块,Res2Net模块中分组为4,即 s = 4 s=4 s=4。性能提升情况如下表所示:
在上表中,改进后的网络与原baseline网络保持几乎相当的参数量和计算量。可以看到,使用了Res2Net模块的网络,网络性能均有明显提高。
分别在PASCAL VOC07和COCO数据集上,使用Faster R-CNN目标检测方法,以ResNet-50和Res2Net-50作为backbone,实验结果如下表所示:
从上表中可以看到,对于不同的数据集,使用Res2Net-50作为Backbone能够提高检测器性能。
在PASCAL VOC12数据集上,使用Deeplab v3+方法,分别使用ResNet-50和Res2Net-50、ResNet-101和Res2Net-101作为Backbone完成语义分割任务,实验结果如下表所示:
从上表中可以看出,使用Res2Net作为Backbone能够提高网络性能。其中Setting一栏表示Res2Net模块配置, x w × y s xw \times ys xw×ys中的 x x x表示每组中feature map通道数, y y y表示分组数量,即 s s s的值。
使用ResNet-101和Res2Net-101作为Backbone的网络分割结果对比如下图所示:
在COCO数据集上,使用Mask R-CNN方法进行实例分割,分别使用ResNet-50和Res2Net-50作为Backbone,结果如下表所示:
从上表中可以看出,使用Res2Net-50代替ResNet-50作为Backbone,能够提高Mask R-CNN性能。
作者在ResNet中残差模块基础上设计出了Res2Net模块,该模块能进一步提取多尺度特征。
使用Res2Net代替原网络中的ResNet Backbone,能够提高baseline网络在图像分类、目标检测、语义分割、实例分割等多种计算机视觉任务中的性能,而且几乎不增加计算量。
推荐阅读:
ResNet从理论到实践(一)ResNet原理
ResNet从理论到实践(二)使用ResNet18进行猫狗分类
ResNet变体:ResNeXt