重磅开源!87.5%准确率!十字形注意力的CSWin Transformer

本文主要是介绍重磅开源!87.5%准确率!十字形注意力的CSWin Transformer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击下方卡片,关注“CVer”公众号

AI/CV重磅干货,第一时间送达

作者丨小马

转载自丨极市平台

导读

 

本文提出了十字形状的自注意力机制,能够在水平和垂直两个方向上同时计算注意力权重。在没有额外数据预训练的情况,CSWin-B能达到85.4%的top-1准确率,用ImageNet-21K预训练时,能够达到87.5%的top-1准确率。

写在前面

本文工作的出发点和目前大多数的ViT的出发点非常相似,都是为了解决Self-Attention(SA)的计算复杂度和输入特征大小呈平方的关系,导致对于一些细粒度的任务(e.g. 目标检测、实例分割)不太友好。解决这一问题的最直接的方法就是引入局部Attention,但是在只有局部注意力的情况下,每个block的信息不能交互,会导致模型性能的下降,目前解决这一问题的方法有Halo[1]和Shift Window[2]。本文提出了十字形状的自注意力机制,能够在水平和垂直两个方向上同时计算注意力权重。

除此之外,作者还提出了一种局部增强的位置编码,相比于以前的位置编码,本文提出的位置编码有两个好处:1)能够适应不同大小的输入特征;2)具有更强的局部假设偏置。

作者在ImageNet上进行实验,在没有额外数据预训练的情况,CSWin-B能达到85.4%的top-1准确率,用ImageNet-21K预训练时,能够达到87.5%的top-1准确率。此外,作者还在目标检测和语义分割任务上进行了实验,都取得了非常好的效果。

1. 论文和代码地址

CSWin Transformer: A General Vision Transformer Backbone with Cross-Shaped Windows

论文地址:https://arxiv.org/abs/2107.00652

代码地址(于15小时前刚刚开源):

https://github.com/microsoft/CSWin-Transformer

2. Motivation

众所周知,由于SA的时间复杂度和输入特征的大小成平方关系,因此ViT对于一些需要高分辨率的任务,在计算上是效率不高的。因此Local Attention被提出来解决这个问题,并且用Halo、Shift等操作来交互相邻窗口的位置信息,但是这样的操作使得模型的感受野是慢慢扩大的,因此需堆积很多层之后才能获取全局的注意力,而比较大的感受野对于检测、分割等任务又是非常重要的。那么怎么才能保持计算量在比较低的情况下,获取更大的感受野呢?

所以本文作者就提出了一个十字形状的自注意力(Cross-Shaped Window (CSWin) self-attention),能够并行的计算横向和纵向的注意力。

如上图所示,CSWin的感受野是和(b),(c),(d),(e)不同的,并且本文的方法在计算不同方向attention的时候是并行的,而(c),(e)计算不同区域attention的时候是串行的,这就会引入额外的计算量和参数量。

Noting:个人觉得其实本文的结构跟(e)的结构非常相似,都是捕获横向和纵向的注意力,不同的是本文用了一半的head捕获横向注意力,另一半的head捕获纵向注意力,但是e的结构是先捕获横向注意力、再捕获纵向注意力,后面的操作是基于前面的操作,所以不能够并行计算,这就导致模型的计算时间会变长。

除此之外,作者还引入了一个能够适应不同大小输入特征的相对位置编码(Locally-enhanced Positional Encoding (LePE)),用卷积来加强局部偏置,并直接加到SA的结果后面,来减少计算量。

3. 方法

3.1. Overall Architecture

本文的模型结构如上图所示,整个结构和Swin Transformer非常相似(Swin-T的结构如下图所示)。

首先在token embedding的时候,作者采用了带重叠的卷积(步长为5,卷积核大小为7x7)来获得 的patch token,之前也有工作[3]证明带重叠的卷积会比不重叠的卷积效果要好。每个CSwin Transformer Block进行上图(右)的操作。之后,为了减少计算量和获取更大感受野,在每一个stage之后,作者又用了带重叠的卷积(步长为2,卷积核大小为3x3),将特征缩小为原来的1/2。

相比于其他ViT结构,CSwin Transformer主要有两点不同:1)将SA替换成了SCWin Self-Attention;2)提出了一个新的位置编码算法,引入局部假设偏置,并能够和SA模块并行计算。

3.2. Cross-Shape Window(SCWin) Self-Attention

由于HaloNet、Swin Transformer都能够的感受野都是慢慢扩大,因此获取全局注意力之前需要经过很多层。为了扩大attention的区域,更加有效的获取全局注意力,本文提出了一个十字形状的attention。

如上图所示,作者将attention的所有head分为两部分,一部分用来捕获横向的注意力(attention区域为: ),另一部分用来捕获纵向的注意力(attention的区域为: ),其中 为超参数,在不同的stage中sw是不一样的。

Noting:

为什么每个stage的sw是不一样的?

因为SWin每个stage之后都进行了降采样,所以越到后面的stage,特征的H和W会越来越小。作者在前面的stage中采用了较小的sw,后面的stage中采用较大的sw。

个人觉得这么做主要有两方面的原因:

1)第一,前期H和W较大,如果sw也比较大,那就会导致计算量很大,极端情况下,sw=H或者sw=W,那就相当于直接进行了全局的SA,导致计算量爆炸。因此作者在前期H、W较大的时候,用较小的sw来限制计算量;后期等H、W比较小的时候,在用比较大的sw来扩大感受野。

2)第二,前面的Stage是用来获取局部的attention(这里指宽度较小的十字),后面的stage用获取全局的attention。(但是个人感觉如果这么做的话,就和作者提的Motivation有点冲突了,因为其他ViT结构的由局部慢慢变成全局注意力,如果前面的stage用较小的sw,那么前期也只能捕获局部注意力(十字形的局部),所以就跟其他结构一样是从局部到全局的一个过程。

3.3. 计算复杂度分析

CSWin的计算复杂度如上面的公式,由三部分组成:4个FC的复杂度,计算横向attention的复杂度,计算纵向attention的复杂度。作者在每个stage取的sw分别为[1,2,7,7],前面sw较小,后面sw较大,使得CSWin的感受野能够逐步变大,并且计算量也能控制在一个可以接受的范围内。

3.4. 局部增强的位置编码

SA具有排列不变性(不同排列的输出结果是一样的),为了弥补SA的这个缺陷,通常会在Transformer上加入位置编码。

APE/CPE(上图左)是在进行SA之前就加入了位置信息,RPE(上图中)是在计算权重矩阵的过程中加入相对位置信息。作者采用了一种更加直接的方式进行了位置信息编码:直接将位置信息加入到Value中,然后将结果加到SA的结果中。

如上面的公式所示,作者为了减少计算量,只捕获了局部的注意力,所以用了一个Depth-wise Conv对value进行卷积,然后将结果加入到了SA的结果中。

(这么做一方面是能够加入相对位置信息,另一方面还引入了局部的假设偏置,来提高模型的泛化能力。)

3.5.  CSWin Transformer Block

CSWin Transformer block的结构和其它ViT的结构都非常相似,不同的只是加了局部增强的位置编码,将注意力机制换成了十字形状的Self-Attention。可以用公式表示成:

根据参数量和计算量,注意这个提出了CSWin-T的四个实例化变种,配置如下:

4.实验

4.1.  ImageNet-1K Classification

如上图所示,在没有预训练的情况下,CSWin-T能够用相似的计算量和参数量,比其他的ViT和CNN结构达到更好的效果。

在用ImageNet-21K预训练的情况SCWin-L能够达到87.5%的准确率

4.2. COCO Object Detection

在COCO数据下,使用Mask R-CNN的框架,CSWin的能够取得不错的效果。

使用CascadeMask R-CNN的框架,CSWin依旧能够超过SWin-T和ResNeXt。

4.3. ADE20K Semantic Segmentation

在语义分割任务上,本文也能比Swin-Transformer高出比较多的性能。

4.4. 消融实验

可以看出逐步增大sw、并行的SA、用层数较多通道较少的结构、用重叠的卷积,这些trick能够提升网络的性能。

本文提出的十字形注意力、局部增强的位置编码,都能有效提升在检测、分割任务上的性能。

5. 总结

CSWin最大的不同就是引入了一个十字形状的注意力,看似和VOLO、CoAtNet、Focal SA有很大的不同,但本质上作者在进行下采样和局部增强的位置编码时,都用的是卷积,在这个过程中还是引入了局部假设偏置,所以本质上这还是一篇“SA全局建模+局部假设偏置”的文章,从这一点上说就和上面提到的文章很像了,只是实现方式不一样。(从实验结果看,LePE对模型性能的提升还是非常大的,这也可以间接说明,局部偏置对于CV任务的重要性)

但是这篇文章很有意思的一点是,将head进行了分组,不同组进行计算不同方向(区域)的注意力,由于是并行计算的,所以并不需要额外的计算时间和参数。作者在这篇文章中只是将这些head分为两组,那分为更多组,每个组还是关注不同的区域,那样感受野就会更大,对模型的性能是否还会有进一步的提升呢?

参考文献

[1]. Vaswani, Ashish, et al. "Scaling local self-attention for parameter efficient visual backbones." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021.

[2]. Liu, Ze, et al. "Swin transformer: Hierarchical vision transformer using shifted windows." arXiv preprint arXiv:2103.14030 (2021).

[3]. Xiao, Tete, et al. "Early Convolutions Help Transformers See Better." arXiv preprint arXiv:2106.14881 (2021).

本文亮点总结

1.首先在token embedding的时候,作者采用了带重叠的卷积(步长为5,卷积核大小为7x7)来获得 的patch token。之后,为了减少计算量和获取更大感受野,在每一个stage之后,作者又用了带重叠的卷积(步长为2,卷积核大小为3x3),将特征缩小为原来的1/2。

2.APE/CPE是在进行SA之前就加入了位置信息,RPE是在计算权重矩阵的过程中加入相对位置信息。作者采用了一种更加直接的方式进行了位置信息编码:直接将位置信息加入到Value中,然后将结果加到SA的结果中。

CSWin论文和代码下载

后台回复:CSWin,即可下载上述论文PDF和代码

后台回复:ICCV2021,即可下载ICCV 2021论文和代码开源的论文合集

后台回复:CVPR2021,即可下载CVPR 2021论文和代码开源的论文合集

后台回复:Transformer综述,即可下载最新的两篇Transformer综述PDF

CVer-Transformer交流群成立

扫码添加CVer助手,可申请加入CVer-Transformer 微信交流群,方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如Transformer+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

▲长按加小助手微信,进交流群

▲点击上方卡片,关注CVer公众号

整理不易,请点赞和在看

这篇关于重磅开源!87.5%准确率!十字形注意力的CSWin Transformer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/332697

相关文章

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

无需邀请码!Manus复刻开源版OpenManus下载安装与体验

《无需邀请码!Manus复刻开源版OpenManus下载安装与体验》Manus的完美复刻开源版OpenManus安装与体验,无需邀请码,手把手教你如何在本地安装与配置Manus的开源版OpenManu... Manus是什么?Manus 是 Monica 团队推出的全球首款通用型 AI Agent。Man

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【Tools】大模型中的自注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 自注意力机制(Self-Attention)是一种在Transformer等大模型中经常使用的注意力机制。该机制通过对输入序列中的每个元素计算与其他元素之间的相似性,

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX