Swin Transformer简记-220112版

2024-03-05 17:48
文章标签 swin transformer 简记 220112

本文主要是介绍Swin Transformer简记-220112版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Swin Transformer简记

文章目录

      • Swin Transformer简记
        • 参考
        • 问题与方案
        • Window Attention
        • Patch Merging
        • Shifted Window based Self-Attention
        • 总结

参考
  • 源码

  • 本次回顾这篇用的时间不长,主要是大致浏览了一遍,记录一下,如有错误,踢我一下

问题与方案
  • CV中input的scale存在不定性,变化可能很大(就像YOLO v3的输入可以是416也可以是608之类的),这与NLP问题是不同的,并且比较棘手。

  • VIT中的结构是下面右侧的这样,将一张图分成16份,即16个patch,直接对patch们做attention然后做后续任务,这样的话当input的scale的数量变大的时候,其计算量会以二次方的量级增加(因为embedding用的是FC。。。)

    • image-20220112100219593
  • 因此呢swin- transformer的一个创新点就是将原本的分成16格再一次划分,分成更小的window,每次以更小的window计算,最后合起来,这样就可以实现减少计算量的目的,这点思想参考了CNN中的层次结构,就很像pooling将图片的hw维度变小一样。这是第一个window partition思想

  • 第二个为了提升每个patch的感受野,同时为了更好地提取window边缘的特征信息,作者在一个Swin Transformer block中设计了一个shifted window attention

    • image-20220112100923463
Window Attention
  • 这里结合它整体的结构讲,如下两张图所示,每一组Swin Transformer block后都会将hw维度缩为一半,然后再看下面的示意图,就是说,一开始是window_size=7,然后一组block之后经过类似pooling的做法(当然应该不是pooling,应该是Patch Emerging,重新构造patch的形状,把hw各缩小一半,值压缩到对应的channel中去,此时channe=channelx4,然后经过fc使得channel减半变成没有merging之前的两倍),这样就实现了hw变小,此时再用相同的window做local attention感受野就是原来的四倍。

    • image-20220112101334898

    • image-20220112101450438

    • 具体的话实现在这里:https://github.com/microsoft/Swin-Transformer/blob/5d2aede42b4b12cb0e7a2448b58820aeda604426/models/swin_transformer.py#L163 的第249行

    • image-20220112112044151

Patch Merging
  • image-20220112112527254
Shifted Window based Self-Attention
  • image-20220112112823468

  • 它的一个shifted window attention 机制就是这样的,将window分为9个区域,然后将区域调换之后再做local self-attention

  • 在代码中是这样实现的,有一个类叫SwinTransformerBlock,在构造的时候没如果传入shift_size,则该类是Shifted Window Attention的类

    • image-20220112152420994
  • 也正因此,作者才会给出W-MSA和SW-MSA是一组的图

    • image-20220112153855006
  • 然后在狗仔Swin Transformer Block的forward的时候会根据shift_size构造SW-MSA(Shifted Window Multi-Head Self-Attention)

    • image-20220112153213149
总结
  • 距离第一次看过了半年,以上便是我再看的新理解,也许过段时间再看会有新发现~

这篇关于Swin Transformer简记-220112版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Transformer从零详细解读

Transformer从零详细解读 一、从全局角度概况Transformer ​ 我们把TRM想象为一个黑盒,我们的任务是一个翻译任务,那么我们的输入是中文的“我爱你”,输入经过TRM得到的结果为英文的“I LOVE YOU” ​ 接下来我们对TRM进行细化,我们将TRM分为两个部分,分别为Encoders(编码器)和Decoders(解码器) ​ 在此基础上我们再进一步细化TRM的

LLM模型:代码讲解Transformer运行原理

视频讲解、获取源码:LLM模型:代码讲解Transformer运行原理(1)_哔哩哔哩_bilibili 1 训练保存模型文件 2 模型推理 3 推理代码 import torchimport tiktokenfrom wutenglan_model import WutenglanModelimport pyttsx3# 设置设备为CUDA(如果可用),否则使用CPU#

逐行讲解Transformer的代码实现和原理讲解:计算交叉熵损失

LLM模型:Transformer代码实现和原理讲解:前馈神经网络_哔哩哔哩_bilibili 1 计算交叉熵目的 计算 loss = F.cross_entropy(input=linear_predictions_reshaped, target=targets_reshaped) 的目的是为了评估模型预测结果与实际标签之间的差距,并提供一个量化指标,用于指导模型的训练过程。具体来说,交叉

深度学习每周学习总结N9:transformer复现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 多头注意力机制前馈传播位置编码编码层解码层Transformer模型构建使用示例 本文为TR3学习打卡,为了保证记录顺序我这里写为N9 总结: 之前有学习过文本预处理的环节,对文本处理的主要方式有以下三种: 1:词袋模型(one-hot编码) 2:TF-I

RNN发展(RNN/LSTM/GRU/GNMT/transformer/RWKV)

RNN到GRU参考: https://blog.csdn.net/weixin_36378508/article/details/115101779 tRANSFORMERS参考: seq2seq到attention到transformer理解 GNMT 2016年9月 谷歌,基于神经网络的翻译系统(GNMT),并宣称GNMT在多个主要语言对的翻译中将翻译误差降低了55%-85%以上, G

ModuleNotFoundError: No module named ‘diffusers.models.dual_transformer_2d‘解决方法

Python应用运行报错,部分错误信息如下: Traceback (most recent call last): File “\pipelines_ootd\unet_vton_2d_blocks.py”, line 29, in from diffusers.models.dual_transformer_2d import DualTransformer2DModel ModuleNotF

用最简单的话来解释大模型中的Transformer架构

开篇 我个人的观点是要想系统而又透彻地理解 Transformer,至少要遵循下面这样一个思路(步骤): 理解NLP基础 在探讨Transformers之前,了解自然语言处理(NLP)的一些基本知识至关重要。NLP使计算机能够理解和生成自然语言,文本的表征是其核心任务之一。传统的语言模型往往依赖于递归神经网络(RNN)处理序列数据,但RNN在长序列中表现较差。为了解决这一问题,必须引入先

第八章 软件测试简记

第八章  软件测试 软件测试:在软件投入运行前对软件需求分析、软件设计规格说明和软件编码进行差错和纠正。 软件测试的目标: 1.用最少的人力、时间找出软件潜在的各种错误和缺陷; 2.能够确认软件实现的功能和用户需求上是一样的; 3.能够收集到足够的测试结果为软件可靠性提供依据; 软件测试的任务:根据软件开发各个阶段的文档资料和程序的内部结构,精心设计

第六章 详细设计简记

第六章  详细设计       详细设计不是具体的编程,而是要设计出程序的“蓝图”,详细设计不仅仅是逻辑上正确的实现每个模块的功能,更重要的是设计出来的处理工程应该简明易懂。       详细设计的目的:为软件结构图中的每一个模块确定使用的算法和块内的数据结构,并用某种选定的表达工具给出清晰的描述。       详细设计的任务:           1.为每

第四章 结构化分析简记

第四章  结构化分析 结构化方法:结构化分析+结构化设计+结构化程序设计 结构化分析的基本思想:自顶向下,逐步求精;基本原则:抽象与分解。