现状 - Swin Transformer

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
https://github.com/microsoft/Swin-Transformer

实验记录

微软使用分布式训练,每个主机用8块卡!
改成非分布式训练4GPU,估计会炸显存。。。

单卡32G显存,batch size=64仅占一半显存,128也没任何问题(显存利用率达到了90.28%)
6500+数据量 && img_size=224+caching && batch_size=128 && epochs=75:1小时 8分 49秒,平均速率50s/epoch。

Swin Transformer源码剖析

Image to Patch Embedding

patch=4x4x3
patches_resolution = [224//4, 224//4]
Linear Embedding projection就是一层卷积nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size),将每个patch由3通道卷成C通道;
示例:
(1, 3, 224, 224) -> (1, 96, 112, 112) -> (1, 96, 112*112)
-> (1, Ph*Pw, C)=(1, 112*112, 96)
其中,(B, Ph*Pw, C)也作(B, L, C),C放后面是便于nn.Linear处理。

WindowAttention(W-MSA/SW-MSA)

现状 - Swin Transformer_第1张图片

针对partition windows层面计算多头self-attention,并加入relative position bias来关联位置信息,可同时支持W-MSA和SW-MSA。
输入x: (num_windows*B, N, C)assert N == window_size*window_size

  • qkv: nn.Linear(dim, dim * 3, bias=qkv_bias:[True]),query, key, valuedim=int(embed_dim * 2 ** i_layer),embed_dim=96,则Number o

你可能感兴趣的:(深度学习CV现状吧,cv,源码)