Swin-Transformer 实战代码与讲解(快速上手)

这篇具有很好参考价值的文章主要介绍了Swin-Transformer 实战代码与讲解(快速上手)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在学习深度学习和机器学习的相关知识,在这里记录一下学习的模型和个人的一些感悟,文章包括了模型的讲解和项目源码。由于自身水平原因,总体会比较偏白话,适合小白,如果有出错的地方请大家指正。

swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉

1、项目源码以及主要参考

博客讲解:https://blog.csdn.net/qq_37541097/article/details/121119988
B站讲解:链接地址
源码地址:链接地址

主要的库文件的相关版本:
torch 1.10.1+cu102
torchaudio 0.10.1+cu102
torchvision 0.11.2
tensorflow 2.4.1
numpy 1.23.4
(具体的由于库的版本问题引起的警告或者报错可以直接百度解决)

数据下载:https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz (可以直接复制链接到迅雷下载)

2、Swin-Transformer介绍

Swin Transformer是2021年微软研究院发表在ICCV上的一篇文章,并且已经获得ICCV 2021 best paper的荣誉称号。它可以作为计算机视觉的通用backbone,并且在很多视觉底层任务中取得了Sota的水准。

swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉
上图是Swin Transformer在Vit论文基础上做出的改进。可能很多人和我一样在读过Vit的情况下看到这张图就是一脸懵。在读文章前,我先简单介绍一下模型中的一些“单位”。

像素:一张图片的最小单位
Patch:由相邻的几个像素组成的一个正方形区域
Window:由相邻的若干Patch组成的一个正方形区域

例如:在轻便版的swin transformer tiny中有:
1 Patch = 4x4 像素
1 Window = 7x7 Pacth

所以上面的(a)图中的4x 可以简单理解为,取4个窗口作为一个整体进行操作;同理8x可以理解为,取8个窗口作为一个整体进行操作(多头自注意力W-MSA)等等······

所以相比于之前的Vit模型,我们的Swin Transformer模型一次性取的窗口数较少,减少了矩阵运算的维度,从而减少了运算量,但同时这样也有一些缺点,我们将在下面的讲解中提及。

3、模型的构成

Swin Transformer模型如下图所示,一般情况下,下面的结构作为Backbones Network(骨干网络)使用,简单来说就是可以用这些结构提取特征,然后按照我们的需求在后面加上一个全连接层来完成回归或者分类任务。

swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉

3.1 Patch Partition

首先将图片输入到Patch Partition模块中进行分块,即每4x4相邻的像素为一个Patch,然后在channel方向展平(flatten)。假设输入的是RGB三通道图片,那么每个patch就有4x4=16个像素,然后每个像素有R、G、B三个值所以展平后是16x3=48,所以通过Patch Partition后图像shape由 [H, W, 3]变成了 [H/4, W/4, 48]。(来自博主:太阳花的小绿豆)

这部分可以简单理解为划分展平,将4*4的像素划成一个Patch,其中每个Patch中的像素不重复,所以图像横向的Patch数为W/4纵向的Patch数为H/4(后面我们将以Patch为单位进行操作) 。

每个Patch所具有的4x4=16个像素,对于RGB图像又有着3个Channel ,所以每个Patch的特征数量为4x4x3=48个。

3.2 Linear Embedding

该部分就是直接通过一个卷积层,将图像(H/4)x(W/4)x48变成(H/4)x(W/4)xC,也就是一个“映射”的操作,将原先的48个维度映射到我们想要的C维度,代码中间的C为96 。

3.3 Swin Transformer Block

其实该部分就是下图的这两个操作,所以我们能发现Swin Transformer Block总是2的整数倍,因为每个版块都有两个部分。Swin Transformer Block模块并不会改变图片的相关尺寸。
swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉

Layer Normal(LN)

LayerNorm是归一化的一种方法,下面是Pytorch文档中的官方说明,如果有感兴趣的可以查看这篇博客 https://blog.csdn.net/weixin_41978699/article/details/122778085
swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉

Windows Multi-head Self Attation (W-MSA)

窗口多头自注意力模块的作用,我个人的理解是提取窗口与窗口之间的联系,打个比方,对于一个猫猫头,眼睛得在鼻子上面,嘴巴在鼻子下面,这就是一种空间上的特征,而自注意力操作则是提取出这种特征。

swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉

这里有一点需要注意的就是,窗口间的自注意力操作是对于相邻的几个窗口而言的,比如上图标号为1,2,3,4的窗口间可进行自注意力,但是1,2就不能和9,10进行自注意力操作。

在第二部分,Swin-Transformer介绍 ,我们讲解过,Swin transformer相比于Vit取的作自注意力的窗口数减少了,因此大大减小了运算量。但是同时,我们也失去部分区域的空间特征,比如窗口4,5,6,7组成的部分,因此论文提出了一种叫做滑动窗口的方法。

Windows Multi-head Self Attation (SW-MSA)

滑动窗口的原理类似于用一个模具切割一张图片,我们把模具向右移动两厘米,向下移动两厘米,然后再切割照片,这样就能得到图像不同空间区域的特征,但是这样又引出了一个问题,我们做自注意力一般正方形比较好,所以论文作者就进行了一个A,B,C的编码,然后重新组成正方形(下面的cyclic shift部分)。

此外,考虑到编码后的“正方形”原来可能不是连在一起的Windows,不能作自注意力,论文作业又进行了一个masked操作,可以理解为用一张布遮住本不应该做自注意力的那部分的结果。这样我们就能在保证减少了计算量的基础上还提取了空间中多尺度的特征。

想更加输入了解的可以参考B站的这个讲解视频: Swin Transformer论文精读
swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉

MLP

该部分就是一个使用 GELU 激活函数 + Dropout 的全连接层。

3.4 Patch Merging

这部分大佬也已经讲解得非常好,我就直接粘贴过来了。

前面有说,在每个Stage中首先要通过一个Patch Merging层进行下采样(Stage1除外)。如下图所示,假设输入Patch Merging的是一个4x4大小的单通道特征图(feature map),Patch Merging会将每个2x2的相邻像素划分为一个patch,然后将每个patch中相同位置(同一颜色)像素给拼在一起就得到了4个feature map。接着将这四个feature map在深度方向进行concat拼接,然后在通过一个LayerNorm层。最后通过一个全连接层在feature map的深度方向做线性变化,将feature map的深度由C变成C/2。通过这个简单的例子可以看出,通过Patch Merging层后,feature map的高和宽会减半,深度会翻倍。
swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉

4、源码的使用

代码地址:github
数据集地址:https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz

swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉
简单来说就是下载好数据集合源码后,进入train.py文件,设置好数据集的路径以及图像分类的类数就可以直接跑程序了,如果想跑自己的数据集,可以将数据集按照下图的模型放置。
swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉
如果觉得Swin Transformer Tiny性能不够,还可以选择下图的其他版本,只需在train.py前面修改这一串代码就行。

from model import swin_tiny_patch4_window7_224 as create_model

swin transformer代码运行,深度学习实战笔记,transformer,深度学习,人工智能,计算机视觉

第一次写这么长的文章,自己水平有限,有些地方还不够严谨,希望大家能给我一个小小的赞!文章来源地址https://www.toymoban.com/news/detail-628863.html

到了这里,关于Swin-Transformer 实战代码与讲解(快速上手)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • transformer概述和swin-transformer详解

    目录 1.transformer架构 1.1输入部分实现 1.2编码器部分实现 1.2.1掩码张量 1.2.2注意力机制 1.2.3多头注意力机制 1.2.4前馈全连接层 1.2.5规范化层 1.2.6子层连接层 1.2.7编码器层 1.2.8编码器 1.3解码器部分实现 1.3.1解码器层 1.3.2解码器 1.4输出部分实现 2.swin-transformer transformer的整体网络架

    2024年02月03日
    浏览(35)
  • timm使用swin-transformer

    报错的内容如下 解决办法 去swin官网下载对应的 swin_base_patch4_window7_224.pth (所有模型我都存自己百度网盘了)文件 然后根据提示 重命名为 swin_base_patch4_window7_224_22kto1k.pth 再将该文件移动到 /root/.cache/torch/hub/checkpoints/ 该目录下 这样timm就可以爽歪歪的用了 官网:https://github

    2024年02月16日
    浏览(43)
  • 17.基干模型Swin-Transformer解读

    欢迎访问个人网络日志🌹🌹知行空间🌹🌹 Swin-Transformer是 2021 年 03 月微软亚洲研究院提交的论文中提出的,比 ViT 晚了半年左右,相对于 ViT 而言, Swin-Transformer 的改进,使 transformer 能作为新的视觉任务 backbone ,用于分类分割和检测,姿态估计等任务。 论文:https://arxiv

    2024年02月06日
    浏览(41)
  • Swin-Transformer网络结构详解

    Swin Transformer是2021年微软研究院发表在ICCV上的一篇文章,并且已经获得 ICCV 2021 best paper 的荣誉称号。Swin Transformer网络是Transformer模型在视觉领域的又一次碰撞。该论文一经发表就已在多项视觉任务中霸榜。该论文是在2021年3月发表的,现在是2021年11月了,根据官方提供的信息

    2024年02月04日
    浏览(39)
  • Swin-Transformer训练自己的数据集

    Swin-Transformer精度较高,但其对显卡要求同样较高,我的是RTX2070,8G显存,当设置crop size为512 512时,batchsize设置为2,才不会报OOM。当crop size为1024 1024时,如果类别较少,还可以跑通,类别较多则会报错。 首先下载Swin-Transformer的源码,在PyCharm中创建针对Swin-Transformer算法的虚拟

    2024年02月05日
    浏览(41)
  • Swin-transformer论文阅读笔记(Swin Transformer: Hierarchical Vision Transformer using Shifted Windows)

    论文标题:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 论文作者:Ze Liu, Yutong Lin, Yue Cao, Han Hu, Yixuan Wei, Zheng Zhang, Stephen Lin, Baining Guo 论文来源:ICCV 2021,Paper 代码来源:Code 目录 1. 背景介绍 2. 研究现状 CNN及其变体 基于自注意的骨干架构 自注意/Transformer来补充CN

    2024年02月07日
    浏览(51)
  • 李沐论文精读系列二:Vision Transformer、MAE、Swin-Transformer

    传送门: 李沐论文精读系列一: ResNet、Transformer、GAN、BERT 李沐论文精读系列三:MoCo、对比学习综述(MoCov1/v2/v3、SimCLR v1/v2、DINO等) 李沐论文精读系列四:CLIP和改进工作串讲(LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso) 论文名称: An Image Is Worth 16x16 Words: Transformers For Imag

    2024年01月17日
    浏览(45)
  • 在YOLOv5中添加Swin-Transformer模块

    前段时间整理了一个可以添加SwinTransformer Block的YOLOv5代码仓库。不需要任何其他的库包,可以运行YOLOv5程序的环境即可以正常运行代码。 分别进行了SwinTransformer Block、Patch Merging、Patch Embed阶段的代码整理,以使得这些模块可以适配于u版YOLOv5的模型构建代码。 和YOLOv5一样,通

    2024年02月04日
    浏览(60)
  • 图片分类网络ViT、MobileViT、Swin-Transformer、MobileNetV3、ConvNeXt、EfficientNetV2

    参考我的另一篇博文《李沐论文精读系列二:Vision Transformer、MAE、Swin-Transformer》 参考我的另一篇博文《李沐论文精读系列二:Vision Transformer、MAE、Swin-Transformer》 论文名称:MobileViT: Light-Weight, General-Purpose, and Mobile-Friendly Vision Transformer 参考小绿豆的博文《MobileViT模型简介》

    2024年02月04日
    浏览(58)
  • RabbitMQ快速上手及讲解

    1.1.1.1 异步处理 场景说明: 用户注册后,需要发注册邮件和注册短信,传统的做法有两种 1.串行的方式 (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。这有一个问题是,邮件,短信并不是必须的,它只是

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包