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

不同的网站 做301沈阳seo优化

不同的网站 做301,沈阳seo优化,linux配置wordpress,《jsp网站开发详解》百度云💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在图像识别中,学习捕捉长距离关系是基础。现有的CNN模型通常通过增加深度来建立这种关系,但这种形式效率极低。因此&…

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡

在图像识别中,学习捕捉长距离关系是基础。现有的CNN模型通常通过增加深度来建立这种关系,但这种形式效率极低。因此,双重注意力被提出,这是一个新颖的组件,它能够从输入图像的整个时空空间聚合和传播信息丰富的全局特征,使得后续的卷积层能够高效地访问整个空间特征。这个组件通过两步的双重注意力机制来设计,第一步通过二阶注意力池化从整个空间收集特征到一组紧凑集合,第二步通过另一种注意力自适应选择和分配特征到每个位置。在本文中,给大家带来的教程是将原来的网络添加DoubleAttention。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修改,并将修改后的完整代码放在文章的最后,方便大家一键运行小白也可轻松上手实践。以帮助您更好地学习深度学习目标检测YOLO系列的挑战。

专栏地址: YOLOv5改进+入门——持续更新各种有效涨点方法 点击即可跳转

目录

1.原理

2. DoubleAttention代码实现

2.1 将DoubleAttention添加到YOLOv5中

2.2 新增yaml文件

2.3 注册模块

 2.4 执行程序

3. 完整代码分享

4.GFLOPs

5. 进阶

6. 总结


1.原理

官方论文:A2 -Nets: Double Attention Networks——点击即可跳转

官方代码:A2 -Nets: Double Attention Networks官方代码仓库——点击即可跳转

双重注意力网络(Double Attention Networks)是一种用于计算机视觉任务的神经网络架构,旨在有效地捕获图像中的全局和局部信息,以提高任务的性能。它是建立在注意力机制的基础上的,通过两个注意力模块来分别关注全局和局部信息。以下是关于Double Attention Networks的详细解释:

  1. 注意力机制: 注意力机制是一种模仿人类视觉系统的方法,它允许神经网络在处理输入数据时集中注意力在最相关的部分上。在计算机视觉中,这意味着网络可以动态地选择关注图像的不同部分,从而提高任务的性能。

  2. 双重注意力: 双重注意力网络引入了两个注意力模块,分别用于全局和局部信息。这两个模块分别关注图像的整体结构和局部细节,从而充分利用了图像中的各种信息。

  3. 全局注意力模块: 全局注意力模块负责捕获图像中的全局信息。它通常采用全局池化(global pooling)操作,将整个特征图进行压缩,然后通过一系列的神经网络层来学习全局上下文信息。这个模块能够帮助网络理解图像的整体语义结构。

  4. 局部注意力模块: 局部注意力模块专注于捕获图像中的局部信息。它通常采用一种局部感知机制(local perception),通过对图像进行分块或者使用卷积操作来提取局部特征,并且通过注意力机制来选择最相关的局部信息。这个模块有助于网络在处理具有局部结构的图像时更加准确。

  5. 特征融合: 在双重注意力网络中,全局和局部注意力模块学习到的特征需要被合并起来以供最终任务使用。这通常通过简单地将两个模块的输出进行融合,例如连接或者加权求和操作。这种特征融合使得网络能够综合利用全局和局部信息来完成任务。

通过以上的双重注意力网络架构,神经网络可以更有效地利用图像中的全局和局部信息,从而在各种计算机视觉任务中取得更好的性能。

2. DoubleAttention代码实现

2.1 将DoubleAttention添加到YOLOv5中

关键步骤一: 将下面代码粘贴到/projects/yolov5-6.1/models/common.py文件中

from torch import nn
import torch
from torch.autograd import Variable
import torch.nn.functional as Fclass DoubleAttentionLayer(nn.Module):"""Implementation of Double Attention Network. NIPS 2018"""def __init__(self, in_channels: int, c_m: int, c_n: int, reconstruct=False):"""Parameters----------in_channelsc_mc_nreconstruct: `bool` whether to re-construct output to have shape (B, in_channels, L, R)"""super(DoubleAttentionLayer, self).__init__()self.c_m = c_mself.c_n = c_nself.in_channels = in_channelsself.reconstruct = reconstructself.convA = nn.Conv2d(in_channels, c_m, kernel_size=1)self.convB = nn.Conv2d(in_channels, c_n, kernel_size=1)self.convV = nn.Conv2d(in_channels, c_n, kernel_size=1)if self.reconstruct:self.conv_reconstruct = nn.Conv2d(c_m, in_channels, kernel_size=1)def forward(self, x: torch.Tensor):"""Parameters----------x: `torch.Tensor` of shape (B, C, H, W)Returns-------"""batch_size, c, h, w = x.size()assert c == self.in_channels, 'input channel not equal!'A = self.convA(x)  # (B, c_m, h, w) because kernel size is 1B = self.convB(x)  # (B, c_n, h, w)V = self.convV(x)  # (B, c_n, h, w)tmpA = A.view(batch_size, self.c_m, h * w)attention_maps = B.view(batch_size, self.c_n, h * w)attention_vectors = V.view(batch_size, self.c_n, h * w)# softmax on the last dimension to create attention mapsattention_maps = F.softmax(attention_maps, dim=-1) # 对hxw维度进行softmax# step 1: feature gatheringglobal_descriptors = torch.bmm( # attention map(V)和tmpA进行tmpA, attention_maps.permute(0, 2, 1))  # (B, c_m, c_n)# step 2: feature distribution# (B, c_n, h * w) attention on c_n dimension - channel wiseattention_vectors = F.softmax(attention_vectors, dim=1)tmpZ = global_descriptors.matmul(attention_vectors)  # B, self.c_m, h * wtmpZ = tmpZ.view(batch_size, self.c_m, h, w)if self.reconstruct:tmpZ = self.conv_reconstruct(tmpZ)return tmpZ

双重注意力网络的主要过程涉及以下几个关键步骤:

  1. 输入图像的特征提取: 首先,输入的图像经过一个预训练的卷积神经网络(CNN)模型,例如ResNet、VGG等,以提取图像的特征。这些特征通常是一个高维度的张量,表示了图像在不同层次上的抽象特征信息。

  2. 全局注意力模块: 对于提取的图像特征,首先通过全局注意力模块进行处理。这个模块通常包括以下几个步骤:

    • 使用全局池化操作(如全局平均池化)将特征图进行降维,得到全局上下文信息。

    • 将降维后的全局特征通过一个全连接网络(FCN)进行处理,以学习全局信息的表示。

    • 使用激活函数(如ReLU)来增加网络的非线性表示能力。

  3. 局部注意力模块: 接下来,提取的特征经过局部注意力模块的处理。这个模块主要负责捕获图像中的局部信息,并结合全局信息进行处理。其主要步骤包括:

    • 将特征图分成不同的区域或者使用卷积操作来提取局部特征。

    • 对每个局部特征使用注意力机制,计算其与全局信息的相关程度,以得到局部的重要性权重。

    • 使用得到的权重对局部特征进行加权合并,以得到最终的局部表示。

  4. 特征融合: 全局和局部模块得到的特征需要被合并起来以供最终任务使用。通常的融合方式包括简单的连接、加权求和或者其他组合方式。这种特征融合能够让网络充分利用全局和局部信息,从而提高任务性能。

  5. 任务特定的输出: 最后,融合后的特征被送入一个或多个任务特定的神经网络层,例如全连接层或者卷积层,以完成具体的任务。这个任务可以是图像分类、目标检测、语义分割等。

2.2 新增yaml文件

关键步骤二在下/projects/yolov5-6.1/models下新建文件 yolov5_DANet.yaml并将下面代码复制进去

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # 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, DoubleAttentionLayer, [128,3]],[-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, 7], 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, 5], 1, Concat, [1]],  # cat backbone P3[-1, 3, C3, [256, False]],  # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 15], 1, Concat, [1]],  # cat head P4[-1, 3, C3, [512, False]],  # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 11], 1, Concat, [1]],  # cat head P5[-1, 3, C3, [1024, False]],  # 23 (P5/32-large)[[18, 21, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)]

温馨提示:本文只是对yolov5l基础上添加swin模块,如果要对yolov8n/l/m/x进行添加则只需要指定对应的depth_multiple 和 width_multiple。


# YOLOv5n
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.25  # layer channel multiple# YOLOv5s
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple# YOLOv5l 
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple# YOLOv5m
depth_multiple: 0.67  # model depth multiple
width_multiple: 0.75  # layer channel multiple# YOLOv5x
depth_multiple: 1.33  # model depth multiple
width_multiple: 1.25  # layer channel multiple

2.3 注册模块

关键步骤三在yolo.py中注册, 大概在260行左右添加 ‘DoubleAttentionLayer’

 2.4 执行程序

在train.py中,将cfg的参数路径设置为yolov5_DANet.yaml的路径

建议大家写绝对路径,确保一定能找到

🚀运行程序,如果出现下面的内容则说明添加成功🚀

3. 完整代码分享

https://pan.baidu.com/s/1z8fKOHrX0-zTRD8QHmBC4w?pwd=vi9l

提取码:vi9l

4.GFLOPs

关于GFLOPs的计算方式可以查看:百面算法工程师 | 卷积基础知识——Convolution

未改进的GFLOPs

img

改进后的GFLOPs

5. 进阶

你能在不同的位置添加双重注意力机制吗?这非常有趣,快去试试吧

6. 总结

双重注意力网络是一种用于计算机视觉任务的神经网络架构,旨在通过注意力机制有效地捕获图像中的全局和局部信息,从而提高任务性能。该网络引入了两个关键的注意力模块,分别用于全局和局部信息的关注,全局模块通过全局池化操作学习图像的整体语义结构,而局部模块则专注于提取图像的局部特征并通过局部感知机制选择最相关的信息。这两个模块学习到的特征最终被融合起来以供任务使用,通常通过连接或加权求和的方式进行特征融合。双重注意力网络通过端到端的训练和优化,使用适当的损失函数和正则化技术来提高模型的泛化能力和训练稳定性。这种架构使得神经网络能够更全面地利用图像中的全局和局部信息,从而在各种计算机视觉任务中取得更好的性能表现。

http://www.mmbaike.com/news/67658.html

相关文章:

  • 律师网站建设与维护google search
  • 引流网站怎么做培训班学员培训心得
  • 网站服务器需要多大百度app安卓版下载
  • 织梦建站要多少钱seo优化排名怎么做
  • 做网站资源推荐专业网站推广优化
  • 网站颜色规范ciliba磁力猫
  • 体验比较好的网站朋友圈推广一天30元
  • html5建设的网站百度百科入口
  • 台州市网站建设铁力seo
  • 郑州企业网站建设费用网站建设策划书
  • 浏览器被病毒网站绑了怎么做360建站官网
  • wordpress入门教程如何做好seo基础优化
  • 能自己做网站吗网络营销的方法包括哪些
  • 怎么做网站url地址谷歌seo排名技巧
  • 横向网站模板在线网页编辑平台
  • 永久免费的移动建站平台网络推广怎么样
  • 做的网站有营销效果吗国际免费b站
  • 四川住房和城乡建设厅网站三类人员合肥seo优化排名公司
  • wordpress 日历样式seo项目优化案例分析文档
  • 普达建站快车谷歌浏览器下载电脑版
  • 微网站建设及微信推广方案百度怎么发免费广告
  • 做网站最小的字体是多少钱网站一级域名和二级域名区别
  • 橙子建站广告怎么做营销方法有哪些
  • .la域名做的网站正规推广平台有哪些
  • 大型电商网站开发规划吸引人的推广标题
  • 电子商务实训网站建设获客渠道有哪些
  • 奥创工作手机微信管理系统扬州seo优化
  • 运输网站建设百度加盟
  • asp网站源代码中山口碑seo推广
  • 游戏网站怎么做推广排名软件