论文名称:Involution: Inverting the Inherence of Convolution for Visual Recognition

作者:Duo Li, Jie Hu, Changhu Wang, Xiangtai Li, Qi She, Lei Zhu, Tong Zhang, Qifeng Chen, The Hong Kong University of Science and Technology, ByteDance AI Lab, Peking University, Beijing University of Posts and Telecommunications

Convolution

  1. 空间无关性(spatial agnostic):same kernel for different position

    • 优点:参数共享,平移等变
    • 缺点:不能灵活改变参数,卷积核尺寸不能过大,只能通过堆叠来扩大感受野、捕捉长距离关系
  2. 通道特异性(channel specific):different kernels for different channels
    • 优点:充分提取不同通道上的信息
    • 缺点:有冗余

Convolution kernel 尺寸为 B,C_out,C_in,K,K

Involution

与convolution不同,involution拥有完全相反的性质:

  1. 空间特异性:kernel privatized for different position
  2. 通道不变性:kernel shared across different channels

involution kernel 的尺寸为B,G,KK,H,W.

how to generate involution kernels

kernel generated based on input featrue map(self-attention的一种体现?) to ensure kernel size aligned with the input tensor size

一种简单的kernel generation function,方便起见以一个像素为例

  1. inputs为维度1×1×C;
  2. 线性变换:W0W_0W0​:通道压缩,节省计算量;W1W_1W1​:首先变为1×1×(K×K×G),再拆分为G组,最后变换为K×K×G;(其生成的卷积核包含了所有通道上的信息,对不同通道之间的信息交换有一定的作用)
  3. 生成的kernel与(i,j)领域进行乘加操作,因为维度不同,需要进行广播,得到大小为k×k×C;
  4. 最后进行聚合,输出大小为1×1×C。
class Involution(nn.Module):def __init__(self, channel, group, kernel, s):super(Involution, self).__init__()self.channel = channelself.group = groupself.kernel_size = kernelratio=4self.o = nn.AvgPool2d(s, s) if s > 1 else nn.Identity()self.reduce = nn.Sequential(nn.Conv2d(channel, channel//ratio, 1),nn.BatchNorm2d(channel//ratio),nn.ReLU(inplace=True))self.span = nn.Conv2d(channel//ratio, kernel**2*group, 1)# 从一个Batch中提取出卷积滑动的局部区域块,较难理解,建议自行百度# 普通的卷积操作实际上就相当于将feature map unfold与conv kernel乘加之后再foldself.unfold = nn.Unfold(kernel_size=kernel, padding=(kernel-1)//2, stride=s)def forward(self, x):kernel = self.span(self.reduce(self.o(x)))  # B,KKG,H,WB, _, H, W = kernel.shapekernel = kernel.view(B, self.group, self.kernel_size **2, H, W).unsqueeze(2)  # B,G,1,kk,H,W,unsqueeze:增加一个维度用于广播x_unfolded = self.unfold(x)  # B,CKK,HWx_unfolded = x_unfolded.view(B, self.group, self.channel//self.group, self.kernel_size**2, H, W)# B,G,C/G,KK,H,Wout = (kernel*x_unfolded).sum(dim=3)  # B,G,C/G,H,Wout = out.view(B, self.channel, H, W) # B,C,H,wreturn out

更多:

  1. 对Involution kernel的生成方式进行更多的探索;
  2. 进一步探索Convolution-Involution的混合结构。

Involution vs Convolution

优点:

  1. 参数量和计算量都很少

    • 对于Convolution,其参数量为:
      K2CinCoutK^2C_{in}C_{out} K2Cin​Cout​
      计算量大约为:
      HWK2CinCoutHWK^2C_{in}C_{out} HWK2Cin​Cout​

    • 对于Involution,其参数量为:
      C2+CGK2r\frac{C^2+CGK^2}{r} rC2+CGK2​
      计算量大约为:
      HWK2CHWK^2C HWK2C

    可以看到,involution的计算量与通道数呈线性关系。

  2. 能有效建模长距离关系

    相较于Convolution,involution kernel可以使用更大的卷积核而不过多增加其参数量,其感受野也就越大。

  3. involution是动态的,而convolution是静态的。

缺点:

  1. 通道间的信息交换在一定程度上受到影响

    虽然同一组内共享同一个kernel,但是不同组通道间的信息交换还是会受到影响。

  2. 速度相较于Convolution没有优势

Relation to Self-Attention

self-attention可以看作广义involution的一种实例

可以看到与self-attention之间的相似性:

相似:

  1. 其中H可以类比为involution中的G;
  2. self-attention中每个位置的关系矩阵可以类比为involution中每个位置的kernel。

不同:

  1. 相比于self-attention,Involution潜在编码了位置信息,而self-attention需要position encoding来区分位置信息.
  2. 不在需要使用Q-K,仅依靠单个像素生成kernel,而非依靠像素间的关系生成attention map.

总结:self-attention是Involution的一种实例化,且Involution的表达更为宽泛和简洁。

Ablantion Analysis

可以看到:

  • Involution能在不显著提升参数量和计算量的前提下,增大kernel的感受野,提升网络性能;
  • 在显著降低计算量和参数量的情况下,准确度损失却不大。

其他

  1. 关于卷积的可替代性

    特征在空间位置上差异明显,我们更需要注意长距离关系时,involution或许是个好的选择。

  2. 训练与优化

    不同于convolution,involution实际上是二阶优化,需要优化的并不是kernel,而是kernel生成函数里的参数,这就会造成很多问题(最近的transformer优化过程也有很多问题),作者建议对于某些网络需要使用gradient clipping等方法来进行更好的优化。

  3. 硬件支持

    involution的优化并没有convolution好,也没有相应硬件的支持,因此虽然参数量和计算量都减小了,但是实际并没有convolution快,作者建议使用CUDA编写Involution。

超越卷积、自注意力:神经网络新算子「内卷(Involution)」相关推荐

  1. 代码质量在「内卷时代」的重要性

    这里是Z哥的个人公众号 每周五11:45 按时送达 当然了,也会时不时加个餐- 我的第「173」篇原创敬上 大家好,我是Z哥. 提到代码质量,不知道你的脑海中浮现出的第一个词是什么?规范?可读性?优雅 ...

  2. 在外远程访问禅道,点亮软件测试新技能「内网穿透」

    文章目录 1.前言 2.BUG管理软件设置 2.1.禅道Bug管理软件下载安装 2.2.cpolar下载安装 3.本地内网穿透 3.1.Cpolar云端设置 3.2.Cpolar本地设置 4.公网访问 ...

  3. 太卷了!人大附中「内卷」到了美国?华裔家长抗议中国学生持F1签证抢占美国IMO名额...

      视学算法报道   来源:weibo 编辑:yaxin [新智元导读]近日,一封华裔家长的抗议公开信引发热议.他/她在信中抗议持F1签证的中国留学生入选美国IMO国家队. 国内的严重「内卷」慢慢卷到 ...

  4. 人大附中「内卷」到了美国?华裔家长抗议中国学生持F1签证抢占美国IMO名额...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 来源:weibo 编辑:yaxin [导读]近日,一封华裔家长的抗议公 ...

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

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

  6. 本科毕业出国率下降,考研or保研?条条大路通「内卷」

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 来源:知乎 转载自:新智元 [导读]近日,华科大计算机本科生毕业报告引发了讨论.一边是只有5% ...

  7. 超越卷积、自注意力机制:强大的神经网络新算子involution(连算子都内卷= =)

    这篇工作主要是由我和SENet的作者胡杰一起完成的,也非常感谢HKUST的两位导师 陈启峰和张潼老师的讨论和建议. 本文是对我们CVPR 2021被接收的文章 Involution: Invertin ...

  8. Involution论文解读:从卷积变换出的神经网络新算子

    这篇文章来自CVPR2021,作者是港科大计算机系在读,本科毕业于清华,个人主页. Motivation 既然是从卷积出发,我们需要先梳理卷积. 卷积的操作如上图所示,是目前神经网络里最基础的算子. ...

  9. 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​分别 ...

最新文章

  1. 手把手教你使用Flex 3——《Flex 3程序设计》
  2. 程序员带半箱辣条参加东京奥运,网友:这不是辣条,是狗粮!
  3. tim计时器读出为0_高中物理 必修1 (12) 第一章 运动的描述 课时4 实验:用打点计时器测速度(1)...
  4. matplotlib库绘图基础
  5. Linux 下 新增Oracle10g 实例
  6. 玉米转座子插入型突变体”五折优惠
  7. springboot开发简单的web应用前篇
  8. new 对象时的暗执行顺序
  9. Unity带参数的协程
  10. 美国人太嚣张(爆笑呀!)
  11. VB6基本数据库应用(一):数据库基础
  12. Echart饼状图百分比显示
  13. 解决git克隆到本地的仓库文件夹不显示红色感叹号、绿色对号等图标的问题
  14. 机器人摘果子看图写话_作文:摘苹果(看图写话)
  15. 微信小程序时间轴demo_微信小程序时间轴实现方法示例
  16. PHP民俗文化管理系统,中国民俗文化
  17. Apache Structured Streaming_JZZ158_MBY
  18. KubeEdge SIG AI发布首个分布式协同AI Benchmark调研
  19. 利用CNN进行句子分类的敏感性分析
  20. Scrapy爬虫:抓取大量斗图网站最新表情图片

热门文章

  1. 【博学谷学习记录】超强总结,用心分享|js语法基础(一)
  2. 带阻滤波器对周期性噪声消除matlab实现
  3. 在PHP中全面阻止SQL注入式攻击之三
  4. 对标测评YD云电脑和天翼云电脑公众版
  5. 【Arduino学习笔记】使用L298N电机驱动模块驱动直流电机
  6. 【工作需要】CAD+VBA 实现图块的旋转平移缩放和拼接
  7. 【悟空云课堂】第二十六期:通过错误消息导致的信息暴露(CWE-209:Generation of Error Message Containing Sensitive Information)
  8. 计算机控制键功能,电脑ctrl键的功能
  9. java绝对值怎么取
  10. MongoDB数据迁移之迁移工具Kettle