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

国外做油画的网站沈阳手机端建站模板

国外做油画的网站,沈阳手机端建站模板,成都视频剪辑哪家培训机构好,洛阳响应式建站参考博文#xff1a;神经网络学习小记录64——Pytorch 图像处理中注意力机制的解析与代码详解_pynq 注意力机制_Bubbliiiing的博客-CSDN博客 【计算机视觉】详解 自注意力#xff1a;Non-local 模块与 Self-attention (视觉注意力机制 (一))_自注意力模块_何处闻韶的博客-CS…参考博文神经网络学习小记录64——Pytorch 图像处理中注意力机制的解析与代码详解_pynq 注意力机制_Bubbliiiing的博客-CSDN博客 【计算机视觉】详解 自注意力Non-local 模块与 Self-attention (视觉注意力机制 (一))_自注意力模块_何处闻韶的博客-CSDN博客 参考视频 SEnet模块实现_哔哩哔哩_bilibili 视觉注意力代码汇总仓库 GitHub - MenghaoGuo/Awesome-Vision-Attentions: Summary of related papers on visual attention. Related code will be released based on Jittor gradually. https://github.com/xmu-xiaoma666/External-Attention-pytorch 背景 在计算机视觉中注意力机制 (attention) 旨在让系统学会注意力 —— 能够忽略无关信息而关注重点信息。 分类1 注意力机制一种是软注意力 (soft attention)另一种则是强注意力 (hard attention)。 软注意力 这种注意力 更关注 区域 或 通道而且软注意力是 确定性的 注意力学习完成后直接可以通过网络生成。最关键之处在于软注意力是 可微 的这意味着其可通过神经网络算出梯度 (如 PyTorch 自动求导)且前向传播和后向反馈来习得注意力的权重。 强注意力 与软注意力不同点在于首先它 更关注 点即图像中的 每个点都有可能延伸出注意力同时强注意力是一个 随机的预测过程更强调 动态变化。当然最关键之处在于强注意力是 不可微的训练过程往往是通过 强化学习 (reinforcement learning) 来完成的。 本文中主要讲软注意力 分类2 注意力分成了四种基本类型通道注意力、空间注意力、时间注意力和分支注意力以及两种组合注意力通道-空间注意力和空间-时间注意力。 SENet-通道注意力 SENet是通道注意力机制的典型实现。 2017年提出的SENet是最后一届ImageNet竞赛的冠军其实现示意图如下所示对于输入进来的特征层我们关注其每一个通道的权重对于SENet而言其重点是获得输入进来的特征层每一个通道的权值。利用SENet我们可以让网络关注它最需要关注的通道。 其具体实现方式就是 1、对输入进来的特征层进行全局平均池化。 2、然后进行两次全连接第一次全连接神经元个数较少第二次全连接神经元个数和输入特征层相同。 3、在完成两次全连接后我们再取一次Sigmoid将值固定到0-1之间此时我们获得了输入特征层每一个通道的权值0-1之间。 4、在获得这个权值后我们将这个权值乘上原输入特征层即可。 代码 import torch from torch import nnclass senet(nn.Module):def __init__(self, channel, ratio16): # channel为输入通道数,ratio为压缩比super(senet, self).__init__() # 初始化父类self.avg_pool nn.AdaptiveAvgPool2d(1) # 1.全局平均池化.由于是在高和宽上进行的所以输出的是一个1*1的特征图self.fc nn.Sequential( # 2.两个全连接层nn.Linear(channel, channel // ratio, False), # 第一次全连接神经元个数较少输入通道数输出通道数是否偏置nn.ReLU(inplaceTrue), # 激活函数nn.Linear(channel // ratio, channel, False), # 第二次全连接神经元个数和输入特征层相同。nn.Sigmoid(), # 激活函数)def forward(self, x):b, c, h, w x.size() # b为batch_size,c为通道数,h为高,w为宽avg self.avg_pool(x) # 全局平均池化后将特征图拉伸成一维向量 b*c*h*w - b*c*1*1avg avg.view(b, c) # b*c*1*1 - b*cfc self.fc(avg).view([b, c, 1, 1]) # 对平均池化后的特征图进行两次全连接,再view reshape方便后面的处理 #b*c - b*c*1*1print(fc) # 打印测试一下return x * fc #4.乘上原输入特征层# 测试一下 model senet(512) print(model) inputs torch.ones([2, 512, 26, 26]) output model(inputs)CBAM-通道空间注意力 CBAM将通道注意力机制和空间注意力机制进行一个结合相比于SENet只关注通道的注意力机制可以取得更好的效果。其实现示意图如下所示CBAM会对输入进来的特征层分别进行通道注意力机制的处理和空间注意力机制的处理。 通道注意力CAM 图像的上半部分为通道注意力机制通道注意力机制的实现可以分为两个部分我们会对输入进来的单个特征层分别进行全局平均池化和全局最大池化。这两个池化都是对高宽进行池化的。在完成池化后可以获得两个特征长条特征长条长度都是我们输入的通道数。 之后对平均池化和最大池化的结果特征长条利用共享的全连接层进行处理全连接层负责学习通道之间的权重关系增强重要通道的特征响应并抑制不重要通道的特征响应这个过程相当于对每个通道应用一个可学习的权重系数。 全连接后得到特征长条我们会对处理后的两个结果进行相加然后取一个sigmoid此时我们获得了输入特征层每一个通道的权值0-1之间。在获得这个权值后我们将这个权值乘上原输入特征层即可。这个绿色部分和我们原特征层的通道数一样 空间注意力SAM 我们会对输入进来的特征层在每一个特征点的通道上取最大值和平均值与上面对高宽进行池化不同此处对通道进行池化。相当于把输入图像压瘪了通道数为1。 将这些压瘪的图像堆叠之后得到高宽为2HxWx2的特征层。 对高宽为2的特征图利用一次通道数为1的卷积调整通道数获得高宽为1HxWx1的特征层然后取一个sigmoid此时我们获得了输入特征层每一个特征点的权值0-1之间。在获得这个权值后我们将这个权值乘上原输入特征层即可。 代码 # 是通道注意力和空间注意力的结合 import torch from torch import nn# 通道注意力 class channel_attention(nn.Module):def __init__(self,channel, ratio 16): # channel为输入通道数,ratio为压缩比super(channel_attention, self).__init__() # 初始化父类self.max_pool nn.AdaptiveMaxPool2d(1) # 全局最大池化.由于是在高和宽上进行的所以输出的是一个1*1的特征图self.avg_pool nn.AdaptiveAvgPool2d(1) # 全局平均池化.由于是在高和宽上进行的所以输出的是一个1*1的特征图self.fc nn.Sequential( # 2.两个全连接层nn.Linear(channel, channel//ratio, False) # 第一次全连接神经元个数较少输入通道数输出通道数是否偏置,nn.ReLU(inplaceTrue) # 激活函数,nn.Linear(channel//ratio, channel, False) # 第二次全连接神经元个数和输入特征层相同。)self.sigmoid nn.Sigmoid() # 激活函数def forward(self, x):b, c, h, w x.size()max_pool_out self.max_pool(x).view([b,c]) # 全局最大池化后将特征图拉伸成一维向量 b*c*h*w - b*c*1*1, 再view reshape方便后面的处理, b*c*1*1 - b*cavg_pool_out self.avg_pool(x).view([b,c]) # 全局平均池化后将特征图拉伸成一维向量 b*c*h*w - b*c*1*1, 再view reshape方便后面的处理, b*c*1*1 - b*c#再用全连接层进行处理max_fc_out self.fc(max_pool_out).view([b,c,1,1]) # b*c - b*c*1*1avg_fc_out self.fc(avg_pool_out).view([b,c,1,1]) # b*c - b*c*1*1#相加out max_fc_out avg_fc_outout self.sigmoid(out) # 激活函数return x * out # 通道注意力机制的输出# 空间注意力 class spatial_attention(nn.Module):def __init__(self,kernel_size 7): # kernel_size为卷积核的大小super(spatial_attention, self).__init__() # 初始化父类self.conv nn.Conv2d(2, 1, kernel_size, 1, paddingkernel_size//2,biasFalse) # 1.卷积层self.sigmoid nn.Sigmoid() # 激活函数def forward(self, x):max_out,_ torch.max(x, dim1, keepdimTrue) # 最大池化, _为最大值的索引,这里不需要;keepdimTrue保持维度不变avg_out torch.mean(x, dim1, keepdimTrue) # 平均池化pool_out torch.cat([avg_out,max_out], dim1) # 拼接out self.conv(pool_out) # 卷积out self.sigmoid(out) # 激活函数return x * out # 空间注意力机制的输出# CBAM模块, 结合通道注意力机制和空间注意力机制 class CBAM(nn.Module):def __init__(self, channel, ratio 16, kernel_size 7):super(CBAM, self).__init__()# 定义通道注意力机制self.channel_attention channel_attention(channel, ratio)# 定义空间注意力机制self.spatial_attention spatial_attention(kernel_size)def forward(self,x):x self.channel_attention(x) # 通道注意力机制的输出x self.spatial_attention(x) # 空间注意力机制的输出return x# 测试一下 model CBAM(512) print(model) inputs torch.ones([2, 512, 26, 26]) output model(inputs)ECA-通道注意力的改进版 ECANet的作者认为SENet对通道注意力机制的预测带来了副作用捕获所有通道的依赖关系是低效并且是不必要的。 在ECANet的论文中作者认为卷积具有良好的跨通道信息获取能力。 ECA模块的思想是非常简单的它去除了原来SE模块中的全连接层直接在全局平均池化之后的特征上通过一个1D卷积进行学习。1D卷积是一种应用于序列数据或一维数据的卷积操作。在计算机视觉中我们熟悉的卷积通常是应用于图像数据的2D卷积而1D卷积则主要用于处理一维序列数据例如文本、语音和时间序列数据等。 既然使用到了1D卷积那么1D卷积的卷积核大小的选择就变得非常重要了了解过卷积原理的同学很快就可以明白1D卷积的卷积核大小会影响注意力机制每个权重的计算要考虑的通道数量。用更专业的名词就是跨通道交互的覆盖率。 如下图所示左图是常规的SE模块右图是ECA模块。ECA模块用1D卷积替换两次全连接。 代码 import mathimport torch import torch.nn as nnclass eca_block(nn.Module):def __init__(self,channel,gamma 2,b 1):super(eca_block,self).__init__() # 初始化父类kernel_size int(abs((math.log(channel, 2)b )/ gamma)) # 计算卷积核大小kernel_size kernel_size if kernel_size % 2 else kernel_size 1 # 卷积核大小必须为奇数padding kernel_size//2 # 填充大小self.avg_pool nn.AdaptiveAvgPool2d(1) # 1.全局平均池化.由于是在高和宽上进行的所以输出的是一个1*1的特征图,这里的1表示输出的通道数# 定义1D卷积self.conv nn.Conv1d(1, 1, kernel_sizekernel_size, paddingpadding, biasFalse) # 2.一维卷积这里的11是把它当作序列模型来看self.sigmoid nn.Sigmoid() # 激活函数def forward(self, x):b, c, h, w x.size() # b为batch_size,c为通道数,h为高,w为宽avg self.avg_pool(x).view([b,1,c]) # 全局平均池化后将特征图拉伸成一维向量 b*c*h*w - b*1*c, 第一个维度是batchsize 第二个维度是通道数第二个维度是特征长度第三个维度代表每个时序out self.conv(avg) # 一维卷积out self.sigmoid(out).view(b,c,1,1) # 激活函数再reshape成b*c*1*1return out*x# 测试一下 model eca_block(512) print(model) inputs torch.ones([2, 512, 26, 26]) output model(inputs) 自注意力 首先我们要区分一般的注意力机制和自注意力机制 一般注意力的过程是通过一个查询变量 Q去找到 V 里面比较重要的东西 1它先假设 KV然后 QK 相乘求相似度A然后 AV 相乘得到注意力值Z这个 Z 就是 V 的另外一种形式的表示 Q 可以是任何一个东西V 也是任何一个东西 K往往是等同于 V 的同源但是不同源也可以 总之注意力机制是一个很宽泛宏大的一个概念QKV 相乘就是注意力但是他没有规定 QKV是怎么来的他只规定 QKV 怎么做 而QKV如果从同一个矩阵中获得那么就叫做自注意力不仅规定了 QKV 同源而且固定了 QKV 的做法 QKV不同源呢就是交叉注意力机制 感觉还蛮流行的到时候单独写一篇好了 注意力机制应用 注意力机制是一个即插即用的模块理论上可以放在任何一个特征层后面可以放在主干网络也可以放在加强特征提取网络。 由于放置在主干会导致网络的预训练权重无法使用一般将注意力机制应用加强特征提取网络上。 下面是一些添加注意力模块时的常见情况以及可能会产生好坏效果的因素 添加效果会好的情况 大尺寸图像或复杂任务当处理大尺寸图像或者复杂的任务时网络需要处理更多的信息和细节。此时注意力机制可以帮助网络在解码器阶段集中注意力关注对任务更重要的局部信息而忽略不重要的区域。 长距离依赖在一些任务中像语义分割或图像生成等信息的联系可能存在长距离的依赖。注意力机制可以帮助捕获远距离区域之间的关系从而更好地理解图像的语义。 不平衡数据当数据集存在类别不平衡时注意力机制可以帮助网络更好地处理少数类别从而提高模型对少数类别的分割效果。 添加会起到反作用的情况 小数据集对于小规模数据集引入复杂的注意力机制可能导致过拟合因为模型可能会在训练数据中过度关注细节而无法泛化到新数据上。 简单任务在处理相对简单的任务或者小尺寸图像时注意力机制可能会引入额外的计算负担而无法给模型带来明显的性能提升。 不恰当的设计如果注意力模块的设计不当例如过于复杂、参数量过大或者超参数设置不合理可能会导致模型收敛困难或者性能下降。 未来展望 注意力机制的充分必要条件 更加通用的注意力模块 注意力机制的可解释性 注意力机制中的稀疏激活 基于注意力机制的预训练模型 适用于注意力机制的优化方法 部署注意力机制的模型
http://www.dnsts.com.cn/news/178384.html

相关文章:

  • 医院品牌网站建设做网站维护难吗
  • 平面设计周记100篇上优化
  • 做图片详情网站如何做网站讯息
  • 网站开发 方案学校网站建设介绍
  • 网站设计太原wordpress注册发邮箱验证码
  • 手机麻将app制作开发长春网站优化常识
  • 重庆 网站定制wordpress前端开发
  • 吉林大学学风建设专题网站网站备案和空间备案
  • 德阳市住房和城乡建设局网站120平米装修10万够吗
  • 网站开发流程需要用到的语言网站设为首页代码
  • 查网站权重给我看免费观看
  • 酷站深圳时事热点新闻
  • 营销型网站建设必备功能网站建设多少钱一平米
  • 网站内页怎样做优化海南最新消息
  • pc 响应式网站模板乐清建站公司哪家好
  • 网站栏目建设征求意见网站开发 图形验证码
  • 服装网站开发的需求分析wordpress 可视化编辑器
  • 网站建设的公司如何寻找客户关于网站建设的案例分析
  • 小县城做婚礼网站自设计网站
  • 电子商务网站建设相关职位编辑wordpress文章页
  • 做网站申请完域名后做什么百度账号登陆
  • 反馈网站制作信息化管理软件
  • 手机上自己做网站公司网站可以自己建立吗
  • 网站规划详细设计怎么写番禺本地网站
  • 公司网站定制开发广告设计入门到精通
  • 网站选项按钮网站建设客户去哪找
  • 咸阳网站建设seo个人网站制作步骤
  • 门户网站开发模板阿里云网站主体变更怎么做
  • 母婴网站建设的与功能模块烟台网站制作方案定制
  • 做网站如何报价凡科做网站行吗