Swin Transformer代码讲解

下采样是4倍,所以patch_size=4


2.

3.
emded_dim=96就是下面图片中的C,经过第一个Linear Embedding处理之后的通道数


4.

经过第一个全连接层把通道数翻为几倍


6.
在Muhlti-Head Attention中是否使用qkv——bias,这里默认是使用

7.

第一个drop_rate接在PatchEmbed后面


第二个drop_rate在Multi-Head Attention过程中使用的

9.
第三个drop_rate是指在每一个Swin Transformer Blocks中使用的,它是从0慢慢增长到0.1的


10.
patch_norm默认接在PatchEmbed后面的

11.
默认不使用,使用的话,只是会节省内存

12.
对应于每一个stage中Swin Transformer Blocks的个数

13.
对应stage4的输出的通道的个数


14.
PatchEmbed就是把图片划分成没有重叠的patches

15.
PatchEmbed对应结构图中高的 Patch Partition 和Linearing Embedding


16.
Patch Partition 确实是通过一个卷积实现的

17.
在宽度方向右侧pad和在高度方向的底部pad

18.
从维度2开始展平的

19.
这儿是上文提到的第一个drop_rate直接接在patchEmbed后面

20.
针对所使用的Swin Transformer Blocks设置一个drop_path_rate。从0开始一直到drop_path_rate

21.
遍历生成每一个stage,而代码中的stage和论文中的stage有一点差异


对于stage4,它没有Patch Merging,只有Swin Transformer Blocks

在该stage层中需要堆叠的Swin Transformer Blocks的次数

23.
drop_rate:直接接在patchEmbed后面
attn_drop:该stage所使用的
dpr:该stage中不同Swin Traansformer Blocks所使用的

24.
构建前3个stage是有PatchMerging,但是最后一个stage是没有PatchMerging
在这里self.num_layers=4

25.


26.

在下面的Patch Merging中传入的特征矩阵的shape是x: B , H*W , C这样的


28.
当x的h和w不是2的整数倍时,就需要padding,需要在右边padding一列0,在下面padding一行0。


29.

30.

31.
对于分类模型就需要加上下面这部分代码

32.

对整个模型进行权重初始化

33.
进行4倍下采样

34.
L:H*W

35.
按照一定的比例进行丢失

36.
遍历各个stage

下面的代码是在搭建Swin-T模型

Swin_T在imagenet-1k上的预训练权重

39.

Swin_B(window7_224)

Swin_B(window7_384)


41.
原始的特征矩阵需要进行向右和向下进行移动,但是具体的向右和向下移动的距离等于:窗口的大小除以2,再向下取整


self.shift_size就是向右和向下移动的距离

42.
一个stage中的Swin Trasformer Blocks的个数

当shift_size=0:使用W-MSA
当shift_size不等于0:使用SW-MSA,shift_size = self.shift_size

44.
Swin Transformer Blocks有可能是W-MSA也有可能是SW-MSA。在使用的时候并不是把W-MSA和SW-MSA当成一个Swin Transformer Blocks

45.
depth表示下图中圈出来的数字


46.
此处的下采样是使用Patch Merging实现的

47.
这个实在SW-MSA时使用的

48.
Swin Transformer Blocks是不会改变特征矩阵的高和宽的,所以每一个SW-MSA都是一样的,所以attn_mask的大小是不会发生改变的,所以attn_mask只需要创建一次

49.

50.
这便是创建完了一个stage中的全部Swin Transformer Blocks

51.
这便是下采样Patch Merging,下采样高度和宽度会减小两倍

52.
这里的+1,是防止传入的H和W是奇数,那么就需要padding

53.



54.


55.

56.


58.

59.
下面这两个x的shape是一样的


60.


61.
WMSA和SWMSA所使用的窗口的大小

第一个全连接层将channel翻多少倍

63.


64.


65.
每一个swin-transformer阶段中使用的,但它是从0慢慢增长到下面设置的数值


66.


68.


69.


70.

官方pad函数

72.


74.

75.

76.

77.

78.

79.

80.

81.

82.

83.

84.


移动的大小=窗口大小除以2,然后向下取整


87.

88.


89.

90.

无论是wmsa和swmsa,单独的它们都不会改变特征矩阵的尺寸

mask放在这个位置解决了多尺度训练的问题


92.


93.
运行完一个stage中的所有wmsa和swmsa

94.

95.

下面代码运行的最终结果如下所示


97.


98.


99.


100.


101.

下面两个函数属于互为逆过程


104.


105.


108.

109.

110.

111.


112.


115.
互为逆过程


116.

Swin Transformer代码讲解相关推荐

  1. Swin Transformer理论讲解

    Swin Transformer: Hierarchical Vision Transformer using Shifted Windows Ze Liu, Yutong Lin, Yue Cao, ...

  2. swin transformer 转 onnx

    swin transformer 代码:非官方实现,但是好理解 . 将训练好的 pth 转 onnx 代码: import torch from swin_transformer_pytorch im ...

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

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 本文转载自:Smarter Swin Transformer 代码于2021年4月13日凌晨刚刚开源! ht ...

  4. J Cheminform2022 | SwinOCSR+:基于Swin Transformer的end-to-end光学化学结构识别

    原文标题:SwinOCSR: end-to-end optical chemical structure recognition using a Swin Transformer 代码:GitHub ...

  5. Swin Transformer(W-MSA详解)代码+图解

    2. Window & Shifted Window based Self-Attention Swin Transformer另一个重要的改进就是window-based的self-atte ...

  6. Swin Transformer原文及其代码的理解

    Swin Transformer原文及其代码的理解 第一版 更好的排版笔记:Notion 名词解释 基础知识: 搞懂Vision Transformer 原理和代码,看这篇技术综述就够了(三) tok ...

  7. 基于pytorch的Swim Transformer代码实现与讲解

    Swim transformer是2021年ICCV的best paper. 论文题目:Swin Transformer: Hierarchical Vision Transformer using ...

  8. Vision Transformer(ViT) 2: 应用及代码讲解

    文章目录 1. 代码讲解 1.1 PatchEmbed类 1)`__init__ `函数 2) forward 过程 1.2 Attention类 1)`__init__ `函数 2)forward ...

  9. Swin Transformer原理与代码精讲

    课程链接:Swin Transformer原理与代码精讲--计算机视觉视频教程-人工智能-CSDN程序员研修院 Transformer在许多NLP(自然语言处理)任务中取得了最先进的成果. Swin ...

最新文章

  1. 新款 iPad 写代码 真香,包邮送一个!
  2. 聚类小分子数据集(基于RDKit的Python脚本)
  3. 微信jssdk,实现多图上传的一点心得
  4. gaia引擎分析(二)场景管理
  5. QT学习:网络应用开发练习(简单网页浏览器)
  6. 【代码规范】常见排版规范
  7. 如何使用Appverifier ?
  8. 音视频技术开发周刊(第122期)
  9. 文章转载-见贤思齐焉,见不贤而内自省也
  10. 推荐Linux内核书籍
  11. python知识汇总,python一期
  12. 让自己的代码生成对应的chm帮助文档
  13. centos yum方式安装nginx 并支持https
  14. 网易云免费OSS服务用做Markdown图床或博客图片外链
  15. python二维数组读取数报错TypeError: list indices must be integers or slices, not tuple
  16. macOS Big Sur 配置 jdk
  17. redis运行redis-server.exe错误
  18. 三个javascript动态输入列表
  19. hitool java_第三章:使用HiTool下载程序
  20. 服务器提权常见方法介绍

热门文章

  1. android开源项目---View篇
  2. 小程序导航栏颜色设置
  3. Unix/Linux编程:解析路径名------realpath()
  4. vue-cropper实现图片裁剪上传
  5. java byte与char互转原理_【转】java byte与char互转原理
  6. 10.1 黑马Vue电商后台管理系统之完善订单管理模块--加入修改订单模块
  7. 国科大.高级人工智能.2022期末考试真题回忆版
  8. 原生JS实现拿到的时间戳“毫秒/秒”转为“时:分:秒”形式的效果
  9. 多传感器融合定位十五-多传感器时空标定(综述)
  10. struct timeval结构体 以及 gettimeofday()函数、struct timespec结构体