深度学习论文: Conv2Former: A Simple Transformer-Style ConvNet for Visual Recognition及其PyTorch实现
深度学习论文: Conv2Former: A Simple Transformer-Style ConvNet for Visual Recognition及其PyTorch实现
Conv2Former: A Simple Transformer-Style ConvNet for Visual Recognition
PDF: https://arxiv.org/pdf/2211.11943.pdf
PyTorch代码: https://github.com/shanglianlm0525/CvPytorch
PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks
1 概述
通过组合ConvNet与ViT的设计理念,本文利用卷积调制操作对自注意力进行了简化,进而构建了一种新的ConvNet架构Conv2Former。
ImageNet分类、COCO检测以及ADE20K分割任务上的实验结果表明:所提Conv2Former取得了优于主流ConvNet(如ConvNeXt)、ViT(如Swin Transformer)的性能
2 Conv2Former
Conv2Former采用金字塔架构,即包含四个阶段、四种不同尺寸的特征,相邻阶段之间通过Patch Embedding模块(其实就是一个卷积核与stride均为2的卷积)降低特征空间分辨率。
下表给出了不同大小Conv2Former的超参配置:
2-1 Convolutional Modulation Block
从经典的残差模块到自注意力模块,再到新一代卷积模块。
自注意力模块可以表示为如下形式:
其中
A
A
A 可以更好的编码空域相关性,但其计算复杂性随N而爆炸性增长。
Convolutional Modulation Block 采用卷积特征对
V
V
V 进行调制
其中
⊙
odot
⊙ 表示Hadamard乘积。Convolutional Modulation Block使得每个位置的元素与其近邻相关,而通道间的信息聚合则可以通过线性层实现。
PyTorch代码:
class ConvMod(nn.Module):
def __init__(self, dim):
super().__init__()
self.norm = LayerNorm(dim, eps=1e-6)
self.a = nn.Sequential(
nn.Conv2d(dim, dim, 1),
nn.GELU(),
nn.Conv2d(dim, dim, 11, padding=5, groups=dim)
)
self.v = nn.Conv2d(dim, dim, 1)
self.proj = nn.Conv2d(dim, dim, 1)
def forward(self, x):
B, C, H, W = x.shape
x = self.norm(x)
a = self.a(x)
v = self.v(x)
x = a * v
x = self.proj(x)
return x
微观设计理念:
- 采用 11x11 的大卷积核
- 在Hadamard乘积之前并未添加任务规范化层(如Sigmoid,
L
p
L_{p}
- Normalization 采用了Layer Normalization
- Activations 采用了GELU