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

模块化局域网网站建设软件百度allin 人工智能

模块化局域网网站建设软件,百度allin 人工智能,济南专业做网站的公司哪家好,123建站注意力机制1 SENet2 ECANet3 CBAM3.1 通道注意力3.2 空间注意力3.3 CBAM4 展示网络层具体信息1 SENet SE注意力机制#xff08;Squeeze-and-Excitation Networks#xff09;:是一种通道类型的注意力机制#xff0c;就是在通道维度上增加注意力机制#xff0c;主要内容是是… 注意力机制1 SENet2 ECANet3 CBAM3.1 通道注意力3.2 空间注意力3.3 CBAM4 展示网络层具体信息1 SENet SE注意力机制Squeeze-and-Excitation Networks:是一种通道类型的注意力机制就是在通道维度上增加注意力机制主要内容是是squeeze和excitation. 就是使用另外一个新的神经网络(两个Linear层)针对通道维度的数据进行学习获取到特征图每个通道的重要程度然后再和原始通道数据相乘即可。 具体参考Blog CNN中的注意力机制 小结 SENet的核心思想是通过全连接网络根据loss损失来自动学习特征权重而不是直接根据特征通道的数值分配来判断使有效的特征通道的权重大。 论文认为excitation操作中使用两个全连接层相比直接使用一个全连接层它的好处在于具有更多的非线性可以更好地拟合通道间的复杂关联。 代码 拆解步骤forward代码写的比较细节 import torch from torch import nn from torchstat import stat # 查看网络参数# 定义SE注意力机制的类 class se_block(nn.Module):# 初始化, in_channel代表输入特征图的通道数, ratio代表第一个全连接下降通道的倍数def __init__(self, in_channel, ratio4):# 继承父类初始化方法super(se_block, self).__init__()# 属性分配# 全局平均池化输出的特征图的宽高1self.avg_pool nn.AdaptiveAvgPool2d(output_size1)# 第一个全连接层将特征图的通道数下降4倍self.fc1 nn.Linear(in_featuresin_channel, out_featuresin_channel//ratio, biasFalse)# relu激活self.relu nn.ReLU()# 第二个全连接层恢复通道数self.fc2 nn.Linear(in_featuresin_channel//ratio, out_featuresin_channel, biasFalse)# sigmoid激活函数将权值归一化到0-1self.sigmoid nn.Sigmoid()# 前向传播def forward(self, inputs): # inputs 代表输入特征图# 获取输入特征图的shapeb, c, h, w inputs.shape# 全局平均池化 [b,c,h,w][b,c,1,1]x self.avg_pool(inputs)# 维度调整 [b,c,1,1][b,c]x x.view([b,c])# 第一个全连接下降通道 [b,c][b,c//4] # 这里也是使用Linear层的原因只是对Channel进行线性变换x self.fc1(x)x self.relu(x)# 第二个全连接上升通道 [b,c//4][b,c] # 再通过Linear层恢复Channel数目x self.fc2(x)# 对通道权重归一化处理 # 将数值转化为01之间体现不同通道之间重要程度x self.sigmoid(x)# 调整维度 [b,c][b,c,1,1] x x.view([b,c,1,1])# 将输入特征图和通道权重相乘outputs x * inputsreturn outputs结果展示 提示 in_channel/ratio需要大于0否则线性层输入是0维度没有意义可以根据自己需求调整ratio的大小。 2 ECANet 作者表明 SENet 中的降维会给通道注意力机制带来副作用并且捕获所有通道之间的依存关系是效率不高的而且是不必要的。 参考Blog CNN中的注意力机制 代码 详细版本在forward中介绍了每一步的作用 import torch from torch import nn import math from torchstat import stat # 查看网络参数# 定义ECANet的类 class eca_block(nn.Module):# 初始化, in_channel代表特征图的输入通道数, b和gama代表公式中的两个系数def __init__(self, in_channel, b1, gama2):# 继承父类初始化super(eca_block, self).__init__()# 根据输入通道数自适应调整卷积核大小kernel_size int(abs((math.log(in_channel, 2)b)/gama))# 如果卷积核大小是奇数就使用它if kernel_size % 2:kernel_size kernel_size# 如果卷积核大小是偶数就把它变成奇数else:kernel_size kernel_size 1# 卷积时为例保证卷积前后的size不变需要0填充的数量padding kernel_size // 2# 全局平均池化输出的特征图的宽高1self.avg_pool nn.AdaptiveAvgPool2d(output_size1)# 1D卷积输入和输出通道数都1卷积核大小是自适应的# 这个1维卷积需要好好了解一下机制这是改进SENet的重要不同点self.conv nn.Conv1d(in_channels1, out_channels1, kernel_sizekernel_size,biasFalse, paddingpadding)# sigmoid激活函数权值归一化self.sigmoid nn.Sigmoid()# 前向传播def forward(self, inputs):# 获得输入图像的shapeb, c, h, w inputs.shape# 全局平均池化 [b,c,h,w][b,c,1,1]x self.avg_pool(inputs)# 维度调整变成序列形式 [b,c,1,1][b,1,c]x x.view([b,1,c]) # 这是为了给一维卷积# 1D卷积 [b,1,c][b,1,c]x self.conv(x)# 权值归一化x self.sigmoid(x)# 维度调整 [b,1,c][b,c,1,1]x x.view([b,c,1,1])# 将输入特征图和通道权重相乘[b,c,h,w]*[b,c,1,1][b,c,h,w]outputs x * inputsreturn outputs精简版 import torch import torch.nn as nn import torch.nn.functional as F from torchinfo import summary import mathclass EfficientChannelAttention(nn.Module): # Efficient Channel Attention moduledef __init__(self, c, b1, gamma2):super(EfficientChannelAttention, self).__init__()t int(abs((math.log(c, 2) b) / gamma))k t if t % 2 else t 1self.avg_pool nn.AdaptiveAvgPool2d(1)self.conv1 nn.Conv1d(1, 1, kernel_sizek, paddingint(k/2), biasFalse)self.sigmoid nn.Sigmoid()def forward(self, x):x self.avg_pool(x)# 这里可以对照上一版代码理解每一个函数的作用x self.conv1(x.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)out self.sigmoid(x)return out效果展示 总结 ECANet参数更少 3 CBAM CBAM注意力机制是由**通道注意力机制channel和空间注意力机制spatial**组成。 先通道注意力后空间注意力的顺序注意力模块 3.1 通道注意力 输入数据对数据分别做最大池化操作和平均池化操作(输出都是batchchannel11)然后使用SENet的方法针对channel进行先降维后升维操作之后将输出的两个结果相加再使用Sigmoid得到通道权重再之后使用View函数恢复**(batchchannel11)**维度和原始数据相乘得到通道注意力结果 通道注意力代码 #1通道注意力机制 class channel_attention(nn.Module):# 初始化, in_channel代表输入特征图的通道数, ratio代表第一个全连接的通道下降倍数def __init__(self, in_channel, ratio4):# 继承父类初始化方法super(channel_attention, self).__init__()# 全局最大池化 [b,c,h,w][b,c,1,1]self.max_pool nn.AdaptiveMaxPool2d(output_size1)# 全局平均池化 [b,c,h,w][b,c,1,1]self.avg_pool nn.AdaptiveAvgPool2d(output_size1)# 第一个全连接层, 通道数下降4倍self.fc1 nn.Linear(in_featuresin_channel, out_featuresin_channel//ratio, biasFalse)# 第二个全连接层, 恢复通道数self.fc2 nn.Linear(in_featuresin_channel//ratio, out_featuresin_channel, biasFalse)# relu激活函数self.relu nn.ReLU()# sigmoid激活函数self.sigmoid nn.Sigmoid()# 前向传播def forward(self, inputs):# 获取输入特征图的shapeb, c, h, w inputs.shape# 输入图像做全局最大池化 [b,c,h,w][b,c,1,1]max_pool self.max_pool(inputs)# 输入图像的全局平均池化 [b,c,h,w][b,c,1,1]avg_pool self.avg_pool(inputs)# 调整池化结果的维度 [b,c,1,1][b,c]max_pool max_pool.view([b,c])avg_pool avg_pool.view([b,c])# 第一个全连接层下降通道数 [b,c][b,c//4]x_maxpool self.fc1(max_pool)x_avgpool self.fc1(avg_pool)# 激活函数x_maxpool self.relu(x_maxpool)x_avgpool self.relu(x_avgpool)# 第二个全连接层恢复通道数 [b,c//4][b,c]x_maxpool self.fc2(x_maxpool)x_avgpool self.fc2(x_avgpool)# 将这两种池化结果相加 [b,c][b,c]x x_maxpool x_avgpool# sigmoid函数权值归一化x self.sigmoid(x)# 调整维度 [b,c][b,c,1,1]x x.view([b,c,1,1])# 输入特征图和通道权重相乘 [b,c,h,w]outputs inputs * xreturn outputs3.2 空间注意力 针对输入数据分别选取数据中最大值所在的维度(batch1h*w)和按照维度进行数据平均操作(batch1hw),然后将两个数据做通道连接(batch2hw),使用卷积操作将channel维度降为1之后对结果取sigmoid得到空间注意力权重和原始数据相乘得到空间注意力结果。 代码 #2空间注意力机制 class spatial_attention(nn.Module):# 初始化卷积核大小为7*7def __init__(self, kernel_size7):# 继承父类初始化方法super(spatial_attention, self).__init__()# 为了保持卷积前后的特征图shape相同卷积时需要paddingpadding kernel_size // 2# 7*7卷积融合通道信息 [b,2,h,w][b,1,h,w]self.conv nn.Conv2d(in_channels2, out_channels1, kernel_sizekernel_size,paddingpadding, biasFalse)# sigmoid函数self.sigmoid nn.Sigmoid()# 前向传播def forward(self, inputs):# 在通道维度上最大池化 [b,1,h,w] keepdim保留原有深度# 返回值是在某维度的最大值和对应的索引x_maxpool, _ torch.max(inputs, dim1, keepdimTrue)# 在通道维度上平均池化 [b,1,h,w]x_avgpool torch.mean(inputs, dim1, keepdimTrue)# 池化后的结果在通道维度上堆叠 [b,2,h,w]x torch.cat([x_maxpool, x_avgpool], dim1)# 卷积融合通道信息 [b,2,h,w][b,1,h,w]x self.conv(x)# 空间权重归一化x self.sigmoid(x)# 输入特征图和空间权重相乘outputs inputs * xreturn outputs3.3 CBAM 将通道注意力模块和空间注意力模块顺序串联得到CBAM模块 代码 class cbam(nn.Module):# 初始化in_channel和ratio4代表通道注意力机制的输入通道数和第一个全连接下降的通道数# kernel_size代表空间注意力机制的卷积核大小def __init__(self, in_channel, ratio4, kernel_size7):# 继承父类初始化方法super(cbam, self).__init__()# 实例化通道注意力机制self.channel_attention channel_attention(in_channelin_channel, ratioratio)# 实例化空间注意力机制self.spatial_attention spatial_attention(kernel_sizekernel_size)# 前向传播def forward(self, inputs):# 先将输入图像经过通道注意力机制x self.channel_attention(inputs)# 然后经过空间注意力机制x self.spatial_attention(x)return x结果 4 展示网络层具体信息 安装包 pip install torchstat使用 from torchstat import stat net cbam(16) stat(net, (16, 256, 256)) # 不需要Batch维度注意力机制后期学习到再持续更新 参考博客 CNN注意力机制 ECANet
http://www.w-s-a.com/news/526122/

相关文章:

  • 内容营销价值wordpress博客优化插件
  • 最优惠的郑州网站建设淘宝网商城
  • 做封面网站企业网站优化服务商
  • 电子商务网站设计是什么蚌埠铁路建设监理公司网站
  • .name后缀的网站做房产网站多少钱
  • 手机上传网站源码网站app封装怎么做
  • 做的网站放在阿里云网站建设投标书范本
  • 做文化传播公司网站wordpress仿简书
  • 什么网站有题目做西宁网站制作哪里好
  • 网站上添加图片的原则优易主机 wordpress
  • 用php做的网站源代码那里有做像美团的网站的
  • 网站建设百科有什么做兼职的网站
  • 创造网站电商网站建设方案道客巴巴
  • 南通设计网站建设wordpress时光轴
  • 郑州做网站企起网站建设 风险
  • 北京市保障性住房建设投资中心网站6大连广告设计与制作公司
  • 建站之星网站模板国内f型网页布局的网站
  • 怎么做网站关键词优化外贸网站 开源
  • 广东公司响应式网站建设设计seo系统是什么
  • 清丰网站建设费用网站建设的前途
  • 网站上那些兼职网页怎么做的北京网页
  • 桂林建站平台哪家好品牌设计公司宣传文案
  • 平面设计和建设网站的区别公司官网静态
  • h5网站建设+案例住房住房和城乡建设部网站
  • 建设股公司网站东莞建设网网上平台
  • 湖州吴兴建设局网站加强网站建设的
  • 茌平做网站公司专业商城网站建设报价
  • 网站结构图怎么画wordpress注册不发送件
  • 个人备案网站可以做论坛吗电商推广方式有哪些
  • 网站建设 自适应国内最近的新闻