当前位置: 首页 > news >正文

linux 如何做网站宁波专业的网站建设团队

linux 如何做网站,宁波专业的网站建设团队,汕头网站制作找哪里,南宁学网站建设文章目录 1、Swin Transformer的介绍1.1 Swin Transformer解决图像问题的挑战1.2 Swin Transformer解决图像问题的方法 2、Swin Transformer的具体过程2.1 Patch Partition 和 Linear Embedding2.2 W-MSA、SW-MSA2.3 Swin Transformer代码解析2.3.1 代码解释 2.4 W-MSA和SW-MSA… 文章目录 1、Swin Transformer的介绍1.1 Swin Transformer解决图像问题的挑战1.2 Swin Transformer解决图像问题的方法 2、Swin Transformer的具体过程2.1 Patch Partition 和 Linear Embedding2.2 W-MSA、SW-MSA2.3 Swin Transformer代码解析2.3.1 代码解释 2.4 W-MSA和SW-MSA的softmax计算2.4.1 代码实现 2.5 patch merging 实现过程 3、不同Swin Transformer版本的区别 1、Swin Transformer的介绍 下面是Swin Transformer论文的Abstract 1.1 Swin Transformer解决图像问题的挑战 原论文中的Abstract讲到Challenges in adapting Transformer from language to vision arise from differences between the two domains, such as large variations in the scale of visual entities and the high resolution of pixels in images compared to words in text。 也就是说在一张图片中不同的object有不同的尺度以及与NLP相比图像处理需要更多的token下面来看在CNN中是如何解决不同的object有不同的尺度这个问题的CNN是通过Conv和Pool对特征图中像素的不同感受野来检测不同尺度的物体如下图所示 为什么多尺度检测对于Swin Transformer是有挑战性的请看下图最左边的Transformer结构当图片的宽高像素是 h × w \sf{h} \times \sf{w} h×w所以一共有 h × w \sf{h} \times \sf{w} h×w 个token输入给Transformer时输出也是 h × w \sf{h} \times \sf{w} h×w 所以Transformer并没有做下采样操作下图中间的是ViT的结构下图最右边的是Swin Transformer结构MSA是multi-head self-attention的缩写 1.2 Swin Transformer解决图像问题的方法 Swin Transformer如何解决相比NLP中更多的token呢Swin Transformer提出了hierarchical Transformerhierarchical Transformer是由shifted windows计算出来的 下面是MSAW-MSASW-MSA的示意图 如果对于MSA处理56x56个像素的图片需要计算 313 6 2 3136^2 31362次的相似度计算量较大W-MSA将56x56个像素分割成8x8个windows每个windows由7x7个像素组成每个windows单独计算MSA作用是减少计算量缺点是windows之间没有信息交互计算相似度为SW-MSA可以解决windows之间没有信息交互的问题例如下图最右边的示例把一个8x8的图片的分成4个windows然后分割grid向右下角移动 window // 2这样分割的windows就可以包含多个windows之间的信息 如下图中最左边部分的123包含多个windows的信息 下图黄色虚线框标记的是Swin Transformer处理模块每次经过Swin Transformer模块patch Merging使特征层减少一半通道数增加一倍 与ViT特征层不变不同每次经过Swin Transformer模块特征层减少一半通道数增加一倍 2、Swin Transformer的具体过程 2.1 Patch Partition 和 Linear Embedding 如下图黄色虚线框的作用是下采样 将224x224x3的特征图中的4x4x3的像素patch成1个token然后通过concat操作就得到了4x4x348个特征维度把这个48个维度的向量看成一个token所以224x224x3的特征图有56x56个token每个token的特征维度是48再经过一个映射把48个维度映射成96个维度如下图所示 Patch Partition 和 Linear Embedding在上面的示意图上是2个步骤但是在代码中却是一步完成的如下代码中的self.proj 2.2 W-MSA、SW-MSA 如下图2个连续的swin transformer结构与ViT的结构只有W-MSA、SW-MSA和MSA的区别其他的MLP、Norm结构都相同 下面是MSA和W-MSA的示意图相较于MSAW-MSA计算量较小但是windows之间没有信息交互 下面是SW-MSA的示意图SW-MSA采用新的 window 划分方式将 windows 向右下角移动 window size // 2移动之后会发现windows的大小不一样先把AB向右移动然后AC再向下移动就解决了windows的大小不一样的问题这样就可以并行地计算SW-MSA了 需要注意到移动之后每个window的像素并不是连续的如何解决这个问题请看下面的解释 如下图0作为query其本身和其他window内的数字作为k示意图中矩形框表示0和移动的像素的乘积这个乘积再作 − 100 -100 −100计算取softmax之后值就接近于0了 计算完成之后再把移动之后的像素还原 W-MSA、SW-MSA与MSA的不同还在于softmax的计算方式W-MSA、SW-MSA与MSA的不同有W-MSA、SW-MSA是在softmax里面加入相对位置偏置MSA是在输入加入位置编码 2.3 Swin Transformer代码解析 代码 class SwinTransformerBlock(nn.Module):r Swin Transformer Block.Args:dim (int): Number of input channels.num_heads (int): Number of attention heads.window_size (int): Window size.shift_size (int): Shift size for SW-MSA.mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: Truedrop (float, optional): Dropout rate. Default: 0.0attn_drop (float, optional): Attention dropout rate. Default: 0.0drop_path (float, optional): Stochastic depth rate. Default: 0.0act_layer (nn.Module, optional): Activation layer. Default: nn.GELUnorm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNormdef __init__(self, dim, input_resolution, num_heads, window_size7, shift_size0,mlp_ratio4., qkv_biasTrue, drop0., attn_drop0., drop_path0.,act_layernn.GELU, norm_layernn.LayerNorm):super().__init__()self.dim dimself.input_resolution input_resolutionself.num_heads num_headsself.window_size window_sizeself.shift_size shift_sizeself.mlp_ratio mlp_ratioassert 0 self.shift_size self.window_size, shift_size must in 0-window_sizeself.norm1 norm_layer(dim)self.attn WindowAttention(dim, window_size(self.window_size, self.window_size), num_headsnum_heads,qkv_biasqkv_bias, attn_dropattn_drop, proj_dropdrop)self.drop_path DropPath(drop_path) if drop_path 0. else nn.Identity()self.norm2 norm_layer(dim)mlp_hidden_dim int(dim * mlp_ratio)self.mlp Mlp(in_featuresdim, hidden_featuresmlp_hidden_dim, act_layeract_layer, dropdrop)if self.shift_size 0:# calculate attention mask for SW-MSAH, W self.input_resolutionimg_mask torch.zeros((1, H, W, 1)) # 1 H W 1h_slices (slice(0, -self.window_size),slice(-self.window_size, -self.shift_size),slice(-self.shift_size, None))w_slices (slice(0, -self.window_size),slice(-self.window_size, -self.shift_size),slice(-self.shift_size, None))cnt 0for h in h_slices:for w in w_slices:img_mask[:, h, w, :] cntcnt 1mask_windows window_partition(img_mask, self.window_size) # nW, window_size, window_size, 1mask_windows mask_windows.view(-1, self.window_size * self.window_size)attn_mask mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)attn_mask attn_mask.masked_fill(attn_mask ! 0, float(-100.0)).masked_fill(attn_mask 0, float(0.0))else:attn_mask Noneself.register_buffer(attn_mask, attn_mask)def forward(self, x):H, W self.input_resolutionB, L, C x.shapeassert L H * W, input feature has wrong sizeshortcut xx self.norm1(x)x x.view(B, H, W, C)# cyclic shiftif self.shift_size 0:shifted_x torch.roll(x, shifts(-self.shift_size, -self.shift_size), dims(1, 2))else:shifted_x x# partition windowsx_windows window_partition(shifted_x, self.window_size) # [nW*B, Mh, Mw, C]x_windows x_windows.view(-1, self.window_size * self.window_size, C) # [nW*B, Mh*Mw, C]# W-MSA/SW-MSAattn_windows self.attn(x_windows, maskself.attn_mask) # [nW*B, Mh*Mw, C]# merge windowsattn_windows attn_windows.view(-1, self.window_size, self.window_size, C) # [nW*B, Mh, Mw, C]shifted_x window_reverse(attn_windows, self.window_size, H, W) # [B, H, W, C]# reverse cyclic shiftif self.shift_size 0:x torch.roll(shifted_x, shifts(self.shift_size, self.shift_size), dims(1, 2))else:x shifted_xx x.view(B, H * W, C)x shortcut self.drop_path(x)# FFNx x self.drop_path(self.mlp(self.norm2(x)))return x2.3.1 代码解释 代码解释 接上面的代码 window_partition函数 window_reverse函数 MLP函数 2.4 W-MSA和SW-MSA的softmax计算 W-MSA和SW-MSA的softmax计算分为2个步骤 对于window size为2的矩阵计算其relative position index矩阵矩阵大小为 w i n d o w s i z e 2 \sf{windowsize}^2 windowsize2 x w i n d o w s i z e 2 \sf{windowsize}^2 windowsize2relative position index矩阵的size和相似度矩阵的size一致计算结果不用赘述很容易看出来相对位置的矩阵size是 2 M − 1 \sf{2M-1} 2M−1 x 2 M − 1 \sf{2M-1} 2M−1 relative position bias matrix是一个可学习的参数是依照相对位置的所有组合方式而来 relative position bias B 的值来自 relative position bias matrix B ^ \sf{\hat{B}} B^ 的值 2.4.1 代码实现 因为2维矩阵需要考虑2个维度的值不方便计算所以把2维坐标转为1维坐标计算过程如下 代码以及代码解释 下图右边的代码假设window size为7 2.5 patch merging 实现过程 patch merging在swin transformer中的位置如下 patch merging的实现过程如下图原来的像素在每隔1个像素组合经过concat和LayerNorm以及Linear层之后size减倍channel数加倍 代码 3、不同Swin Transformer版本的区别 区别在于stage1的channel数stage3的Swin Transformer计算的次数 参考 1、原论文https://arxiv.org/pdf/2103.14030 2、哔哩哔哩https://www.bilibili.com/video/BV1xF41197E4/?p6spm_id_frompageDriver
http://www.w-s-a.com/news/124592/

相关文章:

  • 开发东莞网站制作公司做网站优化步骤
  • 网站版权信息的正确写法如何制作网络游戏
  • 郑州移动端网站建设如何在网上推广自己的公司
  • 企业建站源码系统破解网站后台
  • 石家庄网站开发报价企业注册资本代表什么
  • 招商平台公司宁波seo教程推广平台
  • 哪些网站可以做房产推广垂直门户网站都有什么
  • 不得不知道的网站金石项目管理软件
  • 怎么恢复网站数据库网站开发作业代做
  • 哪里建设网站最好用中国第五冶金建设公司医院网站
  • 雄安网建 网站建设订餐网站建设
  • 广州视频网站建站公司网站 体系
  • 青浦门户网站网站推广烟台公司电话
  • 湖北荆门建设银行网站wordpress购物模板下载
  • 学ui+wordpress模板北京推广优化
  • 建分类网站得花多少钱深圳设计网站开发
  • 网站集群建设和网站集约化百度商桥怎么绑定网站
  • 青岛模板网站建设价格网络品牌网站建设
  • 网站建设的几大要素网站的做网站的公司
  • 怎么登陆自己的公司网站垂直电商网站建设
  • 温州微网站制作哪里有许昌网站建设哪家最好
  • 中国中小企业网站官网网页制作工具按其制作方式分 可以分为
  • 做资源下载网站违法吗河南企业做网站
  • 网站开发总体功能设计网站建设 北京昌平
  • 辽宁省高等级公路建设局网站书画院网站建设方案
  • 本地生活网站 源码重庆本地网站有哪些
  • 企业网站域名服务器国外html响应式网站
  • 东莞网站建设策划企业网站推广策划方法
  • 网站的图片怎么制作WordPress交互式网站
  • pc网站增加手机站什么专业学网页设计制作