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

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

本文转载自:Smarter

Swin Transformer 代码于2021年4月13日凌晨刚刚开源!

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

同时用于目标检测、语义分割任务的Swin Transformer也已经开源!

https://github.com/SwinTransformer/Swin-Transformer-Object-Detection

https://github.com/SwinTransformer/Swin-Transformer-Semantic-Segmentation

Swin Transformer有多强?!

目标检测在COCO上刷到58.7 AP(目前第一)

实例分割在COCO上刷到51.1 Mask AP(目前第一)

语义分割在ADE20K上刷到53.5 mIoU(目前第一)

paper: https://arxiv.org/abs/2103.14030

code: https://github.com/microsoft/Swin-Transformer

最近Transformer的文章眼花缭乱,但是精度和速度相较于CNN而言还是差点意思,直到Swin Transformer的出现,让人感觉到了一丝丝激动,Swin Transformer可能是CNN的完美替代方案。

作者分析表明,Transformer从NLP迁移到CV上没有大放异彩主要有两点原因:1. 两个领域涉及的scale不同,NLP的scale是标准固定的,而CV的scale变化范围非常大。2. CV比起NLP需要更大的分辨率,而且CV中使用Transformer的计算复杂度是图像尺度的平方,这会导致计算量过于庞大。为了解决这两个问题,Swin Transformer相比之前的ViT做了两个改进:

1.引入CNN中常用的层次化构建方式构建层次化Transformer

2.引入locality思想,对无重合的window区域内进行self-attention计算。

相比于ViT,Swin Transfomer计算复杂度大幅度降低,具有输入图像大小线性计算复杂度。Swin Transformer随着深度加深,逐渐合并图像块来构建层次化Transformer,可以作为通用的视觉骨干网络,应用于图像分类、目标检测和语义分割等任务。

01

Swin Transformer 

整个Swin Transformer架构,和CNN架构非常相似,构建了4个stage,每个stage中都是类似的重复单元。和ViT类似,通过patch partition将输入图片HxWx3划分为不重合的patch集合,其中每个patch尺寸为4x4,那么每个patch的特征维度为4x4x3=48,patch块的数量为H/4 x W/4;stage1部分,先通过一个linear embedding将输划分后的patch特征维度变成C,然后送入Swin Transformer Block;stage2-stage4操作相同,先通过一个patch merging,将输入按照2x2的相邻patches合并,这样子patch块的数量就变成了H/8 x W/8,特征维度就变成了4C,这个地方文章写的不清楚,猜测是跟stage1一样使用linear embedding将4C压缩成2C,然后送入Swin Transformer Block。

另外有一个细节,Swin Transformer和ViT划分patch的方式略有不同,ViT是先确定patch的数量,然后计算确定每个patch的尺寸,而Swin Transformer是先确定每个patch的大小,然后计算确定patch数量。这个设计猜测是为了方便Swin Transformer的层级构建。

上图是两个连续的Swin Transformer Block。一个Swin Transformer Block由一个带两层MLP的shifted window based MSA组成。在每个MSA模块和每个MLP之前使用LayerNorm(LN)层,并在每个MSA和MLP之后使用残差连接。

02

Shifted Window based MSA 

上图中红色区域是window,灰色区域是patch。W-MSA将输入图片划分成不重合的windows,然后在不同的window内进行self-attention计算。假设一个图片有hxw的patches,每个window包含MxM个patches,那么MSA和W-MSA的计算复杂度分别为:














































































由于window的patch数量远小于图片patch数量,W-MSA的计算复杂度和图像尺寸呈线性关系。

另外W-MSA虽然降低了计算复杂度,但是不重合的window之间缺乏信息交流,于是作者进一步引入shifted window partition来解决不同window的信息交流问题,在两个连续的Swin Transformer Block中交替使用W-MSA和SW-MSA。以上图为例,将前一层Swin Transformer Block的8x8尺寸feature map划分成2x2个patch,每个patch尺寸为4x4,然后将下一层Swin Transformer Block的window位置进行移动,得到3x3个不重合的patch。移动window的划分方式使上一层相邻的不重合window之间引入连接,大大的增加了感受野。

但是shifted window划分方式还引入了另外一个问题,就是会产生更多的windows,并且其中一部分window小于普通的window,比如2x2个patch -> 3x3个patch,windows数量增加了一倍多。于是作者提出了通过沿着左上方向cyclic shift的方式来解决这个问题,移动后,一个batched window由几个特征不相邻的sub-windows组成,因此使用masking mechanism来限制self-attention在sub-window内进行计算。cyclic shift之后,batched window和regular window数量保持一致,极大提高了Swin Transformer的计算效率。这一部分比较抽象复杂,不好理解,等代码开源了再补上。

03

实验结果

 

放一些实验结果,感受一下Swin Transformer对之前SOTA的降维打击。

图像分类碾压:

目标检测碾压

语义分割碾压

04

总结

网络架构设计:CNN based和Transformer based

上一篇文章讨论了一下网络架构设计是以CNN为主好还是Transformer为主好的问题,Swin Transformer给出了答案。Swin Transformer 吸收了CNN的locality、translation invariance和hierarchical等优点,形成了对CNN的降维打击。

Swin Transformer改进思路还是源于CNN,Transformer站在巨人的肩膀上又迎来了一次巨大的飞跃,未来Transformer会接过CNN手中的接力棒,把locality、translation invariance和hierarchical等思想继续发扬光大。

另外附上原作者团队(曹越)的部分解读:

https://www.zhihu.com/question/437495132/answer/1800881612

在这个问题里潜水已久,借着今天组里放出了Swin Transformer,来回答一下。

在Attention is all you need那篇文章出来之后,就一直在思考一个问题:从建模的基本单元来看,self-attention module到底在vision领域能做什么?从现在回头看,主要尝试的就是两个方向:

1. 作为convolution的补充。绝大多数工作基本上都是从这个角度出发的,比如relation networks、non-local networks、DETR,以及后来的一大批改进和应用。其中一部分是从long-range dependency引入,某种程度上是在弥补convolution is too local;另一部分是从关系建模引入,例如建模物体之间或物体与像素之间的关系,也是在做一些conv做不了的事。

2. 替代convolution。在这个方向上尝试不多,早期有LocalRelationNet、Stand-alone Self-attention Net。如果仅看结果,这些工作基本上已经可以做到替换掉3x3 conv不掉点,但有一个通病就是速度慢,即使是写kernel依然抵不过对conv的强大优化,导致这一类方法在当时并没有成为主流。

到这个时候(2020年左右),我自己其实有一种到了瓶颈期的感觉,作为conv的补充好像做的差不多了,后续的工作也都大同小异,替代conv因为速度的问题难以解决而遥遥无期。

没想到的是,Vision Transformer(ViT)在2020年10月横空出世

ViT的出现改变了很多固有认知,我的理解主要有两点:1. locality(局部性);2. translation invariance(平移不变性)。从模型本身的设计角度,ViT并不直接具有这两个性质,但是它依然可以work的很好,虽然是需要大数据集的。但DeiT通过尝试各种tricks使得ViT可以只需要ImageNet-1k就可以取得非常不错的性能,使得直接上手尝试变得没那么昂贵。

其实对ViT的accuracy我个人不是特别惊讶,一方面是因为之前在local relation那一系列已经证明了self-attention有替代conv的能力,另一方面是因为19年iclr有一篇paper叫BagNet,证明了直接切patch过网络,在网络中间patch之间没有交互,最后接一个pooling再做classification,结果也已经不错了,在这个的基础上加上self-attention效果更好是可以理解的。

我个人其实惊讶于ViT/DeiT的latency/acc curve,在local relation net里速度是最大的瓶颈,为什么ViT可以速度这么快?仔细对比ViT与local relation可以发现,这里一个很大的区别是,ViT中不同的query是share key set的,这会使得内存访问非常友好而大幅度提速。一旦解决了速度问题,self-attention module在替代conv的过程中就没有阻力了。

基于这些理解,我们组提出了一个通用的视觉骨干网络Swin Transformer [paper] [code],在这里简单介绍一下。

1. 之前的ViT中,由于self-attention是全局计算的,所以在图像分辨率较大时不太经济。由于locality一直是视觉建模里非常有效的一种inductive bias,所以我们将图片切分为无重合的window,然后在local window内部进行self-attention计算。为了让window之间有信息交换,我们在相邻两层使用不同的window划分(shifted window)。

2. 图片中的物体大小不一,而ViT中使用固定的scale进行建模或许对下游任务例如目标检测而言不是最优的。在这里我们还是follow传统CNN构建了一个层次化的transformer模型,从4x逐渐降分辨率到32x,这样也可以在任意框架中无缝替代之前的CNN模型。

Swin Transformer的这些特性使其可直接用于多种视觉任务,包括图像分类(ImageNet-1K中取得86.4 top-1 acc)、目标检测(COCO test-dev 58.7 box AP和51.1 mask AP)和语义分割(ADE20K 53.5 val mIoU,并在其公开benchmark中排名第一),其中在COCO目标检测与ADE20K语义分割中均为state-of-the-art

更详细的实验以及其他细节见[paper],感谢阅读~

PDF下载

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

CVPR和Transformer资料下载

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

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

CVer-Transformer交流群成立

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

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

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

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

整理不易,请给CVer点赞和在看

重磅开源!屠榜各大CV任务!最强骨干网络:Swin Transformer来了相关推荐

  1. ICCV 2021 Best Paper | Swin Transformer何以屠榜各大CV任务!

    作者:陀飞轮@知乎(已授权) 来源:https://zhuanlan.zhihu.com/p/360513527 编辑:智源社区 近日,Swin Transformer拿到2021 ICCV Best ...

  2. 屠榜各大CV任务!最强骨干网络:Swin Transformer来了

    原文地址:https://mp.weixin.qq.com/s/z91JuI2w1QZg-3ZxN-OmwQ paper: https://arxiv.org/abs/2103.14030 code: ...

  3. 屠榜各大CV任务!最强骨干网络:Swin Transformer V2来了

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 转载自丨极市平台   作者丨happy 导读 针对SwinV1在更大模型方面存在的几点问题,Swin tra ...

  4. 霸榜各大CV任务榜单,Swin Transformer横空出世!

    1. ImageNet-1K的图像分类 Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 一元@炼丹笔记 ...

  5. 中国公用计算机互联网8个大区分别是,中国idc骨干网络介绍

    中国idc骨干网络介绍,8大节点城市分布 ChinaNet--中国公用Internet骨干网,ChinaNet是邮电部门经营管理的基于Internet网络技术的中国公用计算机互联网,是国际计算机互联网 ...

  6. 霸榜多个CV任务!开源仅两天,已收获2.1k star

    本文转载自机器之心. 屠榜各大 CV 任务的微软 Swin Transformer,近日开源了代码和预训练模型. 自 2017 年 6 月谷歌提出 Transformer 以来,它便逐渐成为了自然语言 ...

  7. 霸榜多个CV任务,开源仅两天,微软分层ViT模型收获近2k star

    视学算法报道 转载自:机器之心 编辑:维度 屠榜各大 CV 任务的微软 Swin Transformer,近日开源了代码和预训练模型. 自 2017 年 6 月谷歌提出 Transformer 以来, ...

  8. 屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

    文 | 魏旭 编 | 橙橙子,小戏 当 BERT 模型出来之后,Transformer 架构基本成为 NLP 任务的底色.诸如 Roberta.XLNet.ELECTRA.GPT3 等刷榜各类 NLP ...

  9. 继 Swin Transformer 之后,MSRA 开源 Video Swin Transformer,在视频数据集上SOTA

    关注公众号,发现CV技术之美 继上半年分享的『基于Transformer的通用视觉架构:Swin-Transformer带来多任务大范围性能提升』.『Swin Transformer为主干,清华等提出 ...

最新文章

  1. java严格区分大小写吗_Java是否区分大小写?
  2. 实验四 使用C++的mfc实现圆心为任意位置的圆的绘制。
  3. python用于什么-Python用于哪些领域
  4. SQL Server中常用的SQL语句
  5. hdu2235 机器人的容器
  6. DevOps笔记-06:什么是CI/CD?它们与敏捷开发和devops的关系?
  7. 新书上市:《FLUENT 14.0超级学习手册》
  8. mysql安装连接测试c_Ubuntu 12.04下安装mysql并用C程序测试连接
  9. 很朴素的学习嵌入式系统的经验
  10. 以SYSTEM用户运行CMD
  11. 《网络编程》守护进程
  12. [Flex]Flex 3.0 and Adobe AIR 1.0正式版发布!
  13. python flask 分页前后端分离_【flask + vue 前后端分离博客】创建第一个 Flask RESTFul(一)...
  14. Java DatagramPacket 中的坑
  15. WPF学习笔记——在“System.Windows.StaticResourceExtension”上提供值时引发了异常
  16. springmvc国际化 基于请求的国际化配置
  17. Android解压boot.img
  18. 【技能】excel小技巧:利用宏制作工资条
  19. 浅谈IPv4/IPv6转换技术
  20. c语言date用法,c语言getdate()和gettime()的用法

热门文章

  1. 对象池(连接池):commons-pool2源码解析:GenericObjectPool的startEvictor、Evictor、evict解析
  2. (高级)Dubbo 第五章 Dubbo及RocketMQ底层-Netty原理
  3. OpenChatPaper | 你值得拥有的论文阅读小助手!~(粉丝投稿)
  4. linux服务器cpu的型号,Linux查看版本信息及CPU内核、型号等linux服务器应用 -电脑资料...
  5. 【可乐荐书】Python自动化办公应用大全(ChatGPT版):从零开始教编程小白一键搞定烦琐工作
  6. 【超凡蜘蛛侠2】火爆来袭
  7. 与AI一起享受创作音乐的乐趣| Mixlab人工智能音乐
  8. Java Web系统常用的第三方接口
  9. 远程服务器器获取session 信息失败,该如何应对
  10. Java实现黑客帝国特效