HorNet:使用递归门控卷积构建高阶空间交互
- 论文:https://arxiv.org/abs/2207.14284
- 代码:https://github.com/raoyongming/HorNet/blob/master/hornet.py
- 解析:https://mp.weixin.qq.com/s/MyMIPv-bn9wVMLABurjOUA
这篇文章旨在使用卷积结构设计一种更加有效的空间交互模块。作者们通过递归门控策略设计了递归门控卷积操作,从而在特征内部构建了更高阶的空间交互过程。这种结构可以作者为一种即插即用的模块来提升视觉Transformer或者卷积模型。除了构建backbone,也可以用于解码器来提升密集预测任务的性能。
本文将Vision Transformer成功背后的关键因素总结为三点:
- 输入自适应
- 长距离依赖关系
- 高阶空间交互
这三点主要由Self Attention操作实现。
Recursive Gated Convolution
这是本文的核心结构。其完全围绕卷积操作构建。其主要包含三点好处:
- 有效性(efficient):卷积实现避免了Self Attention的平方复杂度。
- 可扩展性(extendable):可以通过调整参数实现更高阶的空间交互,从而进一步提升模型的建模能力。而且结构中可以兼容不同的卷积核大小以及空间混合策略,像是更大卷积核的深度分离卷积或者是基于傅里叶变换的Global Filter。
- 平移等变性:由于核心操作仍然基于卷积,所以整体也继承了卷积的平移等变性。这为模型引入了有益的归纳偏置,避免由于局部注意力带来的非对称性。
结构具体操作流程延续了递归的思想,对输入构造不同的分支,各分支渐进式的实现了一种递归的形式。
模块具体运算流程如下:
- 整体模型基础构建block仍然延续Vision Transformer的形式,且遵循pre-norm策略。其中的Self Attention被替换为gnconv。
- 经过一个独立的卷积层后通道数被调整为输入通道数C的两倍,即2C。
- 对于指定的阶数n,对2C依此除以n次2获得n个不同通道数的组和。
- 将n个通道数从小到大排序后表示为 C k C_k Ck( k = [ 0 , n − 1 ] k=[0,n-1] k=[0,n−1])。
- 将前面的输出分为 C 0 C_0 C0和 C 0 + C 1 + … + C n − 1 C_0+C_1+…+C_{n-1} C0+C1+…+Cn−1两组,分别表示为 p 0 p_0 p0和 q 0 ∼ n − 1 q_{0 \sim n-1} q0∼n−1。
- q 0 ∼ n − 1 q_{0 \sim n-1} q0∼n−1整体通过一个独立的7x7的深度分离卷积或者是global filter后乘以一个独立的放缩系数。
- q 0 ∼ n − 1 q_{0 \sim n-1} q0∼n−1按照 C 0 C_0 C0、 C 1 C_1 C1、…、 C n − 1 C_{n-1} Cn−1拆分为n组得到 q 0 q_0 q0、 q 1 q_1 q1、…、 q n − 1 q_{n-1} qn−1。
- p 1 = p 0 ∗ q 0 p_1=p_0 * q_0 p1=p0∗q0
- p k + 1 = L i n e a r ( p k ) ∗ q k p_{k+1}=Linear(p_k)*q_k pk+1=Linear(pk)∗qk
- 输出通过对 p n p_n pn进行1x1卷积即可,通道数不变,因为此时的通道数恰好等于输入通道。
其他架构细节
- stem使用4x4且步长为4的跨步卷积+LN实现。
- stage里的下采样通过LN+2x2且步长为2的跨步卷积实现。
- 使用了layer scale;
- 使用了stochastic depth;
- 分类头使用Global Average Pooling+LN+Linear实现。
实验结果