involution理解

最好的参考来自论文作者的知乎:CVPR 2021 | involution:超越convolution和self-attention的神经网络新算子
其他餐卡:
https://zhuanlan.zhihu.com/p/400402288
https://zhuanlan.zhihu.com/p/356960359
https://blog.csdn.net/P_LarT/article/details/115426891

引言

CNN的空间不变性 (spatial-agnostic)和通道特异性 (channel-specific)有一些优点,但这些优点有时候也会变成缺点。

CNN在空间不变性表现在:卷积核在所有的空间位置上都共享参数,那就会导致不同空间位置的局部空间建模能力受限,并无法有效的捕获空间上长距离的关系。

CNN的通道特异性指的是:输出特征的每个通道信息是由输入特征的所有通道信息聚合而来,并且参数不共享,所以就会导致参数和计算量比较大。并且,也有一些工作表明了不同输出通道对应的卷积滤波器之间是存在信息冗余的,因此对每个输出通道都使用不同的卷积核这一方式其实是并不高效的。

因此,基于发现的这两个缺点,作者采用了一种非常“简单粗暴”的方式来解决这两个缺点——把整两个性质颠倒一下,提出一个“空间特异性”和“通道不变性”的算子。

这篇工作其实是作者在rethink卷积的性质之后提出的一个新的结构,虽然相比于最近几篇ViT的文章,这篇文章在性能上显得有些无力。但是相比于ResNet结构,这篇文章无论是在参数量,还是计算量、性能上都有非常大的优越性。

传统卷积

在这里插入图片描述
图片来自https://zhuanlan.zhihu.com/p/339835983

以下内容参考:https://zhuanlan.zhihu.com/p/358183591
convolution kernel的大小写作 [公式] ,其中 [公式] 和 [公式] 分别是输出和输入的通道数目,而 [公式] 是kernel size, [公式] 一般不写,代表在 [公式] 个pixel上共享相同的kernel,即空间不变性,而每个通道C独享对应的kernel则称为通道特异性。convolution的操作可以表达为:

在这里插入图片描述

involution

在这里插入图片描述

在这里插入图片描述
图片来自https://zhuanlan.zhihu.com/p/339835983

  • 卷积核尺寸中各符号的意义?
    (1)HxW表示图像的高和宽,及图像的每个平面位置都需要独立的卷积核,不共享。
    (2)KxK表示一个卷积核的二维平面尺寸,表示一次卷积操作利用了当前像素周边多大的邻域。
    (3)G代表了卷积核在通道上的操作,详细理解如后文所述。

  • 疑问:为什么involution核的大小中有一个"G"?(普通的卷积,这里不应该是"G",而是 C i × C o C_i \times C_o Ci×Co,其中 C i , C o C_i, C_o Ci,Co分别代表输入通道数、输出通道数)
    理解:这里借鉴了分组卷积和depthwise卷积的思想。(1)将所有通道分为G个组;(2)每个组内是depthwise卷积(如下图所示,每个输出通道仅仅采用了对应的一个输入通道的信息,没有采用全部输入通道的信息),并且组内的所有卷积核是共享的(通道间共享卷积核是involution的核心思想),所以每个组内仅需1个卷积核。

卷积核是怎样生成的?

xys:每个卷积核是通过可学习的参数自动生成的,并且在二维平面上的每个像素位置都分别生成一个卷积核。

inlvolution核的生成函数的基本描述

在involution中,我们没有像convolution一样采用固定的weight matrix作为可学习的参数,而是考虑基于输入feature map生成对应的involution kernel,从而确保kernel size和input feature size在空间维度上能够自动对齐。否则的话,例如在ImageNet上使用固定 [公式] 大小的图像作为输入训练得到的权重,就无法迁移到输入图像尺寸更大的下游任务中(比如检测、分割等)。

生成卷积核的过程可以用如下公式表达:
在这里插入图片描述

inlvolution核的生成函数的一个实例

在这里插入图片描述
xys:在这个生成公式中,当前像素位置的involution核是利用当前位置的 1x1xC的向量(仅用1x1的当前像素,没有用邻域像素)作为输入,经过两次变换而得到的。

  • 两个W代表的是线性变化。
  • 将 1x1xC 的某一像素的表示通过线性变化降维到C/r (r为一个ration,代表减少比率)。
  • σ代表的是BN和非线性激活。
  • W2将1x1xC/r变化为KxKxG。
  • 最终得到的KxKxG便是involution kernels,即一次性得到了G个分组的卷积核。

involution的操作过程

在这里插入图片描述
生成involution核的过程可以用如下公式表达:
在这里插入图片描述

获得involution核后,进行卷积的过程公式化如下:
在这里插入图片描述
在这里插入图片描述

involution不能改变通道数C

从上述操作过程可以看出,involution没法改变通道数。因此,如果需要改变通道数,则采用传统CNN中的1x1卷积。(rednet中就是这么干的)

rednet

参考:https://blog.csdn.net/P_LarT/article/details/115426891
为了通过渐进式构建整个网络,我们通过堆叠残差快来模仿ResNet的设计,因为ResNet的优雅架构使其易于尝试新思想并进行比较。我们对ResNet的stem中(使用3x3或7x7 involution进行分类或密集预测)和trunk(对所有任务使用7x7 involution)位置中的所有bottleneck位置的3x3卷积进行替换,但保留所有1x1卷积用于通道投影和融合。这些经过精心设计的实体联合起来,形成了一种称为RedNet的新型高效backbone。

一旦空间和通道信息交织在一起,神经网络内部就会出现大量的冗余。 但是,信息交互在RedNet中巧妙地解耦,朝着有利的精度与效率的权衡的方向发展。具体而言,在一个像素的通道维度中编码的信息隐式分散在其空间中 核生成步骤中的邻近区域,此后,由于具有庞大且动态的involution kernel,因此可以收集到丰富的感受野中的信息。必不可少的是,线性变换(通过1x1卷积实现)用于信道信息交换。综上所述,channel-spatial,spatial-alone和channel-alone的交互,交替且独立地作用于信息传播流,在确保表征能力的同时,协同促进了网络体系结构的小型化。

计算量与参数量

摘自《Involution=Inverse-Convolution,反着来的卷积?内卷?
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值