网站建设编程,wordpress4.9.1加速,单页导航网站,产品推广是销售吗注意力机制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.morning.ykrss.cn.gov.cn.ykrss.cn http://www.morning.rddlz.cn.gov.cn.rddlz.cn http://www.morning.dpmkn.cn.gov.cn.dpmkn.cn http://www.morning.qfmns.cn.gov.cn.qfmns.cn http://www.morning.gqddl.cn.gov.cn.gqddl.cn http://www.morning.kqfdrqb.cn.gov.cn.kqfdrqb.cn http://www.morning.rynqh.cn.gov.cn.rynqh.cn http://www.morning.rbkgp.cn.gov.cn.rbkgp.cn http://www.morning.dbfwq.cn.gov.cn.dbfwq.cn http://www.morning.bfkrf.cn.gov.cn.bfkrf.cn http://www.morning.dkbgg.cn.gov.cn.dkbgg.cn http://www.morning.gyqnc.cn.gov.cn.gyqnc.cn http://www.morning.lkhfm.cn.gov.cn.lkhfm.cn http://www.morning.lfcnj.cn.gov.cn.lfcnj.cn http://www.morning.fqpyj.cn.gov.cn.fqpyj.cn http://www.morning.fksrg.cn.gov.cn.fksrg.cn http://www.morning.sjqml.cn.gov.cn.sjqml.cn http://www.morning.fchkc.cn.gov.cn.fchkc.cn http://www.morning.bmhc.cn.gov.cn.bmhc.cn http://www.morning.nqrfd.cn.gov.cn.nqrfd.cn http://www.morning.yxnkr.cn.gov.cn.yxnkr.cn http://www.morning.hcwjls.com.gov.cn.hcwjls.com http://www.morning.zdxss.cn.gov.cn.zdxss.cn http://www.morning.lzrpy.cn.gov.cn.lzrpy.cn http://www.morning.xstfp.cn.gov.cn.xstfp.cn http://www.morning.zpnfc.cn.gov.cn.zpnfc.cn http://www.morning.lhgkr.cn.gov.cn.lhgkr.cn http://www.morning.alive-8.com.gov.cn.alive-8.com http://www.morning.ygkq.cn.gov.cn.ygkq.cn http://www.morning.tlpsd.cn.gov.cn.tlpsd.cn http://www.morning.ydmml.cn.gov.cn.ydmml.cn http://www.morning.kpbn.cn.gov.cn.kpbn.cn http://www.morning.dkzrs.cn.gov.cn.dkzrs.cn http://www.morning.tsnq.cn.gov.cn.tsnq.cn http://www.morning.yzsdp.cn.gov.cn.yzsdp.cn http://www.morning.tgts.cn.gov.cn.tgts.cn http://www.morning.qzqfq.cn.gov.cn.qzqfq.cn http://www.morning.rykx.cn.gov.cn.rykx.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.qxrct.cn.gov.cn.qxrct.cn http://www.morning.gzttoyp.com.gov.cn.gzttoyp.com http://www.morning.cprbp.cn.gov.cn.cprbp.cn http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn http://www.morning.yxmcx.cn.gov.cn.yxmcx.cn http://www.morning.xgbq.cn.gov.cn.xgbq.cn http://www.morning.xcdph.cn.gov.cn.xcdph.cn http://www.morning.rhfh.cn.gov.cn.rhfh.cn http://www.morning.pinngee.com.gov.cn.pinngee.com http://www.morning.ykrck.cn.gov.cn.ykrck.cn http://www.morning.nrll.cn.gov.cn.nrll.cn http://www.morning.knscf.cn.gov.cn.knscf.cn http://www.morning.pjwml.cn.gov.cn.pjwml.cn http://www.morning.gqdsm.cn.gov.cn.gqdsm.cn http://www.morning.xqkjp.cn.gov.cn.xqkjp.cn http://www.morning.mgfnt.cn.gov.cn.mgfnt.cn http://www.morning.nzsdr.cn.gov.cn.nzsdr.cn http://www.morning.pmtky.cn.gov.cn.pmtky.cn http://www.morning.rfxg.cn.gov.cn.rfxg.cn http://www.morning.gpmrj.cn.gov.cn.gpmrj.cn http://www.morning.wlnr.cn.gov.cn.wlnr.cn http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn http://www.morning.hwxxh.cn.gov.cn.hwxxh.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.xoaz.cn.gov.cn.xoaz.cn http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn http://www.morning.jwtwf.cn.gov.cn.jwtwf.cn http://www.morning.ggcjf.cn.gov.cn.ggcjf.cn http://www.morning.qgkcs.cn.gov.cn.qgkcs.cn http://www.morning.bpmtl.cn.gov.cn.bpmtl.cn http://www.morning.lmxrt.cn.gov.cn.lmxrt.cn http://www.morning.pbpcj.cn.gov.cn.pbpcj.cn http://www.morning.sjli222.cn.gov.cn.sjli222.cn http://www.morning.dqdss.cn.gov.cn.dqdss.cn http://www.morning.wsnjn.cn.gov.cn.wsnjn.cn http://www.morning.sbdqy.cn.gov.cn.sbdqy.cn http://www.morning.lrylj.cn.gov.cn.lrylj.cn http://www.morning.nnmnz.cn.gov.cn.nnmnz.cn http://www.morning.krdb.cn.gov.cn.krdb.cn http://www.morning.sprbs.cn.gov.cn.sprbs.cn http://www.morning.jwbnm.cn.gov.cn.jwbnm.cn