当前位置: 首页 > news >正文

Swin Transformer——披着CNN外皮的transformer,解决多尺度序列长问题

image.png

题目:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》作为2021 ICCV最佳论文,屠榜了各大CV任务,性能优于DeiT、ViT和EfficientNet等主干网络,已经替代经典的CNN架构,成为了计算机视觉领域通用的backbone

1.概述

Transformer应用到图像领域主要有两大挑战:

  • 视觉实体变化大,在不同场景下视觉Transformer性能未必很好——多尺度问题
  • 图像分辨率高,像素点多,Transformer基于全局自注意力的计算导致计算量较大——tokens序列长度问题

针对上述两个问题,我们提出了一种包含Shifted Window操作,具有层级设计Swin Transformer
:::warning
Shifted Window操作包括不重叠的local window,和重叠的cross-window connection不重叠的local window将注意力计算限制在一个窗口中,一方面能引入CNN卷积操作的局部性,另一方面能节省计算量重叠的cross-window connection是在计算局部窗口的自注意后,对窗口进行移动,再重新划分,使不同窗口的像素产生联系(为了避免非正常的联系,引入了掩码操作)。
具有层级设计:引入卷积的思想,窗口内的所有query patch共享相同的key set,相对于VIT,降低了计算的复杂度(与图片大小成平方->线性);类比于pooling操作,本文设计了patch merging操作,解决了多尺度问题。
:::
image.png

2.主要内容

主体架构

image.png

shifted window:

image.png

Swin transformer block

image.png

patch merging:间隔采样+降维操作

image.png

shifted window后的mask细节:

image.png
平移后会带来一个问题:patch大小不一致且数量与上一个窗口(4个)不同,如上图第一张。

  • cyclic shift:将A,B,C,D区域进行平移,再划分为4块,解决大小、数量不一致问题。
  • masked MSA:将不需要的自注意力设置为0,通过矩阵计算进行掩码。
计算复杂度的衡量

image.png

消融实验:shifted window和相对位置编码

image.png

3.结论

**Swin Transformer 的这些特性使其与广泛的视觉任务兼容,**包括图像分类(ImageNet-1K 的 87.3 top-1 Acc)和 密集预测任务,例如 目标检测(COCO test dev 的 58.7 box AP 和 51.1 mask AP)和语义分割(ADE20K val 的 53.5 mIoU)。它的性能在 COCO 上以 +2.7 box AP 和 +2.6 mask AP 以及在 ADE20K 上 +3.2 mIoU 的大幅度超越了 SOTA 技术,证明了基于 Transformer 的模型作为视觉主干的潜力。分层设计和移位窗口方法也证明了其对全 MLP 架构是有益的。

4.思考

  • swin transformer可以说,是披着CNN外皮的transformer,思想来源于CNN,但架构是transformer。
  • 可以作为一种通用的backbone。
http://www.lryc.cn/news/339560.html

相关文章:

  • 数据结构排序算法
  • 【深度剖析】曾经让人无法理解的事件循环,前端学习路线
  • Spring 事务失效总结
  • K8S节点kubectl命令报错x509: certificate signed by unknown authority
  • 【HTML】制作一个简单的实时字体时钟
  • servlet的三个重要的类(httpServlet 、httpServletRequst、 httpServletResponse)
  • 【软考】设计模式之命令模式
  • 波奇学Linux:ip协议
  • Efficient Multimodal learning from data-centric perspective
  • ubuntu下交叉编译ffmpeg到目标架构为aarch架构的系统
  • 【Linux C | 多线程编程】线程同步 | 条件变量(万字详解)
  • 【高阶数据结构】哈希表 {哈希函数和哈希冲突;哈希冲突的解决方案:开放地址法,拉链法;红黑树结构 VS 哈希结构}
  • 嵌入式之计算机网络篇(七)
  • C++|运算符重载(1)|为什么要进行运算符重载
  • 【ARM 裸机】汇编 led 驱动之烧写 bin 文件
  • 计算机网络之CIDR
  • 【无标题】系统思考—智慧共赢座谈会
  • 【Linux C | 多线程编程】线程同步 | 互斥量(互斥锁)介绍和使用
  • mid_360建图和定位
  • ThreadX在STM32上的移植:通用启动文件tx_initialize_low_level.s
  • 【python实战】游戏开发——恐龙跳跃小游戏
  • 成都百洲文化传媒有限公司电商领域的新锐力量
  • 1042: 中缀表达式转换为后缀表达式
  • 避免上下文切换--Linux原子函数
  • 塔面板php7.37.4版本不支持ZipArchive手工安装扩展方法
  • go语言并发实战——日志收集系统(一) 项目前言
  • Android Studio 之 Intent及其参数传递
  • 【黑马头条】-day06自媒体文章上下架-Kafka
  • 非线性特征曲线线性化插补器(CODESYS 完整ST代码)
  • vue3从精通到入门4:diff算法的实现