进入公众号,在消息对话框

回复【CVPR2021】即可获取CVPR2021最新论文集

来源:我爱计算机视觉

本文是对我们CVPR 2021被接收的文章 Involution: Inverting the Inherence of Convolution for Visual Recognition的解读,同时也分享一些我们对网络结构设计(CNN和Transformer)的理解。

这篇工作主要是我和SENet的作者胡杰一起完成的,也非常感谢HKUST的两位导师@陈启峰和张潼老师的讨论。

0 概要

我们的贡献点简单来讲:

(1)提出了一种新的神经网络算子(operator或op)称为involution,它比convolution更轻量更高效,形式上比self-attention更加简洁,可以用在各种视觉任务的模型上取得精度和效率的双重提升。

(2)通过involution的结构设计,我们能够以统一的视角来理解经典的卷积操作和近来流行的自注意力操作。

1 Motivation与convolution的反对称性 

这部分内容主要来自原文Section 2,Section 3

普通convolution的kernel享有空间不变性(spatial-agnostic)和通道特异性(channel-specific)两大基本特性;而involution则恰恰相反,具有通道不变性(channel-agnostic)和空间特异性(spatial-specific)。


convolution

convolution kernel的大小写作




















,其中















分别是输出和输入的通道数目,而




是kernel size,






一般不写,代表在






个pixel上共享相同的kernel,即空间不变性,而每个通道




独享对应的kernel则称为通道特异性。convolution的操作可以表达为:

其中






















是input tensor,






















是output tensor,



























是convolution kernel。

下面我们分开来看卷积的两大特性

  • 空间不变性

一方面,空间不变性带来的优点包括:1.参数共享,否则参数量激增至




















,2.平移等变性,也可以理解为在空间上对类似的pattern产生类似的响应,其不足之处也很明显:提取出来的特征比较单一,不能根据输入的不同灵活地调整卷积核的参数。

另一方面,因为卷积操作的参数量和计算量中都存在










一项,其中通道数量




往往是数百甚至数千,所以为了限制参数量和计算量的规模,




的取值往往较小。我们从VGGNet开始习惯沿用






大小的kernel,这限制了卷积操作一次性地捕捉长距离关系的能力,而需要依靠堆叠多个






大小的kernel,这对于感受野的建模在一定程度上不如直接使用大的卷积核更加有效。

  • 通道特异性

之前已经有一些研究低秩近似的工作认为卷积核在通道维度是存在着冗余的,那么卷积核在通道维度的大小就可能可以有所缩减,而不会明显影响表达能力。直观地理解,我们把每个输出通道对应的卷积核铺成一个












大小的矩阵,那么矩阵的秩不会超过







,代表其中存在很多的kernel是近似线性相关的。

involution

基于以上分析我们提出了involution,它在设计上与convolution的特性相反,即在通道维度共享kernel,而在空间维度采用空间特异的kernel进行更灵活的建模。involution kernel的大小为












,其中






,表示所有通道共享




个kernel。involution的操作表达为:

其中























是involution kernel。

在involution中,我们没有像convolution一样采用固定的weight matrix作为可学习的参数,而是考虑基于输入feature map生成对应的involution kernel,从而确保kernel size和input feature size在空间维度上能够自动对齐。

否则的话,例如在ImageNet上使用固定






大小的图像作为输入训练得到的权重,就无法迁移到输入图像尺寸更大的下游任务中(比如检测、分割等)。involution kernel生成的通用形式如下:



































其中











是坐标








邻域的一个index集合,所以


















表示feature map上包含













的某个patch。

关于上述的kernel生成函数




,可以有各种不同的设计方式,也值得大家去进一步探索。我们从简单有效的设计理念出发,提供了一种类似于SENet的bottleneck结构来进行实验:











就取为










这个单点集,即


















取为feature map上坐标为








的单个pixel,从而得到了involution kernel生成的一种实例化

其中





















































是线性变换矩阵,




是通道缩减比率,




是中间的BN和ReLU。

注意设计不同的kernel生成函数可以得到involution不同的实例化

比如可以去探索更加精巧的设计来继续发掘involution的潜力,另外通过采用特定的实例化方法也可以将其特例化成为self-attention的形式(见下节)。

在上述一种简单的involution kernel的实例化下,我们得到完整的involution的示意图:

针对输入feature map的一个坐标点上的特征向量,先通过




(FC-BN-ReLU-FC)和reshape (channel-to-space)变换展开成kernel的形状,从而得到这个坐标点上对应的involution kernel,再和输入feature map上这个坐标点邻域的特征向量进行Multiply-Add得到最终输出的feature map。具体操作流程和tensor形状变化如下:

其中











是坐标








附近






的邻域。单纯基于PyTorch API简单的伪代码实现如下:

involution操作的参数量



















,计算量分为kernel generation和Multiply-Add (MAdd)两部分 ,明显低于普通convolution的参数量











和计算量














反过头来考虑和卷积已有的优点的对比:

  1. 在通道上共享kernel(仅有G个kernel)允许我们去使用大的空间span(增加




    ),从而通过spatial维度的设计提升性能的同时保证了通过channel维度的设计维持效率(ablation in Tab. 6a,6b),即使在不同空间位置不共享权重也不会引起参数量和计算量的显著增长。

  2. 虽然我们没有在空间上的每个pixel直接共享kernel参数,但我们在更高的层面上共享了元参数(meta-weight,即指kernel生成函数的参数),所以仍然能够在不同的空间位置上进行knowledge的共享和迁移。作为对比,抛开参数量大涨的问题不谈,如果将convolution在空间上共享kernel的限制完全放开,让每个pixel自由地学习对应的kernel参数,则无法达到这样的效果。

总结起来,这种从convolution到involution的设计实际上是在微观粒度(op level)对算力进行了重新的调配,而网络设计的本质就是对算力的分配,目的是将有限的算力调整到最能发挥性能的位置。比如NAS则是在宏观粒度上(network level)通过自动搜索的手段对算力进行了最优配置。

2 Discussion与self-attention的相关性 

这部分内容主要来自原文Section 4.2

self-attention

我们知道self-attention可以表达为(为了表达简略,省略了position encoding部分)

其中


















































分别为输入






线性变换后得到的query,key和value,




是multi-head self-attention中head的数目。下标表示

















对应的pixel之间进行query-key匹配,




表示query








对应key的范围,可能是






的local patch(local self-attention),也可能是






的full image(global self-attention)。

我们进一步把self-attention展开写成

对比involution的表达式,我们不难发现相似之处:

  • self-attention中不同的head对应到involution中不同的group(在channel维度split)

  • self-attention中每个pixel的attention map












    对应到involution中每个pixel的kernel






如果involution的kernel生成函数选择实例化为

那么self-attention也是involution的某种实例化,因此我们发现involution是更加general的表达形式。

另外









对应于attention matrix multiplication前对






做的线性变换,self-attention操作后一般也会接另一个线性变换和残差连接,这个结构正好就对应于我们用involution替换resnet bottleneck结构中的






convolution,前后也有两个






convolution做线性变换。

这里再说一下position encoding的事情:

因为self-attention是permutation-invariant的,所以需要position encoding来区分位置信息,而在本文所实例化的involution单元中,生成的involution kernel中的每个元素本身就是按位置排序的,所以不需要额外的position信息。

另外一些基于pure self-attention构建backbone的工作(比如stand-alone self-attention,lambda networks)已经注意到,仅仅使用position encoding而不是用query-key relation就能达到相当可观的性能,即attention map使用












而不是



















是position encoding matrix)。而从我们involution的角度来看,这只不过是又换了一种kernel generation的形式来实例化involution。

因此,我们重新思考self-attention在backbone网络结构中有效的本质可能就是捕捉long-range and self-adaptive interactions,通俗点说是使用一个large and dynamic kernel,而这个kernel用query-key relation来构建则并不是必要的。

另一方面,因为我们的involution kernel是单个pixel生成的,这个kernel就不太适合扩展到全图来应用,但在一个相对较大的邻域内应用还是可行的(如













),这同时也说明了CNN设计中的locallity依然是宝藏,因为即使用global self-attention,网络的浅层也很难真的利用到复杂的全局信息。

所以我们所采用的involution去除了self-attention中很多复杂的东西,比如我们仅使用单个pixel的特征向量生成involution kernel(而不是依靠pixel-to-pixel correspondence生成attention map),在生成kernel时隐式地编码了pixel的位置信息(丢弃了显式的position encoding),从而构建了一个非常干净高效的op。

Vision Transformer

既然讨论到了self-attention,就不得不提到最近很火的ViT类工作。针对backbone结构来说,我们认为pure self-attention或者involution model 优于 CNN 优于 ViT (transformer做decoder的可能有其他妙处,比如在DETR中,暂且按下不表)

ViT很多人也讨论过了,底层的linear projection其实类似于convolution,高层用global self-attention抽取relation,可以抽象为convolution接self-attention的混合模型。这种混合结构的提出本身是合理的,在低层用convolution提取low-level信息,在高层用self-attention建模高阶的语义关系。

可是ViT的底层的conv部分做的太不充分了,受制于self-attention爆炸的计算量,在输入端直接把图像切分成16x16的patch,输入feature size基本上相当于已经到了深如resnet倒数第二个stage的feature size,网络底层对于更细节的图像信息利用的非常不到位,而中间处理阶段也没有feature size递减的变换。

因此ICLR'21上提出的ViT结构设计本来就存在很不科学的地方,最近一些改进ViT的工作基本上也可以总结为在ViT中加入更多的spatial维度细化的self-attention操作(patch局部化或再细分),某种意义上是在把ViT变得更像pure self-attention/involution based model。

总体来讲,无论是convolution,self-attention还是新的involution都是message passing和feature aggregation的组合形式,尽管外表各异,本质上没有必要割裂开来看

3 实验结果 

总体来讲:

1)参数量、计算量降低,性能反而提升

2)能加在各种模型的不同位置替换convolution,比如backbone,neck和head,一般来讲替换的部分越多,模型性价比越高


ImageNet图像分类

我们使用involution替换ResNet bottleneck block中的






convolution得到了一族新的骨干网络RedNet,性能和效率优于ResNet和其他self-attention做op的SOTA模型。

COCO目标检测和实例分割

其中fully involution-based detectors(involution用在backbone,neck和head)在保证性能略有提升或不变的前提下,能够将计算复杂度减至




40%。

Cityscapes语义分割

值得一提的是,COCO检测任务中针对大物体的指标








提升最多(3%-4%),Cityscapes分割任务中也是大物体(比如墙,卡车,公交车等)的单类别IoU提升最明显(高达10%甚至20%以上),这也验证了我们在之前分析中所提到的involution相比于convolution在空间上具有动态建模长距离关系的显著优势。

最后,这篇工作也留了一些坑供大家进一步探索:

  1. 关于广义的involution中kernel生成函数空间进一步的探索;

  2. 类似于deformable convolution加入offest生成函数,使得这个op空间建模能力的灵活性进一步提升;

  3. 结合NAS的技术搜索convolution-involution混合结构(原文Section 4.3);

  4. 我们在上文论述了self-attention只是一种表达形式,但希望(self-)attention机制能够启发我们设计更好的视觉模型,类似地detection领域最近不少好的工作,也从DETR的架构中获益匪浅。

论文链接:https://arxiv.org/abs/2103.06255

代码和模型链接:https://github.com/d-li14/involution

希望2021年backbone网络结构设计能有更本质,更多元的发展!

CVPR2021论文持续更新地址:

https://github.com/murufeng/CVPR_2021_Papers

重磅!DLer-CVPR2021论文分享交流群已成立!

大家好,这是CVPR2021论文分享群里,群里会第一时间发布CVPR2021的论文解读和交流分享会,主要设计方向有:图像分类、目标检测、目标跟踪、点云与语义分割、GAN、超分辨率、人脸检测与识别、动作行为与时空运动、模型压缩和量化剪枝、迁移学习、人体姿态估计等内容。

进群请备注:研究方向+学校/公司+昵称(如图像分类+上交+小明)

???? 长按识别,邀请您进群!

CVPR'21 | Involution:超越convolution和self-attention的神经网络新算子相关推荐

  1. 超越卷积、自注意力:神经网络新算子「内卷(Involution)」

    论文名称:Involution: Inverting the Inherence of Convolution for Visual Recognition 作者:Duo Li, Jie Hu, Ch ...

  2. CVPR 2021 | Involution:超越卷积和自注意力的神经网络新算子

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 本文作者: 李铎  |  本文系作者投稿 https://zhuanlan.zhihu.com/p/3581 ...

  3. 本周AI热点回顾:和欧阳娜娜一起搞研发?强大的神经网络新算子involution,超越卷积、自注意力机制!...

    ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍点击左上方蓝字关注我们 01 我和欧阳娜娜一起搞研发 AI新闻播报,开车明星导航,现如今根据文本生成语音的AI技术,那真是飞入寻常百姓家--见怪不怪了. 在这档口, ...

  4. CVPR‘21 | Involution:超越convolution和self-attention的神经网络新算子

    本文是对我们CVPR 2021被接收的文章 Involution: Inverting the Inherence of Convolution for Visual Recognition的解读,同 ...

  5. CVPR‘21 | 真·内卷!involution:超越convolution和self-attention的神经网络新算子

    点击上方"迈微AI研习社",选择"星标★"公众号 重磅干货,第一时间送达 本文来自李铎的投稿,介绍他们在深度卷积神经网络中的新工作,通过反转前述的卷积设计原理提 ...

  6. CVPR 2021 | Involution:超越 Convolution 和 Self-attention 的神经网络新算子

    本文是对我们CVPR 2021被接收的文章 Involution: Inverting the Inherence of Convolution for Visual Recognition的解读,同 ...

  7. CVPR 2021 involution:超越convolution和self-attention的神经网络新算子

    1 原理 1.1 普通卷积 空间不变性:卷积核大小为Co×Ci×K×KC_o \times C_i \times K \times KCo​×Ci​×K×K,其中CoC_oCo​和CiC_iCi​分别 ...

  8. 超越卷积、自注意力机制:强大的神经网络新算子involution

    视学算法发布 转载自:机器之心 作者:李铎 这篇工作主要是由我和SENet的作者胡杰一起完成的,也非常感谢HKUST的两位导师 陈启峰和张潼老师的讨论和建议. 本文是对我们CVPR 2021被接收的文 ...

  9. 最强!超越卷积、自注意力机制:强大的神经网络新算子involution

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心,李铎 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下载链 ...

最新文章

  1. Linux 中打开tomcat的startup.sh 没有显示successed的方法。
  2. 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part1
  3. php左连接,如何在php中对左联接查询返回的数组数据进...
  4. 正则表达式及常用大全
  5. 学习编译原理遇到的问题
  6. Java 点餐小程序源码带管理后台(免费分享)
  7. php网易云信短信接口,短信接口指南
  8. html match函数,match函数的使用方法 match函数怎么使用
  9. PDF/CDF 用matlab计算和绘图1
  10. 卡方检验c语言算法,R语言 | 卡方检验(Chi-squaretest)
  11. 实用主义当道——GitHub 热点速览 Vol.48
  12. android art模式 开启,如何开启androidART模式
  13. 点阵发光管怎么用C语言编程,LED点阵经验各种点阵驱动方法讲解
  14. 黑客攻陷'360安全论坛' 偷窃网游和QQ帐号
  15. 商业模式新生代_精读商业模式新生代之“多边平台式商业模式”
  16. 游戏音效分类以及运用场景
  17. webpack command not found 的意外的坑 - 原因是从node开始
  18. LayIM 3.9.1与ASP.NET SignalR实现Web聊天室快速入门(四)之ASP.NET SignalR核心功能介绍
  19. 银河麒麟桌面操作系统之磁盘分区与磁盘挂载
  20. std在汇编语言是什么指令_汇编语言指令

热门文章

  1. Homestead 无法挂载共享目录解决方案
  2. I.MX6 ar1020 SPI device driver hacking
  3. Ueditor的两种定制方式
  4. CPU制作流程大揭密
  5. c++ 提取傅里叶描述子_Matlab | 提取图像ROI任意形状
  6. mysql計劃任務_MySQL計劃任務 | 學步園
  7. 线程VS进程,多线程VS多进程,并行VS并发,单核cpuVS多核cpu
  8. python导入同级目录 上级目录文件
  9. xgboost源码 要看的
  10. tensorflow2.0降级及如何从别的版本升到2.0