【深度学习】Swin Transformer结构和应用分析
【深度学习】Swin Transformer结构和应用分析
文章目录
1 引言
2 Swin Transformer结构
3 分析
3.1 Hierarchical Feature Representation(层次特征表示)
3.2 降采样
3.3 局部dependency
4 总结
5 代码测试
1 引言
目前Transformer应用到图像领域主要有两大挑战:
视觉实体变化大,在不同场景下视觉Transformer性能未必很好
图像分辨率高,像素点多,Transformer基于全局自注意力的计算导致计算量较大
针对上述两个问题,我们提出了一种包含滑窗操作,具有层级设计的Swin Transformer。
其中滑窗操作包括不重叠的local window,和重叠的cross-window。将注意力计算限制在一个窗口中,一方面能引入CNN卷积操作的局部性,另一方面能节省计算量。
2 Swin Transformer结构
根据层数的不同,Swin Transformer包含多个版本:
Swin-T(iny),0.25倍的Swin-B
Swin-S(mall),0.5倍的Swin-B
Swin-B(ase)
Swin-L(arge),2倍的Swin-B
下图中的(a)是Swin-T的结构,但是不论哪个版本,Swin都包含4个"Stage",区别就是不同版本的Stage中的层数不同,以Swin-T为例,Stage 1有2层,Stage 2有2层,Stage 3有6层,Stage 4有2层。有没有发现各个Stage的层数都是偶数?再看下图中的(b),两个连续的Swin Block(层),实际上这两层组成了一个大的“基本单元”,比如Stage 1有2层,实际上就是包含一个(b),而Stage 3有6层,就包含三个(b)。
3 分析
Swin Transformer最重要的两点是hierarchical feature representation和SW-MSA(Shifted Window based Multi-head Self-attention)。
3.1 Hierarchical Feature Representation(层次特征表示)
Hierarchical feature representation的思路取自CNN结构,整个模型分为不同stage,每个stage对上一个stage输出的feature map进行降采样(H、W变小);stage中每个block对局部进行建模而非全局。
3.2 降采样
Swin Transformer中通过Patch Partition和Patch Merging来实现降采样,实际上二者是一个东西,也就是kernel size与stride相同的conv。Patch Partition的kernel size和stride为4,Patch Merging的kernel和stride为2,跟CNN中的降采样方法相同。
3.3 局部dependency
W-MSA(window based Multi-head Self-Attention)建模的是局部window的dependency,而不是MSA(Multi-head Self-Attention)中的全局,这有助于降低模型的计算复杂度,这个思路跟conv是一样的。W-MSA跟conv类似,也有kernel size和stride两个参数,在同一个stage里,conv的kernel size一般大于stride,比如经典的kernel size为3,stride为1。但是W-MSA在同一个stage里的kernel size和stride相同,这导致了一个问题——feature map上相邻的window之间永远不会交互,也就是一个stage中有1个W-MSA和N个W-MSA的感受野是没区别的。CNN中因为kernel size比stride大,随着conv的堆叠,感受野会逐步增加;MSA因为kernel size完全覆盖feature map,所以每个MSA都具备全局感受野。为了缓解这个问题,作者给W-WSA打了个补丁,得到了SW-MSA(Shifted Window based Multi-head Self-attention)
Swin Transformer中连续的block会依次交替使用W-MSA和SW-MSA。SW-MSA相比W-MSA唯一不同的地方在于将window进行shift,这种思路跟TSM异曲同工之妙。TSM想通过2D conv将时序信息encode进来,于是将各个frame的feature map在T维度进行shift;SW-MSA为了让相邻window之间产生交互,对window进行shift。
4 总结
Swin Transformer使用CNN结构设计中的一些理念(降采样、局部dependency、TSM)来重新设计Transformer,和我之前在如何看待Transformer在CV上的应用前景,未来有可能替代CNN吗?的回答不谋而合。SW-MSA这种解决方法我感觉不够优雅,应该有其他替代方案,比如W-MSA中的kernel size大于stride,这样就类似于CNN,随着block的增加感受野可以逐渐变大。
5 代码测试
配置环境
把这份代码clone到你的服务器上,或者本地
git clone https://github.com/microsoft/Swin-Transformer.git
cd Swin-Transformer
创建运行环境,并进入环境
conda create -n swin python=3.7 -y
conda activate swin
安装需要的环境
conda install pytorch==1.7.1 torchvision==0.8.2 cudatoolkit=10.1 -c pytorch
这里注意一下自己的环境,我这边的cuda是10.1的,所以可以直接按着官方给的这个来。怎么看自己的cuda环境呢,有很多种方法,最靠谱的是这个:
cat /usr/local/cuda/version.txt
别看nvidia-smi的那个,那个不准。
安装 timm==0.3.2:
pip install timm==0.3.2
好了,大头来了,坑爹的apex,安装它是相当的难受。
我是在另一台服务器上玩儿不来,然后换了一台又可以了,挺迷的。大伙儿可以先按照官方的那个操作来,如果安装不了,可以下载我这边提供的apex文件,然后再按照官方的那个操作再来一遍。注意啊,apex安装不成功的原因基本就是cuda版本和torch版本不匹配,这个我已经有心理阴影了,在这里不多提。假设你这边下载了我这边的apex文件,尽量和我一致吧,把apex文件放在swin-transformer这个代码文件之外,别掺和在一起。然后按照以下操作:
cd apex
pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
继续安装其他环境
pip install opencv-python==4.4.0.46 termcolor==1.1.0 yacs==0.1.8
环境配置完毕!!!
数据集
官方这边匹配代码的数据集是imagenet,但是imagenet太大了,咱只是想跑通一下,然后看看里面的源码咋回事儿,感觉感觉,犯不着去下载这么大的数据。真羡慕你们能看到这篇博客,来来来,我这儿提供了小型版的imagenet的数据集,统一放到下面了,百度网盘自取。
运行代码
有了数据,有了代码,那就运行了
首先是训练的运行方式:
python -m torch.distributed.launch --nproc_per_node 4 --master_port 12345 main.py --cfg configs/swin_tiny_patch4_window7_224.yaml --data-path imagenet --batch-size 64
--data-path对应的就是数据文件所在的位置
然后是测试的运行方式:
python -m torch.distributed.launch --nproc_per_node 1 --master_port 12345 main.py --eval --cfg configs/swin_tiny_patch4_window7_224.yaml --resume /pth/swin_tiny_patch4_window7_224.pth --data-path imagenet
- 分享
- 举报
-
浏览量:7826次2021-06-03 11:03:40
-
浏览量:7188次2021-06-07 09:27:26
-
浏览量:5330次2021-06-23 15:25:25
-
浏览量:15196次2021-05-31 17:01:00
-
浏览量:5400次2021-06-22 16:53:40
-
浏览量:11606次2021-05-04 20:20:07
-
浏览量:10890次2021-06-25 15:00:55
-
浏览量:7340次2021-07-19 17:08:40
-
浏览量:4264次2021-05-26 15:42:50
-
浏览量:4288次2021-06-22 12:55:39
-
浏览量:5867次2021-07-09 11:16:51
-
浏览量:8816次2021-07-12 11:01:47
-
浏览量:958次2023-04-04 11:14:12
-
浏览量:6201次2021-06-27 18:19:55
-
浏览量:5045次2021-08-05 09:20:49
-
浏览量:4917次2021-08-05 09:21:07
-
浏览量:7530次2021-06-03 11:04:00
-
浏览量:179次2023-08-23 10:15:21
-
浏览量:8633次2021-07-19 17:09:44
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
这把我C
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明