involution理解

article/2025/11/9 5:45:04

最好的参考来自论文作者的知乎: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,反着来的卷积?内卷?》
在这里插入图片描述

在这里插入图片描述


http://chatgpt.dhexx.cn/article/hCa6n67I.shtml

相关文章

网络中的pvid与native vlan(本征vlan)区别以及详解

一:pvid与native vlan分别属于华为和思科交换里面的概念,虽然说法不同,但是本质都是缺省vlan 缺省vlan默认为1,各个端口都有一个缺省的vlan,该值支持修改。 2.作用概念,pvid存在于trunk中,且&…

VTP、PVID、ACCESS、trunk

一、VTP详解 VTP有server、client、transparent三种模式、VTP多用于在多vlan的网络环境中,在核心交换机或者根节点交换机中配置Server,在下层的交互机中配置client,VTP在服务模式下,可以创建、删除、修改VLAN,并且转发…

不同VLAN下实现网络互相通信(配置port trunk pvid vlan进行数据转发)

1. 两台交换机同一网段&#xff0c;不同VLAN实现网络互通&#xff0c;逻辑拓扑图如下&#xff1a; 需求&#xff1a;实现VLAN 10与VLAN20之间的PC网络互通 在LSW 12交换机进行如下命令行配置&#xff1a; <HuaWei>system-view #切换系统视图 [Huawei]sysname…

VLAN Tag,PVID

VLAN(Virtual Local Network&#xff0c;虚拟局域网)&#xff0c;对于VLAN的划分方法有很多种&#xff1a;基于端口划分&#xff0c;基于MAC地址划分&#xff0c;基于网络协议划分&#xff0c;基于IP地址划分&#xff0c;基于策略划分等等。但是就上述而言&#xff0c;对VLAN的…

trunk vlan pvid 学习实验整理 2

实验总结&#xff1a; trunk vlan vlan1 vid pvid 等关系。 实验场景二&#xff1a; 上述条件不变【实验场景一】&#xff0c;将PC1 加入vlan10 [SW1]interface Ethernet 0/0/1 [SW1-Ethernet0/0/1]port link-type access [SW1-Ethernet0/0/1]port default vlan 10 >>…

trunk vlan pvid 学习实验整理 1

实验总结&#xff1a; trunk vlan vlan1 vid pvid 等关系。 实验场景一&#xff1a; 将PC1/PC2/PC3,都置于同一网段&#xff1a;192.168.1.0/24 1.PC1 不加入任何vlan&#xff0c;PC2 不加入任何vlan&#xff0c;PC3加入vlan10 2.trunk链路允许vlan 10 20通过。 配置&#xf…

PVID(pvid vlan是什么意思)

26tpwinet如何设置端口pvid25口设置为trunk口&#xff1f; 首先你要确定你的电脑有没有USB转com口线&#xff0c;或者你的笔记本是否支持com口 如果你是win7系统确实没有超级终端那么你可以下一个SecureCRT&#xff0c;然后在设备管理器里面看一下自己是COM几口&#xff0c;波…

PVID和VID的理解

VID解释 VID&#xff08;VLAN ID&#xff09;是VLAN的标识&#xff0c;在交换机里面用来划分端口。比如一个交换机有8个端口&#xff0c;现在将port1&#xff0c;port2&#xff0c;port5三个端口的VID设置成1111&#xff0c;那么这三个端口就能接收vlantag1111的数据包。   …

2、PVID(本征VLAN)实验配置步骤

实验拓扑图&#xff1a; 实验配置思路&#xff1a; 将VLAN10配置为本征VLAN 本征VLAN通过Trunk接口时不打tag标记 实验摘要重点命令&#xff1a; [SW1]int g0/0/1 //进入接口 [SW1-GigabitEthernet0/0/1]port trunk pvid vlan 10 //将VLAN10设置为本征VLAN [SW1-Gig…

华为交换机PVID与VLAN ID及TAG 、UNTAG学习记录

一、PVID和VLAN ID 1、PVID是端口的属性&#xff0c;端口的标识&#xff0c;具有唯一性&#xff0c;交换机默认未配置Vlan的情况下&#xff0c;因为全局vlan1的原因&#xff0c;所有端口的PVID都是1。如下图&#xff1a; 2、交换机里面display port vlan命令可以查看未配置状态…

switch中的PVID、VID、untag、tag概念

以openwrt为例&#xff0c;下图是mt7621&#xff08;glinet mt1300&#xff09;中switch配置图 该switch一共有7个port&#xff0c;一个连接CPU&#xff0c;还有6个可供外部使用&#xff0c;上图只显示了6个port&#xff1b; 一个switch可以设置多个VLAN&#xff08;虚拟局域网…

springboot @Qualifier 注解的作用

Qualifier 注解的用法和要解决的问题 现在这两个类都实现了同一个接口。 controller 要注入这个接口 启动服务日志显示在容器中找到俩个实现类 spring不知道要实现那个 1 有两种方式 既然spring不知道那就直接指明你要实现的类 直接注入实现类 这样有点粗鲁 也能解决问题。…

Spring中的@Qualifier注解

国庆期间闲来无事&#xff0c;写了一个简单的小程序&#xff0c;小程序名称叫做 IT藏经楼。目的是分享这些年自己积累的一些学习材料&#xff0c;方面大家查找使用&#xff0c;包括电子书、案例项目、学习视频、面试题和一些PPT模板。里面所有材料都免费分享。目前小程序中只发…

@Qualifier的用处

Qualifier的用处 可以对于一个接口&#xff0c;多个实现类&#xff0c;指定具体注入哪个实现类到这个接口类 在Server 实例化的时候没有指明名称&#xff0c;在atuoWire的时候没有用Quality指明用哪一个的时候&#xff0c;这这时会用容器中仅有的那一个对象&#xff08;单利&am…

@Autowired和@Qualifier

Autowired 的作用是什么&#xff1f; 1、Autowired 是一个注释&#xff0c;它可以对类成员变量、方法及构造函数进行标注&#xff0c;让 spring 完成 bean 自动装配的工作。 Autowired 默认是按照类去匹配&#xff0c;配合 Qualifier 指定按照名称去装配 bean。 可以这样理解为…

spring注解@Qualifier的详细用法

环境&#xff1a;springboot2.3.10 一般使用在项目中使用Qualifier来限定注入的Bean。 由于项目中我习惯用Resource注解&#xff0c;所以这里先对Autowired和Resource进行个简单的说明。 Autowired和Resource区别 相同点&#xff1a; Autowired与Resource都可以用来装配Be…

Spring 注解 @Qualifier 详细解析

文章目录 1. 概述2. 痛点3. Qualifier4. Qualifier VS Primary5. 通过名称来自动注入6. 总结 1. 概述 今天带你了解一下 Spring 框架中的 Qualifier 注解&#xff0c;它解决了哪些问题&#xff0c;以及如何使用它。我们还将了解它与 Primary 注解的不同之处。更多的技术解析请…

@Qualifier注解作用

Qualifier 注解作用就是为了给Bean打上一个标记&#xff0c;用来查找bean&#xff0c;代码示例: 创建一个java bean package com.gupaoedu.springcloud.example.demo;public class TestClass {private String name; // getter setter 略 }编写配置类&#xff0c;将这个bean装载…

Spring的注解@Qualifier用法

Spring的注解Qualifier用法 在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢&#xff1f; 根据注入资源的注解不同实现的方式有一点小小的区别 下面上铺垫图 请忽略我的红线 ##在Controller中使用 Autowired注入时 Qualifier的意思是合格…

java连接mysql数据库实现图书馆管理系统

图书馆管理系统&#xff0c;具体功能包括&#xff1a; 1. 用户登录 2. 用户注册 3. 新图书入库 4. 图书信息查询 5. 图书更新&#xff08;修改&#xff09; 6. 旧图书删除 7. 办理借阅证登记 8. 图书借阅管理 完整项目&#xff1a;https://download.csdn.net/download/sger123/…