外贸网站怎么做外链,长春兼职,请人做网站需要注意什么,wordpress小工具界面目录
1.简介
2.YOLOv5改进
2.1增加以下S2-MLPv2.yaml文件
2.2common.py配置
2.3yolo.py配置 1.简介 S2-MLPv2注意力机制 最近#xff0c;出现了基于 MLP 的视觉主干。与 CNN 和视觉Transformer相比#xff0c;基于 MLP 的视觉架构具有较少的归纳偏差#xff0c;在图像识…目录
1.简介
2.YOLOv5改进
2.1增加以下S2-MLPv2.yaml文件
2.2common.py配置
2.3yolo.py配置 1.简介 S2-MLPv2注意力机制 最近出现了基于 MLP 的视觉主干。与 CNN 和视觉Transformer相比基于 MLP 的视觉架构具有较少的归纳偏差在图像识别方面实现了有竞争力的性能。其中spatial-shift MLP (S2-MLP)采用直接的空间位移操作取得了比包括 MLP-mixer 和 ResMLP 在内的开创性工作更好的性能。使用具有金字塔结构的较小补丁视觉置换器 (ViP) 和Global Filter Network (GFNet) 实现了比 S2-MLP 更好的性能。
在本文中我们改进了 S2-MLP 视觉主干。我们沿通道维度扩展特征图并将扩展后的特征图分成几个部分。我们对分割部分进行不同的空间移位操作。 本文对空间移位MLP (S2-MLP)模型进行了改进提出了S2-MLPv2模型。将feature map进行扩展并将扩展后的feature map分为三部分。它将每个部分单独移动然后通过split-attention融合分开的特征图。同时我们利用层次金字塔来提高其建模细粒度细节的能力以获得更高的识别精度。在没有外部训练数据集的情况下采用224×224的images我们的s2-mlv2-medium模型在ImageNet1K数据集上取得了83.6%的top-1准确率这是目前基于MLP的方法中最先进的性能。同时与基于transformer的方法相比我们的S2-MLPv2模型在不需要自我注意的情况下参数更少达到了相当的精度。 与基于MLP的先驱作品如MLP-Mixer、ResMLP以及最近类似MLP的模型如Vision Permutator和GFNet相比空间移位MLP的另一个重要优势是空间移位MLP的形状对图像的输入尺度是不变的。因此经过特定尺度图像预训练的空间移位MLP模型可以很好地应用于具有不同尺寸输入图像的下游任务。未来的工作将致力于不断提高空间移位MLP体系结构的图像识别精度。一个有希望且直接的方向是尝试更小尺寸的patch和更高级的四层金字塔如CycleMLP和AS-MLP以进一步减少FLOPs和缩短基于transformer模型之间的识别差距。 S2注意力机制S2 Attention Mechanism是一种用于序列建模和注意力机制改进的方法特别在自然语言处理NLP领域中得到广泛应用。它是对传统的自注意力机制self-attention进行改进旨在提高序列中不同位置之间的关联性建模能力。 自注意力机制回顾 自注意力机制是一种用于处理序列数据的方法最早在Transformer模型中提出并广泛用于NLP任务中。在自注意力机制中序列中的每个位置都可以与其他所有位置进行交互以便捕获位置之间的关系。然而这种全局的交互可能会导致计算复杂度的增加并且可能过于强调距离较近的位置。 S2注意力机制的改进 S2注意力机制引入了一种分段结构将序列分为不同的段segments。每个段内的位置之间可以进行交互但不同段之间的交互被限制。这种分段结构在捕获长距离依赖关系时更加高效因为不同段之间的关联性通常较弱。 注意力计算 在S2注意力中注意力权重的计算仍然涉及对查询query、键key和值value的操作。不同之处在于每个段的注意力计算是独立的而不同段之间的注意力权重设为固定值通常为0。 优势与应用 S2注意力机制的主要优势是在捕获序列中的长距离依赖关系时表现更加高效。这在处理长文本或长序列时特别有用可以减少计算成本同时提高建模性能。S2注意力机制在机器翻译、文本生成、命名实体识别等NLP任务中都有应用以更好地处理长文本的关系建模。
2.YOLOv5改进
2.1增加以下S2-MLPv2.yaml文件
# parameters
# YOLOv5 by Ultralytics, GPL-3.0 license# Parameters
nc: 80 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
anchors:- [10,13, 16,30, 33,23] # P3/8- [30,61, 62,45, 59,119] # P4/16- [116,90, 156,198, 373,326] # P5/32# YOLOv5 v6.0 backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2[-1, 1, Conv, [128, 3, 2]], # 1-P2/4[-1, 3, C3, [128]],[-1, 1, Conv, [256, 3, 2]], # 3-P3/8[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]], # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]], # 9]# YOLOv5 v6.0 head
head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, nearest]],[[-1, 6], 1, Concat, [1]], # cat backbone P4[-1, 3, C3, [512, False]], # 13[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, nearest]],[[-1, 4], 1, Concat, [1]], # cat backbone P3[-1, 3, C3, [256, False]], # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]], # cat head P4[-1, 3, C3, [512, False]], # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]], # cat head P5[-1, 3, C3, [1024, False]], # 23 (P5/32-large)[-1, 1, S2Attention, [1024]], #修改[[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)]2.2common.py配置
./models/common.py文件增加以下模块
import numpy as np
import torch
from torch import nn
from torch.nn import init# https://arxiv.org/abs/2108.01072
def spatial_shift1(x):b,w,h,c x.size()x[:,1:,:,:c//4] x[:,:w-1,:,:c//4]x[:,:w-1,:,c//4:c//2] x[:,1:,:,c//4:c//2]x[:,:,1:,c//2:c*3//4] x[:,:,:h-1,c//2:c*3//4]x[:,:,:h-1,3*c//4:] x[:,:,1:,3*c//4:]return xdef spatial_shift2(x):b,w,h,c x.size()x[:,:,1:,:c//4] x[:,:,:h-1,:c//4]x[:,:,:h-1,c//4:c//2] x[:,:,1:,c//4:c//2]x[:,1:,:,c//2:c*3//4] x[:,:w-1,:,c//2:c*3//4]x[:,:w-1,:,3*c//4:] x[:,1:,:,3*c//4:]return xclass SplitAttention(nn.Module):def __init__(self,channel512,k3):super().__init__()self.channelchannelself.kkself.mlp1nn.Linear(channel,channel,biasFalse)self.gelunn.GELU()self.mlp2nn.Linear(channel,channel*k,biasFalse)self.softmaxnn.Softmax(1)def forward(self,x_all):b,k,h,w,cx_all.shapex_allx_all.reshape(b,k,-1,c) atorch.sum(torch.sum(x_all,1),1) hat_aself.mlp2(self.gelu(self.mlp1(a))) hat_ahat_a.reshape(b,self.k,c) bar_aself.softmax(hat_a) attentionbar_a.unsqueeze(-2) outattention*x_all outtorch.sum(out,1).reshape(b,h,w,c)return outclass S2Attention(nn.Module):def __init__(self, channels512 ):super().__init__()self.mlp1 nn.Linear(channels,channels*3)self.mlp2 nn.Linear(channels,channels)self.split_attention SplitAttention()def forward(self, x):b,c,w,h x.size()xx.permute(0,2,3,1)x self.mlp1(x)x1 spatial_shift1(x[:,:,:,:c])x2 spatial_shift2(x[:,:,:,c:c*2])x3 x[:,:,:,c*2:]x_alltorch.stack([x1,x2,x3],1)a self.split_attention(x_all)x self.mlp2(a)xx.permute(0,3,1,2)return x
2.3yolo.py配置
在 models/yolo.py文件夹下
定位到parse_model函数中新增以下代码
elif m is S2Attention:c1, c2 ch[f], args[0]if c2 ! no:c2 make_divisible(c2 * gw, 8)以上就修改完成了
又遇到的问题欢迎评论区留言讨论