基础概念:
卷积操作:
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=1∑Ci(u,v)∈ΔK∑Fk,c,u+⌊K/2⌋,v+⌊K/2⌋Xi+u,j+v,c(1)
输入: X ∈ R H × W × C i X\in\mathbb{R}^{H\times{W}\times{C_i}} X∈RH×W×Ci;输出: Y ∈ R H × W × C o Y\in\mathbb{R}^{H\times{W}\times{C_o}} Y∈RH×W×Co;卷积核: F ∈ R C o × C i × K × K \mathcal{F}\in\mathbb{R}^{C_o\times{C_i}\times{K}\times{K}} F∈RCo×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 Fk∈RCi×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算子:
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)∈ΔK∑Hi,j,u+⌊K/2⌋,v+⌊K/2⌋,⌈kG/C⌉Xi+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}} H∈RH×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,∙,∙,g∈RK×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}} W0∈RrC×C, W 1 ∈ R K × K × G × C r W_1\in\mathbb{R}^{{K}\times{K}\times{G}\times\frac{C}{r}} W1∈RK×K×G×rC, σ = R e L U ( B N ( ⋅ ) ) \sigma=ReLU(BN(\cdot)) σ=ReLU(BN(⋅))
示意图如下图所示:
在示意图中分组 G = 1 G=1 G=1, H i , j ∈ R K × K \mathcal{H}_{i,j}\in\mathbb{R}^{{K}\times{K}} Hi,j∈RK×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×K2G→K×K×G)得到核 H i , j \mathcal{H}_{i,j} Hi,j,同一个组内共用一个核 H i , j \mathcal{H}_{i,j} Hi,j。余下的操作核卷积一样(乘加)。下图为Pytorch的伪代码示意图
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的卷积,有助于通道间的信息交互。总之,通道-空间交互、空间单独交互和通道单独交互交替而独立地作用于信息传播流中,在保证网络表示能力的同时,也促进了网络结构的小型化。
多头自注意力:
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/C⌉Vp,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中左侧部分的核生成的流程)
图像分类:
在运行时间上GPU采用的型号为:NVIDIA TITAN Xp GPU;CPU为:Intel® Xeon® CPU E5-2660 [email protected]。
目标检测与实例分割:
语义分割:
在COCO数据集的实验中,可以看到Involution在大物体的AP指标上性能提升最明显;在Cityscapes的分割中,像wall、truck和bus这些大物体,性能也有了明显的提升,说明Involution较Convolution在长距离的空间关系上建模更具有优势。
消融实验: