论文阅读笔记:内卷involution《Involution: Inverting the Inherence of Convolution for Visual Recognition》

论文阅读笔记:内卷involution《Involution: Inverting the Inherence of Convolution for Visual Recognition》


本笔记是根据论文和作者的论文讲解视频理解而写的,中间可能会存在理解偏差,望大佬们指正
论文链接:https://arxiv.org/abs/2103.06255
论文代码:https://github.com/d-li14/involution
作者论文解读视频

背景

基础概念:
卷积操作
Y i , j , k = ∑ c = 1 C i ∑ ( u , v ) ∈ Δ K F k , c , u + ⌊ K / 2 ⌋ , v + ⌊ K / 2 ⌋ X i + u , j + v , c (1) Y_{i,j,k}=\sum_{c=1}^{C_i}\sum_{(u,v)\in\Delta_{K}}\mathcal{F}_{k,c,u+\left \lfloor{K/2} \right \rfloor,v+\left \lfloor{K/2} \right \rfloor}X_{i+u,j+v,c}\tag{1} Yi,j,k=c=1Ci(u,v)ΔKFk,c,u+K/2,v+K/2Xi+u,j+v,c(1)
输入: X ∈ R H × W × C i X\in\mathbb{R}^{H\times{W}\times{C_i}} XRH×W×Ci;输出: Y ∈ R H × W × C o Y\in\mathbb{R}^{H\times{W}\times{C_o}} YRH×W×Co;卷积核: F ∈ R C o × C i × K × K \mathcal{F}\in\mathbb{R}^{C_o\times{C_i}\times{K}\times{K}} FRCo×Ci×K×K,对于单个的卷积核 F k ∈ R C i × K × K , k = 1 , 2 , ⋯   , C o {\mathcal{F}}_{k}\in\mathbb{R}^{{C_i}\times{K}\times{K}}, k=1,2,\cdots ,C_o FkRCi×K×K,k=1,2,,Co;
感受野: Δ K = [ − ⌊ K / 2 ⌋ , ⋯   , ⌊ K / 2 ⌋ ] × [ − ⌊ K / 2 ⌋ , ⋯   , ⌊ K / 2 ⌋ ] \Delta_{K}=[-\left \lfloor{K/2} \right \rfloor,\cdots ,\left \lfloor{K/2} \right \rfloor]\times[-\left \lfloor{K/2} \right \rfloor,\cdots ,\left \lfloor{K/2} \right \rfloor] ΔK=[K/2,,K/2]×[K/2,,K/2]
C i C_i Ci C o C_o Co分别为输入和输出通道的数量。

 卷积核在卷积操作中两大性质:空间不变性(spatial-agnostic,以下简称为sa)和通道特异性(channel-specifific,以下简称为cs).

sa:对于单个feature map,卷积核是共享的,即不同空间位置卷积核是相同的。
cs:对于输出的feature map,它们之间的卷积核是不同的。

优势
sa:同一个feature map不同的空间位置卷积核参数共享,降低了参数空间的复杂度;维护平移不变性
cs:提取图像中不同的语义信息。

劣势
sa:空间位置上卷积核是固定的,因此它不能根据输入特征灵活地调整不同空间位置的权重;卷积核 F \mathcal{F} F的参数与 C i C_i Ci C o C_o Co和卷积核尺寸 K K K都有关系, C i C_i Ci C o C_o Co过大时容易限制 K K K的大小(VGG之后,卷积核的尺寸 K K K一般都为 3 × 3 3\times3 3×3),为了获得长距离的空间特征时就需要多次堆叠这种小卷积核,这在一定程度上不如使用一个大的卷积核。
cs:不同通道的卷积核可能存在冗余。

文章目的:设计一种新的算子,在计算高效的前提下,对于通道维度上有所缩减而又不影响表达能力,对于空间位置上能自适应的长距离关系的建模并灵活表达空间位置上不同的语义信息。

Involution

Involution算子
Y i , j , k = ∑ ( u , v ) ∈ Δ K H i , j , u + ⌊ K / 2 ⌋ , v + ⌊ K / 2 ⌋ , ⌈ k G / C ⌉ X i + u , j + v , k (2) Y_{i,j,k}=\sum_{(u,v)\in\Delta_{K}}\mathcal{H}_{i,j,u+\left \lfloor{K/2} \right \rfloor,v+\left \lfloor{K/2} \right \rfloor,\left \lceil{kG/C} \right \rceil}X_{i+u,j+v,k}\tag{2} Yi,j,k=(u,v)ΔKHi,j,u+K/2,v+K/2,kG/CXi+u,j+v,k(2)
内卷核 H ∈ R H × W × K × K × G \mathcal{H}\in\mathbb{R}^{H\times{W}\times{K}\times{K}\times{G}} HRH×W×K×K×G,对于单个的内卷核 H i , j , ∙ , ∙ , g ∈ R K × K , g = 1 , 2 , ⋯   , G \mathcal{H}_{i,j,\bullet,\bullet,g}\in\mathbb{R}^{K\times{K}},g=1,2,\cdots ,G Hi,j,,,gRK×K,g=1,2,,G. G 是 分 组 数 量 ( 即 深 度 可 分 离 卷 积 中 的 g r o u p ) , C 通 道 总 数 G是分组数量(即深度可分离卷积中的group),C通道总数 G(group)C

Involution的性质:通道不变性(channel-agnostic,以下简称为ca)和空间特异性(spatial-specifific,以下简称为ss)
ss:空间位置上的每一个像素都是单独享有一个核。
ca:通道维度是共享的,将C个通道分成G个组,每个组内是共享一个核,而组间核是不同的。

Involution核的生成方法
在卷积操作中,卷积核是一个固定尺寸可学习的参数矩阵( C i × C o × K × K C_i\times{C_o}\times{K}\times{K} Ci×Co×K×K),而在Involution中并不是这样,它是基于feature map来生成对应的核,来确保核的大小核输入的input feature map在空间维度是对齐的(内卷核具有空间特异性,如果也参照卷积核的生成方法,即参数化为一个固定大小的矩阵,则学习到的内卷核无法迁移到一个输入像素不同的任务中)。
H i , j = ϕ ( X Ψ i , j ) (3) \mathcal{H}_{i,j}=\phi(X_{\Psi_{i,j}})\tag{3} Hi,j=ϕ(XΨi,j)(3)
ϕ \phi ϕ即为一个核生成函数, Ψ i , j \Psi_{i,j} Ψi,j 像 素 H i , j 像素\mathcal{H}_{i,j} Hi,j所限定集合(邻域)的索引

核生成实例
为了简便计算: Ψ i , j \Psi_{i,j} Ψi,j在实例中取input feature map上 ( i , j ) (i,j) (i,j)这个点的特征向量。核生成函数则取了两个线性变换构成的bottleneck结构
H i , j = ϕ ( X Ψ i , j ) = W 1 σ ( W 0 X i , j ) (4) \mathcal{H}_{i,j}=\phi(X_{\Psi_{i,j}})=W_{1}\sigma(W_{0}X_{i,j})\tag{4} Hi,j=ϕ(XΨi,j)=W1σ(W0Xi,j)(4)
W 0 ∈ R C r × C W_0\in\mathbb{R}^{\frac{C}{r}\times{C}} W0RrC×C W 1 ∈ R K × K × G × C r W_1\in\mathbb{R}^{{K}\times{K}\times{G}\times\frac{C}{r}} W1RK×K×G×rC σ = R e L U ( B N ( ⋅ ) ) \sigma=ReLU(BN(\cdot)) σ=ReLU(BN())

示意图如下图所示:


Fig.1 involution核生成函数实例示意图

在示意图中分组 G = 1 G=1 G=1 H i , j ∈ R K × K \mathcal{H}_{i,j}\in\mathbb{R}^{{K}\times{K}} Hi,jRK×K,对于(i, j),它的输入(i, j)对应点的input feature map的特征向量( 1 × 1 × C 1\times1\times{C} 1×1×C),经过线性变换 W 0 W_0 W0,将 C C C维的向量压缩到 C r \frac{C}{r} rC(还是为了节省参数空间),然后经过非线性激活函数 σ \sigma σ,最后进行线性变换 W 1 W_1 W1,此时输出的维度维 1 × 1 × K 2 G 1\times{1}\times{K^2G} 1×1×K2G,然后进行通道-空间的reshape操作( 1 × 1 × K 2 G → K × K × G 1\times{1}\times{K^2G}\rightarrow {K}\times{K}\times{G} 1×1×K2GK×K×G)得到核 H i , j \mathcal{H}_{i,j} Hi,j,同一个组内共用一个核 H i , j \mathcal{H}_{i,j} Hi,j。余下的操作核卷积一样(乘加)。下图为Pytorch的伪代码示意图


Fig.2 involution核生成伪代码图

RedNet
作者将involution结构整合到ResNet网络中,命名为 RedNet。具体实施方法为在ResNet的bottleneck(分类或者稠密预测任务采用 3 × 3 3\times{3} 3×3 7 × 7 7\times{7} 7×7的involution核)和 trunk( 7 × 7 7\times{7} 7×7的involution核)上 3 × 3 3\times{3} 3×3的卷积核替换成involution,而 1 × 1 1\times{1} 1×1的卷积核则被保留。
作者在这也提到了involution核有效的原因:在卷积过程中空间和通道信息会紧密结合在一起,这就导致网络可能会产生冗余。而在RedNet中空间和通道间信息交互会被巧妙地解耦,即在involution核生成过程中,像素的通道维度所编码的信息被隐含地分散到它周围的空间附近,之后通过大量的动态的involution核收集感受野中的信息。并且RedNet保留了ResNet中 1 × 1 1\times{1} 1×1的卷积,有助于通道间的信息交互。总之,通道-空间交互、空间单独交互和通道单独交互交替而独立地作用于信息传播流中,在保证网络表示能力的同时,也促进了网络结构的小型化。

Involution与self-attention的关系

多头自注意力:
Y i , j , k = ∑ ( p , q ) ∈ Ω ( Q K T ) i , j , p , q , ⌈ k H / C ⌉ V p , q , k (5) Y_{i,j,k}=\sum_{(p,q)\in\Omega}({\bf{QK}}^{T})_{i,j,p,q,\left \lceil{kH/C} \right \rceil}{\bf{V}}_{p,q,k}\tag{5} Yi,j,k=(p,q)Ω(QKT)i,j,p,q,kH/CVp,q,k(5)
其中 ( i , j ) (i,j) (i,j)为query的位置, ( p , q ) (p,q) (p,q)为key的位置, Q = X W Q , K = X W K , V = X W V {\bf{Q}}={\bf{XW}}^Q, {\bf{K}}={\bf{XW}}^K, {\bf{V}}={\bf{XW}}^V Q=XWQ,K=XWK,V=XWV X \bf{X} X W ∗ {\bf{W}}^* W分别为输入和*的权重矩阵, H H H指头的数量,类似于卷积过程中通道维度上的卷积核的数量。
具体实施细节可以参考论文:《Attention is All You Need

self-attention可以看作是Involution的一种特殊的实例。当 Ψ i , j = Ω \Psi_{i,j}=\Omega Ψi,j=Ω时:
H i , j = ϕ ( X Ψ Ω ) = ( X W Q ) ( X W K ) T (6) \mathcal{H}_{i,j}=\phi(X_{\Psi_{\Omega}})=({\bf{XW}}^Q)({\bf{XW}}^K)^T\tag{6} Hi,j=ϕ(XΨΩ)=(XWQ)(XWK)T(6)
结合公式 ( 2 ) (2) (2),不难才看出self-attention也可以看作是Involution的一种特殊的实例。

相似性:
(1)self-attention中的头的数目 H H H<->Involution中的分组数目 G G G
(2)self-attention中的attention map: Q K T {\bf{QK}}^{T} QKT<->Involution的核 H \mathcal{H} H
区别:
(1)self-attention需要找像素-像素之间的关系,而Involution不需要。主要原因是作者认为一个大的动态核是网络取得良好性能的关键而不是核具体是通过什么形式生成的(Fig.1中的实例方法中的核只考虑了单个像素而生成的,而公式(6)中的实例方法中的核则是依赖patch中的各个像素关系间的关系生成的)。
(2)self-attention需要位置编码而Involution不需要,因为Involution的核中的参数在生成时就具有固定的空间位置关系(参考Fig.1中左侧部分的核生成的流程)

实验

图像分类


Fig.3 RedNet与其他SOTA模型在ImageNet上的性能对比

Fig.4 ImageNet数据集上的效能-准确率曲线

Fig.5 网络的运行时间分析

在运行时间上GPU采用的型号为:NVIDIA TITAN Xp GPU;CPU为:Intel® Xeon® CPU E5-2660 v4@2.00GHz。

目标检测与实例分割


Fig.6 COCO数据集上的检测和分割任务的性能对比(S,M,L分别指代小物体,中等物体和大物体)

语义分割


Fig.7 基于Semantic FPN的Cityscapes分割性能对比

Fig.8 基于UPerNet.的Cityscapes分割性能对比

在COCO数据集的实验中,可以看到Involution在大物体的AP指标上性能提升最明显;在Cityscapes的分割中,像wall、truck和bus这些大物体,性能也有了明显的提升,说明Involution较Convolution在长距离的空间关系上建模更具有优势。

消融实验


Fig.9 参数K, G, r的对性能的影响
### 回答1: involution是一种用于视觉识别的算法,它反转了卷积的内在特性。它通过将卷积操作中的滤波器权重转换为可学习的点积操作,从而提高了模型的效率和准确性。involution算法在计算机视觉领域中具有广泛的应用,特别是在目标检测和图像分割等任务中。 ### 回答2: involution是在计算机视觉领域中概念比较新的一种方法。它是对传统卷积算法的一种逆运算,用来增强卷积神经网络中的非线性建模能力。involution的核心思想是在特征图的每个位置上利用可学习的感受野(receptive field)来进行特征融合,使得网络可以更好地捕捉目标之间的全局关系。 举个例子,我们在计算机视觉中常用的卷积层中,每一个卷积核通常只能对应一个大小固定的感受野。而involution层通过在每个位置上学习一个可变大小的感受野来取代卷积核,从而增强了网络对于目标间距离的捕捉。同时,involution层不仅可以被添加到普通的卷积神经网络中,还可以嵌入到注意力机制、自注意力机制等模型中,提高了模型的表达能力和性能。 相对于传统的卷积层,involution层有多方面的优点。首先,可变感受野大小的应用让involution能够处理更加复杂的视觉场景。其次,involution能够更好地捕捉目标之间的全局关系,对于跨越较大距离的目标关系识别和图像分割等任务非常有效。最后,involution的结构相对简单,不需要过多的计算与存储,可以大幅度减少网络的训练时间和计算资源占用,同时保证优秀的性能表现。 总之,involution可以被看作是一种高效而又强大的计算机视觉算法,对于面对复杂的图像场景和目标识别任务的解决具有重要的意义。 ### 回答3: Involution是近年来计算机视觉领域中一个新的概念,是一种反转卷积convolution)的方法,可以更高效地进行视觉识别。所谓卷积,即是将一个滤波器与输入数据的每一个小区域进行乘法运算,然后将所有乘积相加得到一个数值作为输出。而在深度学习中,我们通常使用卷积神经网络来对输入数据进行分类或识别。 然而,在深度学习中,卷积处理是一件十分耗费计算资源的任务。特别是当我们需要处理高分辨率的图像时,其复杂度更是极高。因此,为了提高卷积神经网络的效率,Involution便应运而生。 那么,Involution到底是如何实现反转卷积的呢?其实,它的实现方法非常简单。它通过将输入数据划分成不同的区域,然后在每个小区域内执行局部变换操作,最后再将每个小区域的结果组合成一个输出。这种做法可以使得计算量大幅度降低,同时还可以减少运算中的参数数量。而且,按照这种方法执行的Involution操作还可以在不同分辨率之间进行协作,进一步提高神经网络的效率和准确率。 总之,Involution通过将输入数据分解成小块,实现了卷积操作的反转,从而实现了对图像的高效处理,特别是对于大尺度的图像和超高分辨率的图像,效果是非常显著的。其简单而有效的原理,有望成为未来深度学习领域的重要研究方向之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值