| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Swin Transformer全方位解读【ICCV2021最佳论文】 -> 正文阅读 |
|
[人工智能]Swin Transformer全方位解读【ICCV2021最佳论文】 |
前言前言就是唠唠嗑,想看干货的可以直接看下一节。 自从ViT、DETR等尝试把language模型中的王炸transformer使用到视觉领域并得到还不错的验证效果后,研究者们一直在致力于“如何更好地将语言模型建模到视觉”这个问题。ViT直接把图片划分patch,用对待word的方式来对待每个patch,轻松将图片建模成sentence;而DETR则需要CNN辅助提取特征,而transformer只是当一个neck。后者更像是一个过渡模式,咱们本文不做过多讨论。 重点说下ViT的问题,首先ViT不适合作为通用模型的backbone,不擅长处理dense输出型(如目标检测、分割等)的视觉任务。ViT通过将图像划分成不相交的patch,通过编码每个patch然后计算两两patch之间的attention,来实现聚合信息。这样,应对更高清的图片时,划分的patch数会受计算资源掣肘。你可以这么想,4x4=16个patch,两两计算注意力,和100x100=10000个patch,两两计算注意力,计算复杂度完全不一样(指数级的差别)。假如用降采样的方法依旧保持少量的patch数,那就没使用到高分辨率带来的好处;假如把用更大的编码器来保持较少的patch数,那么transformer会慢慢往MLP的方向退化。于是,研究者们开始设想一种新的transformer结构,使之能更好地适应视觉任务。 Swin Transformer就是一种通用视觉任务的Backbone而存在的模型,以替代CNN。它做到了,而且outperform现有的CNN模型。这也是其获得Best Paper的主要原因。 将ST复现到我自己的数据集(四分类),效果如下: 论文链接:https://arxiv.org/abs/2103.14030 总概主体结构Swin的主体结构主要由4个Basic Layer组成。每个Basic Layer都有Depths、NUM_HEADS两个主要参数,以此来区分各种量级的swin transformer(如swin tiny,swin base等)。 第一步,名词解答:Window、Patch、Token Patch Embedding一张224x224的图片,被划分成56x56个patch,然后对每个patch(尺寸为4x4)进行编码得到96-d的embedding向量。
这步以后再flatten一下,就可以把56x56x96变为3196x96。 输入到STB(swin transformer block)之前,对输入张量进行dropout,这里的dropout主要是为了进行数据增强,因为这一步会随机性让一些patch embedding的数值为0,详情可戳《pytorch中nn.Dropout的使用技巧》。 Patch Merging先把STB当做一个黑盒模型,Patch Embedding就是处理STB输入,而Patch Merging就是处理STB的输出。Patch merging模块是整个Swin Transformer模型中唯一的降采样操作。张量通过STB模块的时候尺寸是不发生改变的。
有疑问可留言交流~ Swin Transformer Block重头戏来了,Swin transformer是在标准transformer上的一个改进。主要是用Shifted window来改进标准多头自注意力模块。 ST中使用的激活函数是《GELU》,使用的正则化方法是Layer Normalization(可戳《Layer Normalization》《常见的Normalization》进一步了解)
W-MSA全称为Window based Multi-head Self Attention。一张图平分为7x7个window,这些window互相都没有overlap。然后,每个window包含一定数量的token,直接对这些token计算window内部的自注意力。 以分而治之的方法,远远降低了标准transformer的计算复杂度。以第1层为例,7x7个window,每个window包含16x16个patch,相当于把标准transformer应用在window上,而不是全图上。不太了解标准transformer做法的可戳《令人心动的transformer》,文中介绍了QKV、Multi-Head self attention等原理。 那么,不同window之间的信息怎么聚合呢?这就要用到SW-MSA了。 SW-MSA这里的shifted window相对于初始的划分有一个平移。这个平移距离刚好是单个window边长的一半。 SW-MSA在逻辑上很make sense,但在计算上需要颇费心机。我们看图3,当窗口滑动后,窗口数从2x2变到3x3,而且边缘的窗口也比正常窗口小。为了应对计算上的问题,作者提出了基于cyclic shift的batch computation。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 8:39:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |