其实这篇文章很早就写好了,但作者其它论文涉及到洗稿问题,所以先放着了。目前看这篇文章没被举报有洗稿的嫌疑,所以就发出来了

.

来源:晓飞的算法工程笔记 公众号

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

Introduction


  论文认为卷积操作有三个问题:

  • 空间不变(spatial-agnostic)的计算方式虽然节省参数以及带来平移不变性,却也剥夺了卷积从不同位置发掘不同特征的能力。
  • 常用的卷积核大小为\(3\times 3\),过小的感受野会约束与长距离特征的互动,限制特征提取能力。
  • 卷积核的冗余性已经被广泛地发现。

  为了解决上述的问题,论文提出了与卷积有相反属性的操作involution,核参数在空间上面特异,而在通道上面共享,主要有以下两个优点:

  • 通道共享减少了大量参数,使得involution可以使用更大的核,从而能够捕捉长距离特征。
  • 由于involution是空间特异的,相同的网络不同的输入会产生不同大小的特征图,对应的核大小也不一样,所以involution根据输入特征动态生成核参数,能够自适应地提取更多的视觉信息,达到类似attention的效果。

Design of Involution


  一组involution核可表示为\(\mathcal{H}\in \mathbb{R}^{H\times W\times K\times K\times G}\),这里的分组与卷积相反,增加分组是为了增加核的复杂性。对于像素\(X_{i,j}\in \mathbb{R}^C\),其involution核为\(\mathcal{H}_{i,j,\cdot,\cdot,g}\in \mathbb{R}^{K\times K}\),\(g=1,2,\cdots,G\)为involtion核的分组,组内核共享。involution的特征图输出通过对输入特征进行Multiply-Add操作得到:

  \(k\)为通道编号,involution核的大小取决于输入特征图的大小,通过核生成函数\(\phi\)动态生成:

  \(\Psi_{i,j}\)为\(\mathcal{H}_{i,j}\)对应的输入像素合集。

Implementation Details

  为了简洁,论文直接从单个像素\(X_{i,j}\)生成对应的involution核\(\mathcal{H}_{i,j}\),更复杂的结构也许能带来更好的性能,但不是当前主要的工作。定义核生成函数\(\phi\):\(\mathbb{R}^C\mapsto\mathbb{R}^{K\times K\times G}\),\(\Psi_{i,j}=\{(i,j)\}\):

  \(W_0\in\mathbb{R}^{\frac{C}{r}\times C}\)和\(W_1\in\mathbb{R}^{(K\times K\times G)\times\frac{C}{r}}\)为线性变换,共同构成一个bottleneck结构,\(r\)为压缩因子,\(\sigma\)为BN+非线性激活。

  公式4和公式6可表示为算法1和图1,在每个位置\((i,j)\)通过核生成函数生成对应的involution核,再对该位置进行计算得到输出。

  在构建完整的网络时,以ResNet作为基础,将stem(开头)的bottleneck中的\(3\times 3\)卷积替换成\(3\times 3\)或\(7\times 7\)的involution,将trunk(后续)的bottleneck中的\(3\times 3\)卷积替换成\(7\times 7\)的involution,\(1\times 1\)卷积保留用作通道融合与扩展。

  Involution的优势在于通道信息在核生成时利用了起来,并且后续使用较大的感受野获得更大的空间信息。另外在使用时,前后的\(1\times 1\)卷积也增加了通道交互,从而提升了整体的性能。

In Context of Prior Literature


  下面分别对involution进行两方面的探讨,分别是参数量下降的来源以及性能提升的来源。

Convolution and Variants

  Involution的思想十分简洁,从卷积的通道特异、空间共享转换成通道共享、空间特异,我们从参数量和计算量两块来进行分析(不考虑bias和involution的G):

  • 参数量方面,卷积和involution分别为\(C\times K\times K\times C\)和\(H\times W\times K\times K\times C\),由于网络后续的特征图较小特点,involution能够节省大量的参数。
  • 计算量方面,不考虑核生成部分,卷积和involtion分别为\(H\times W \times C\times K\times K\times C\)和\(H\times W\times K\times K\times C\),由于involution在输出单像素结果时不需要像卷积那样综合多通道输入,计算量减少了一个量级。

  因为标准卷积实际上会融合多个输入通道进行输出,而且通道不共享,导致参数量和计算量都很高。而分组卷积减少了标准卷积中输出通道与输入通道之间的大量关联,和invlotion在参数量和计算量上有十分相似的地方:

  • 参数量方面,分组卷积和involution分别为\(\frac{C}{G}\times K\times K\times C\)和\(H\times W\times K\times K\times G\),而\(G=C\)的分组卷积和\(G=1\)的involution的参数量分别为\(K\times K\times C\)和\(H\times W\times K\times K\),两者十分接近。
  • 计算量方面,不考虑核生成部分,分组卷积和involution分别为\(\frac{C}{G}\times H\times W \times K\times K\times C\)和\(H\times W\times K\times K\times C\),而\(G=C\)的分组卷积和\(G=1\)的involtion分别为\(H\times W\times K\times K\times C\)和\(H\times W\times K\times K\times C\),两者完全一致。

  \(G=C\)的分组卷积即depthwise卷积,\(G=1\)的involution和depthwise卷积两者在结构上也可以认为是完全对立的,一个则通道共享、空间独立,另一个通道独立、空间共享,而在depthwise卷积上加上空间特异的属性即\(G=C\)的involution。但在之前很多的研究中,depthwise卷积一般都只用于轻量化网络的搭建,会牺牲部分准确率,而involution却能在减少部分参数量的同时提升准确率。我觉得除了空间特异带来大量参数之外,主要得益于两个部分设计:1)核大小增加到\(7\times 7\)。 2) 根据输入特征动态生成核参数。如果将depthwise卷积按类似的设置替换卷积核,不知道能否达到类似的结果。

Attention Mechanism

  self-attention起源于nlp任务,目前在视觉上的应用十分火热,有不错的性能表现。将输入向量线性转化成查询项\(Q\)、关键词项\(K\)以及值项\(V\)后,先用\(QK^{T}\)计算出相似性,再对值项加权后输出,大致的公式为:

  如果将involution的核生成函数\(\mathcal{H}\)看成是\(QK^{T}\)的话,则可认为involution在某种意义上等同于self-attention,position encoding的信息也可认为是隐藏在了核生成函数里面,与生成的位置相关。文章花了很多篇幅去说明involution是self-attention的高层定义,有兴趣的可以去看看。不过我们只要理解,involution在特征图的不同位置动态生成了不同的核参数,功能上类似于self-attention中的attention即可,这也是involution能够提升准确率的关键。

Experiment


  从实验结果来看,由involution搭建的ReaNet能够在准确率提升的情况下减少大量的参数,从实际速度来看,GPU速度与ResNet差不多,CPU速度则提升很大。

Conclusion


  论文创新地提出了与卷积特性完全相反的基础算子Involution,该算子在通道上共享,而在空间上特异,不仅能够大幅减少参数量,还集成了attention的特性,在速度和准确率上都有很不错的表现。





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

Involution:空间不共享?可完全替代卷积的高性能算子 | CVPR 2021的更多相关文章

  1. [Mysql]Innodb 独立表空间和共享表空间

    innodb有2中表空间方式: 共享表空间 和 独立表空间 查询数据的设置: show variables like '%per_table'; 默认是共享表空间,独立表空间在配置文件中添加 inno ...

  2. MySQL如何判别InnoDB表是独立表空间还是共享表空间

    InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file ...

  3. 彻底理解数字图像处理中的卷积-以Sobel算子为例

    彻底理解数字图像处理中的卷积-以Sobel算子为例 作者:FreeBlues 修订记录 2016.08.04 初稿完成 概述 卷积在信号处理领域有极其广泛的应用, 也有严格的物理和数学定义. 本文只讨 ...

  4. mysql中独立表空间与共享表空间之前如何切换

    环境 mysql版本:5.7.19 官方文档:(https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html) 查看 ...

  5. Mysql InnoDB 共享表空间和独立表空间

    前言:学习mysql的时候总是习惯性的和oracle数据库进行比较.在学习mysql InnoDB的存储结构的时候也免不了跟oracle进行比较.Oracle的数据存储有表空间.段.区.块.数据文件: ...

  6. 浅析mysql 共享表空间与独享表空间以及他们之间的转化

        innodb这种引擎,与MYISAM引擎的区别很大.特别是它的数据存储格式等.对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间.什么是共享表空间和独占表空间共 ...

  7. 共享表空间VS独立表空间

    基础概念:共享表空间 VS 独立表空间 [共享表空间] 又称为system tablespace系统表空间,a small set of data files (the ibdata files) . ...

  8. 【转载】Innodb共享表空间VS独立表空间

    http://www.mysqlsupport.cn/innodb%E5%85%B1%E4%BA%AB%E8%A1%A8%E7%A9%BA%E9%97%B4vs%E7%8B%AC%E7%AB%8B%E ...

  9. mysql共享表空间和独立表空间

    innodb这种引擎,与MYISAM引擎的区别很大.特别是它的数据存储格式等. 对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间. 什么是共享表空间和独占表空间 共享 ...

  10. mysql之 共享表空间与独立表空间、frm,MYD,MYI.idb,par文件说明

    一.共享表空间与独立表空间MySQL5.5默认是共享表空间 ,5.6中,默认是独立表空间. 共享表空间:ibdata1是InnoDB的共享表空间,默认配置是把全部表空间存放到ibdata1中,因此而造 ...

随机推荐

  1. sentry-cli 的 windows 安装

    项目搭建时,发现在使用高版本 sentry-cli 上传 pdb 文件后会报 404 错误,同事猜测高版本的 sentry-cli 会返回错误的地址,建议我用低版本的试一下 依据教程,我在 windo ...

  2. nuxt调用weixin-js-sdk

    在nuxt中调用weixin-js-sdk与在vue中有所不同. 通常在vue中用 import wx from 'weixin-js-sdk' 调用weixin-js-sdk,但在nuxt中会出现w ...

  3. 【Azure API 管理】APIM的容量指标(Capacity)数据异常高的情况记录

    问题描述 APIM从标准版降级到基础版,在没有用户使用的情况,Capacity的指标平均显示在80%以上. 这是什么异常情况呢? 问题分析 APIM的容量指标(Capacity)是 API 管理实例中 ...

  4. Rabbit使用CorrelationId进行可靠性消息回调

    先放一张使用CorrelationId相关ID进行消息回调处理的流程图 客户端启动时,它将创建一个匿名回调队列 对于 RPC 请求,客户端发送一条消息,该消息具有两个属性: reply_to(设置为回 ...

  5. TCP的链接和断开_wireShark实践

    目录 准备 TCP连接的三次握手 WireShark验证 TCP的四次挥手 WireShark验证 状态解释 其他的 # 概述 终于到了学习总结时间了 准备 TCP连接的三次握手 转自https:/ ...

  6. RocketMQ(10) 消息类型

    一.普通消息 1. 消息发送方式分类 Producer对于消息的发送方式也有多种选择,不同的方式会产生不同的系统效果. 同步发送消息: 同步发送消息是指,Producer发出⼀条消息后,会在收到MQ返 ...

  7. Android---Android 开发四大组件

    Android 应用程序组件 应用程序组件是一个Android应用程序的基本构建块.这些组件由应用清单文件松耦合的组织.AndroidManifest.xml描述了应用程序的每个组件,以及他们如何交互 ...

  8. Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、实现)

    @ 目录 题面 链接 题意 题解 代码 总结 题面 链接 C. Kefa and Park 题意 求叶节点数量,叶节点满足,从根节点到叶节点的路径上最长连续1的长度小于m 题解 这道题目主要是实现,当 ...

  9. 【python】使用百度api进行音频文件转写

    [python]使用百度api进行音频文件转写 脚本目标: 智能云的音频文件转写文档只给了个demo,每次只能传1分钟以内的音频啥的,不好直接用,简单打包一下,做到把音频放文件夹,直接出转写结果就行了 ...

  10. day03-模块化编程

    模块化编程 1.基本介绍 传统的非模块化开发有如下的缺点:(1)命名冲突(2)文件依赖 JavaScript代码越来越庞大,JavaScript引入模块化编程,开发者只需要实现核心的业务逻辑,其他都可 ...