Advertisement

深度学习论文: Conv2Former: A Simple Transformer-Style ConvNet for Visual Recognition及其PyTorch实现

阅读量:

深度学习论文: Conv2Former:一种基于Transformer-style卷积神经网络(CNN)用于视觉识别
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分割任务上

2 Conv2Former

Conv2Former基于金字塔架构展开设计,在系统中主要由四个不同的层级和四种不同尺寸的特征描述构成。各层级之间通过一种称为Patch Embedding模块的技术实现连接,在此过程中其本质是使用一个带有stride为2的卷积核进行操作以降低特征空间分辨率。

在这里插入图片描述

下表给出了不同大小Conv2Former的超参配置:

在这里插入图片描述

2-1 Convolutional Modulation Block

从经典的残差模块到自注意力模块,再到新一代卷积模块。

在这里插入图片描述

自注意力模块可以表示为如下形式:

在这里插入图片描述

其中 A 可以更好的编码空域相关性,但其计算复杂性随N而爆炸性增长。

在这里插入图片描述

Convolutional Modulation Block 采用卷积特征对 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
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

微观设计理念:

  • 应用大型卷积核进行图像处理。
  • 在Hadamard乘积之前未引入相关任务的归一化机制(包括Sigmoid函数和L_{p}范数)。
  • 对Norm进行了Layer Normalization处理。
  • 选择使用了GELU激活函数。

3 Experiments

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~