CVPR2020-SCNet-自校准卷积网络 | Improving Convolutional Networks with Self-calibrated Convolutions

南开程明明组的论文,在目标检测上面效果很好,而且没有提升模型复杂度。发现最近在backbone上修改对检测提升貌似更大,这是否提供了一种思路?
论文地址:http://mftp.mmcheng.net/Papers/20cvprSCNet.pdf
Github:https://github.com/backseason/SCNet
论文主页:https://mmcheng.net/scconv/

在这里插入图片描述

Abstract:

CNN的最新进展主要致力于设计更复杂的体系结构,以增强其表示学习能力。在本文中,我们考虑在不调整模型架构的情况下改进CNN的基本卷积特征转换过程。为此,我们提出了一种新颖的自校准卷积,该卷积通过内部通信显着扩展了每个卷积层的视场,从而丰富了输出功能。特别是,与使用小卷积核(例如3 x 3)融合空间和通道方向信息的标准卷积不同,我们的自校准卷积通过新颖的自我自适应地围绕每个空间位置建立了长距离空间和通道间依赖性的校准操作。因此,它可以通过显式合并更丰富的信息来帮助CNN生成更多辨识性表示。我们的自校准卷积设计简单且通用,可以轻松应用于增强标准卷积层,而不会引入额外的参数和复杂性。广泛的实验表明,将我们的自校准卷积应用于不同的主干网络时,可以在各种视觉任务中显着改善基线模型,包括图像识别,目标检测,实例分割和关键点检测,而无需更改网络体系结构 。我们希望这项工作可以为将来的研究提供一种设计新颖的卷积特征变换以改善卷积网络的有前途的方法。

Introduction:

当前CNN网络的优化主要有两个方面:
1.结构设计:Alext-VGG-GoogleNet-ResNet-DenseNet-ResNeXt-NasNet

2.长距离依赖建模(注意力机制):SENet-GENet-CBAM-GCNet-GALA-AA-NLNet

本文有设计复杂的网络体系结构来增强特征表示,而是引入了自校准卷积作为通过增加每层基本卷积变换来帮助卷积网络学习判别表示的有效方法。 类似于分组卷积,它将特定层的卷积过滤器分为多个部分,但不均匀地,每个部分中的过滤器以异构方式被利用。

在这里插入图片描述

该方法具有两个优点。 首先,它使每个空间位置都能自适应地编码远距离区域的信息上下文,从而打破了在小区域(例如3x3)内进行卷积的传统。 这使我们的自校准卷积产生的特征表示更具辨识性。 在图1中,我们将ResNet生成的具有不同类型卷积的特征激活图可视化。 可以看出,具有自校准卷积的ResNet可以更准确和整体地定位目标对象。 其次,提出的自校准卷积是通用的,可以轻松应用于标准卷积层,而无需引入任何参数和复杂性开销或更改超参数。

Method:

1.常规卷积
在这里插入图片描述
输入C X H X W ,在输出通道也为C的卷积中,卷积核K的维度为C X C X H X W

缺点:这种卷积滤波器学习模式都具有相似性。 此外,卷积特征变换中每个空间位置的视野主要由预定义的内核大小控制,由此类卷积层的堆叠组成的网络也缺少大的感受野,无法捕获足够的高级语义。 以上两个缺点都可能导致特征图的辨识度较低。

2.自校准卷积
在这里插入图片描述
自校准卷积与组卷积类似,不同点是过滤器的每个部分都没有得到同等对待,而是负责特定的功能。
具体如上图所示:

1).输入X为C X H X W大小,拆分为两个C/2 X H X W大小的X1,X2;

2).卷积核K的维度为C X C X H X W,将K分为4个部分,分别为K1,K2,K3,K4,其维度均为C/2 X C/2 X H X W;

为了有效地并有效地收集每个空间位置的丰富的上下文信息,论文提出在两个不同的尺度空间中进行卷积特征转换:原始尺度空间中的特征图(输入共享相同的分辨率)和下采样后的较小的潜在空间(自校准) 。 利用下采样后特征具有较大的视场,因此在较小的潜在空间中进行变换后的嵌入将用作参考,以指导原始特征空间中的特征变换过程

3)自校准尺度空间:
在这里插入图片描述
对特征X1采用平均池化降采样r倍(论文r=4),K2卷积层,再进行上采样(双线性插值),经过Sigmoid激活函数对K3卷积提取后的特征进行校准得到输出特征Y1;

4)原尺度特征空间:对特征X2经过K1卷积提取得到特征Y2;

5)对两个尺度空间输出特征Y1,Y2进行拼接操作,得到最终输出特征Y。

附代码:

class SCConv(nn.Module):
    def __init__(self, planes, stride, pooling_r):
        super(SCConv, self).__init__()
        self.k2 = nn.Sequential(
                    nn.AvgPool2d(kernel_size=pooling_r, stride=pooling_r), 
                    conv3x3(planes, planes), 
                    nn.BatchNorm2d(planes),
                    )
        self.k3 = nn.Sequential(
                    conv3x3(planes, planes), 
                    nn.BatchNorm2d(planes),
                    )
        self.k4 = nn.Sequential(
                    conv3x3(planes, planes, stride), 
                    nn.BatchNorm2d(planes),
                    nn.ReLU(inplace=True),
                    )

    def forward(self, x):
        identity = x

        out = torch.sigmoid(torch.add(identity, F.interpolate(self.k2(x), identity.size()[2:]))) # sigmoid(identity + k2)
        out = torch.mul(self.k3(x), out) # k3 * sigmoid(identity + k2)
        out = self.k4(out) # k4

        return out

3.自校准卷积优点

所提出的自校准操作的优点是三方面的:
在这里插入图片描述
1)与传统的卷积相比,通过采用方程式所示的校准操作。 如图4所示,允许每个空间位置不仅将其周围的信息环境自适应地视为来自潜在空间的嵌入,以作为来自原始比例空间的响应中的标量,还可以对通道间依赖性进行建模。 因此,可以有效地扩大具有自校准的卷积层的视场。 如图3所示,具有自校准功能的卷积层编码更大但更准确的辨识性区域。

在这里插入图片描述
2)自校准操作不收集全局上下文,而仅考虑每个空间位置周围的上下文,从而在某种程度上避免了来自无关区域的某些污染信息。 从图6的右两栏中可以看出,在可视化最终分数层时,具有自校准功能的卷积可以准确地定位目标物体。

在这里插入图片描述

3)自校准操作对多尺度信息进行编码,这是与目标检测相关的任务所迫切需要的

Experiments:

1.ImageNet:
在这里插入图片描述
2.Pooling方式:
在这里插入图片描述
3.目标检测和实例分割:
在这里插入图片描述

  • 12
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值