深度学习论文: 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}

    Lp)

  • Normalization 采用了Layer Normalization
  • Activations 采用了GELU

3 Experiments

在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>