这篇文章来自CVPR2021,作者是港科大计算机系在读,本科毕业于清华,个人主页。
Motivation
既然是从卷积出发,我们需要先梳理卷积。
卷积的操作如上图所示,是目前神经网络里最基础的算子。
它具备两个特性:
- 空间不变性
因为卷积网络采用滑窗的形式,所以对于一张图片的各个部分,是共享卷积核参数的,相比于全连接网络,它在某个像素处,只考虑一个小邻域的信息,相当于加了一个很强的正则。
这个特性的好处是大大降低了图像处理所需的参数量,以及使得网络输出具有平移不变性,也就是某一个特征不管出现在图像的某处,都会得到相同的输出。
但是,平移不变性带来的坏处在于网络忽略了图像特征的位置信息,同时也受制于卷积核的大小使得网络无法提取远距离的像素相关性。 - 通道特异性
另一个特性是通道特异性,意思是每个输出通道来自于同一个卷积核,如图(来源见水印):
如果一个Kernel的size是 K × K × C K\times K \times C K×K×C的,那么我们把它展开成 C × K 2 C\times K^2 C×K2的矩阵,在C很大的时候,因为矩阵的秩最大不超过 K 2 K^2 K2,所以其中一定有信息的冗余。
Dao
网络设计的本质在于分配算力,而卷积显然是将算力更多地分配在通道之间。
但是从人的视觉出发,我们更关注像素空间的联系,所以卷积有一定的不合理性。
Involution
作者基于此,给出了一种和卷积对偶的算子,称为内卷。
这张图说明了Involution的工作流程:对某一处的像素(图中红色部分),首先用∅函数(一般是某种线性变换,在论文中是BottleNeck形式,即一种1x1卷积的组合生成特定大小的向量)生成特定大小的权重向量,然后再用一种变换H(最一般的形式是重新排列)将权重展开成一个kernel,最后在通道维度上延展(直接复制),得到K×𝐶×𝐶的卷积核,与原图作卷积操作,得到输出。
Experiments
作者的实验分布很广,就不一一罗列了,主要有一个很有意思的地方:完全用Invo代替Conv并不能得到很好的效果,而是Conv作Head,Invo作Neck效果更好,那么像素空间信息的整合到底是在哪一步更重要呢?