卷积调制空间自注意力SpatialAtt,轻量高效,即插即用!

科技   2025-01-20 11:07   中国香港  
点击上方小白学视觉”,选择加"星标"或“置顶
重磅干货,第一时间送达

一、论文信息 




 1
论文题目:Conv2Former: A Simple Transformer-Style ConvNet for Visual Recognition
中文题目:Conv2Former: 一种简单的视觉识别用的Transformer风格卷积网络
论文链接:https://arxiv.org/pdf/2211.11943
官方github:https://github.com/HVision-NKU/Conv2Former
所属机构:天津南开大学计算机科学学院,字节跳动(新加坡)
核心速览:本文提出了一种名为Conv2Former的简单Transformer风格的卷积神经网络(ConvNet),用于视觉识别任务。该网络通过简化自注意力机制,利用卷积调制操作来编码空间特征,展示了在图像分类、目标检测和语义分割等任务上优于现有流行ConvNets和视觉Transformer模型的性能。

二、论文概要 




 

Highlight

图4. 消融实验。对于Conv2Former-T和Conv2Former-B,当核大小从5×5增加到21×21时,我们可以观察到一致的性能提升。当将哈达玛乘积替换为逐元素求和操作时,我们Conv2Former的四种变体的性能均有所下降。

1. 研究背景:

  • 研究问题:如何更高效地利用卷积操作来编码空间特征,以提升视觉识别模型的性能。
  • 研究难点:在设计视觉识别模型时,如何平衡模型的性能与计算成本,尤其是在处理高分辨率图像时,自注意力机制的计算成本较高。
  • 文献综述:文章回顾了从早期的卷积神经网络(如AlexNet、VGGNet、GoogLeNet)到现代的视觉Transformer(如ViT、DeiT)的发展历程。特别提到了一些工作通过引入大卷积核、高阶空间交互或稀疏卷积核等方法来改进ConvNets的设计。此外,还提到了Vision Transformer在视觉识别任务中的成功应用,以及一些研究通过引入局部依赖性或探索Transformer的扩展能力来提升模型性能。
2. 本文贡献:
  • 提出Conv2Former网络架构:Conv2Former是一种新的卷积网络架构,用于视觉识别任务。该网络的核心是卷积调制操作,它通过仅使用卷积和Hadamard乘积来简化自注意力机制。通过比较卷积神经网络(ConvNets)和视觉变换器(Vision Transformers)的设计原则,提出利用卷积调制操作来简化自注意力。
  • 卷积调制操作:与自注意力通过矩阵乘法生成注意力矩阵不同,卷积调制操作直接使用k×k深度可分离卷积来产生权重,并通过Hadamard乘积重新加权值表示。这种操作允许每个空间位置与中心点周围k×k区域内的所有像素相关联。
  • 网络设计与调整:Conv2Former采用金字塔结构,包含四个阶段,每个阶段具有不同的特征图分辨率。在连续阶段之间使用补丁嵌入块来降低分辨率。研究者们构建了五个Conv2Former变体,分别命名为Conv2Former-N、Conv2Former-T、Conv2Former-S、Conv2Former-B和Conv2Former-L,并提供了它们的简要配置。
  • 实验结果:CAS-ViT模型在多个视觉任务上取得了优异的性能,包括图像分类、对象检测、实例分割和语义分割。在ImageNet-1K数据集上,CAS-ViT模型的M和T模型分别以12M和21M参数取得了83.0%/84.1%的top-1准确率。

三、方法 




 1

图1. 自注意力机制与提出的卷积调制操作的比较。不是通过查询和键之间的矩阵乘法生成注意力矩阵,而是直接使用k × k深度可分离卷积来产生权重,通过Hadamard乘积(⊙:Hadamard乘积;⊗:矩阵乘法)重新加权值。

图3. 自注意力和典型卷积块的空间编码过程比较。我们的方法使用深度卷积的卷积特征作为权重来调节值表示,如(d)中右侧线性层所示。

正如论文题目写的那样,卷积调制空间自注意力的实现原理非常简洁,它不是通过Q和K之间的矩阵乘法生成注意力矩阵,而是直接使用k × k深度可分离卷积来产生权重,通过Hadamard乘积(哈达玛积,也叫基本积,即:两个矩阵同阶,对应元素相乘的结果矩阵)生成特征优化结果。网络定义如下面代码所示:

图2. Conv2Former的整体架构。像大多数之前的ConvNets和Swin Transformer一样,我们采用了一个包含四个阶段的金字塔结构。在每个阶段,使用了不同数量的卷积块。这个图展示了所提出的Conv2Former-T的设置,其中{L1, L2, L3, L4} = {3, 3, 12, 3}。
表1. 所提出的Conv2Former的简要配置。实现了5种变体,其参数数量分别为15M、27M、50M、90M和199M。

四、实验分析 




 
1. 图像分类——ImageNet-1K: Conv2Former在ImageNet-1k数据集上进行了训练,并在ImageNet-1k验证集上报告了结果。对于不同大小的模型,Conv2Former均表现出比现有CNN和Transformer模型更好的性能。例如,Conv2Former-T在参数为27M、FLOPs为4.4G的情况下,达到了83.2%的Top-1准确率,而ConvNeXt-T在相似参数下为82.1%。此外,Conv2Former还在ImageNet-22k数据集上进行了预训练,并在ImageNet-1k数据集上进行了微调,结果显示Conv2Former在模型大小相似的情况下,性能优于ConvNeXt和MOAT等模型。Conv2Former-B在ImageNet-1k数据集上达到了84.4%的Top-1准确率,而EfficientNet-B7在计算量是其两倍的情况下,准确率为84.3%。
2. 目标检测和实例分割——COCO 2017: 在COCO数据集上,使用Mask R-CNN和Cascade Mask R-CNN作为目标检测器,Conv2Former在对象检测和实例分割任务上也取得了较好的结果。例如,Conv2Former-T在使用Mask R-CNN时,AP(平均精度)为48.0%,而SwinT-T为46.0%。
3. 语义分割——ADE 20K: 在ADE 20k数据集上,Conv 2Former同样在语义分割任务上表现优异。Conv 2Former-T在使用UperNet作为解码器时,mIoU(平均交并比)为48.0%,而SwinT-T为45.8%。

    五、代码 




     1
    温馨提示:对于所有推文中出现的代码,如果您在微信中复制的代码排版错乱,请复制该篇推文的链接,在任意浏览器中打开,再复制相应代码,即可成功在开发环境中运行!或者进入官方github仓库找到对应代码进行复制! 
    import torchimport torch.nn as nn# 论文题目:Conv2Former: A Simple Transformer-Style ConvNet for Visual Recognition# 中文题目:Conv2Former: 一种简单的视觉识别用的Transformer风格卷积网络# 论文链接:https://arxiv.org/pdf/2211.11943# 官方github:https://github.com/HVision-NKU/Conv2Former# 所属机构:天津南开大学计算机科学学院,字节跳动(新加坡)# 代码整理:微信公众号《AI缝合术》# 全部即插即用模块代码:https://github.com/AIFengheshu/Plug-play-modulesclass LayerNorm(nn.Module):    r""" LayerNorm that supports two data formats: channels_last (default) or channels_first.     The ordering of the dimensions in the inputs. channels_last corresponds to inputs with     shape (batch_size, height, width, channels) while channels_first corresponds to inputs     with shape (batch_size, channels, height, width).    """    def __init__(self, normalized_shape, eps=1e-6, data_format="channels_last"):        super().__init__()        self.weight = nn.Parameter(torch.ones(normalized_shape))        self.bias = nn.Parameter(torch.zeros(normalized_shape))        self.eps = eps        self.data_format = data_format        if self.data_format not in ["channels_last""channels_first"]:            raise NotImplementedError         self.normalized_shape = (normalized_shape, )        def forward(self, x):        if self.data_format == "channels_last":            return F.layer_norm(x, self.normalized_shape, self.weight, self.bias, self.eps)        elif self.data_format == "channels_first":            u = x.mean(1, keepdim=True)            s = (x - u).pow(2).mean(1, keepdim=True)            x = (x - u) / torch.sqrt(s + self.eps)            x = self.weight[:, None, None] * x + self.bias[:, None, None]            return x        class ConvModulOperationSpatialAttention(nn.Module):    def __init__(self, dim, kernel_size, expand_ratio=2):        super().__init__()        self.norm = LayerNorm(dim, eps=1e-6, data_format="channels_first")        self.att = nn.Sequential(                nn.Conv2d(dim, dim, 1),                nn.GELU(),                nn.Conv2d(dim, dim, kernel_size=kernel_size, padding=kernel_size//2, 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)                x = self.att(x) * self.v(x)        x = self.proj(x)        return xif __name__ == "__main__":    # 将模块移动到 GPU(如果可用)    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")    # 创建测试输入张量 (batch_size, channels, height, width)    x = torch.randn(132256256).to(device)    # 初始化 ConvSAtt 模块    ConvSAtt = ConvModulOperationSpatialAttention(dim=32, kernel_size=3)    print(ConvSAtt)    print("微信公众号:AI缝合术")    ConvSAtt = ConvSAtt.to(device)    # 前向传播    output = ConvSAtt(x)        # 打印输入和输出张量的形状    print("输入张量形状:", x.shape)    print("输出张量形状:", output.shape)

    运行结果

    便捷下载

    https://github.com/AIFengheshu/Plug-play-modules/blob/main/(TPAMI%202024)%20ConvSAtt.py
    下载1:OpenCV-Contrib扩展模块中文版教程
    在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

    下载2:Python视觉实战项目52讲
    小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

    下载3:OpenCV实战项目20讲
    小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

    交流群


    欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


    小白学视觉
    哈工大在读博士的公众号,《OpenCV 4快速入门》的作者,面向初学者介绍计算机视觉基础知识、OpenCV使用、SLAM技术,深度学习等内容。
     最新文章