栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

nnformer中的V-MSA/SV-MSA

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

nnformer中的V-MSA/SV-MSA

nnformer中的V-MSA/SV-MSA
    • V-MSA计算方法


图片 1转载自:https://zhuanlan.zhihu.com/p/408333152

V-MSA计算方法

主要计算代码在SwinTransblk类:

1)输入x(B,DHW,C)=(1,48,32,32,192)

2)创建三个pad feature maps
pad_r = (self.window_size - W % self.window_size) % self.window_size #0
pad_b = (self.window_size - H % self.window_size) % self.window_size
pad_g = (self.window_size - S % self.window_size) % self.window_size

3)x = laynorm(x)且x.view(B, S, H, W, C)

4)使用F.pad()方法扩充tensor维度
原:torch.nn.functional.pad(input, pad, mode=‘constant’, value=0)
x = F.pad(x, (0, 0, 0, pad_r, 0, pad_b, 0, pad_g)) #x为需要扩充的tensor,(0, 0, 0, pad_r, 0, pad_b, 0, pad_g)为扩充维度

这里扩充的维度为0,因此x.shape=(1,48,32,32,192)

5)#划分窗口
x = x.view(B, S // window_size, window_size, H // window_size, window_size, W // window_size, window_size, C) #x.shape=(1,12,4,8,4,8,4,192)
#调换维度顺序x.shape=(1,12,8,8,4,4,4,192)#1288=768, 76864=4832*32=49152

6)再次更改维度
x_windows = x_windows.view(-1, self.window_size * self.window_size * self.window_size,C)
x_windows.shape=torch.Size([768, 64, 192])

7)进行V-MSA/SV-MSA计算
attn_windows = self.attn(x_windows, mask=attn_mask)#attn_mask=None #torch.Size([768, 64, 192])

8)将窗口大小的维度弄出来
attn_windows = attn_windows.view(-1, self.window_size, self.window_size, self.window_size, C)
#torch.Size([768, 4, 4, 4, 192])

9)window_reverse:将图像的维度转为一开始输入的
shifted_x.shape:torch.Size([1, 48, 32, 32, 192])

V-MSA和SV-MSA计算时维度不变,只是多计算了一个Transformerblock

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号