深度学习论文: NAM: Normalization-based Attention Module及其PyTorch实现
发布时间
阅读量:
阅读量
深度学习论文:NAM(基于归一化的注意力模块)及其在PyTorch中的实现
1 概述
NAM作为一种高效、轻量级的注意力机制。
- 基于CBAM模块整合的设计下重构了通道和空间注意力子模块。
- 每个网络块末尾集成一个NAM模块;其中残差网络将其置于残差结构尾部。
- 通过权重贡献度评估改进了注意力机制;而批归一化中的比例因子则用标准差量化权重重要性;这样就无需额外引入SE、BAM或CBAM中的全连接层或卷积层。
2 NAM
2-1 channel attention
基于通道注意子模块,在批归一化(BN)中采用比例因子来计算通道的方差,并强调其重要性

2-2 spatial attention
在空间注意子模块中,将BN缩放因子施加于空间维度以评估像素的重要性,并将其命名为pixel normalization

PyTorch代码:
import torch
import torch.nn as nn
class NAM(nn.Module):
def __init__(self, channels, t=16):
super(NAM, self).__init__()
self.channels = channels
self.bn2 = nn.BatchNorm2d(self.channels, affine=True)
def forward(self, x):
residual = x
x = self.bn2(x)
weight_bn = self.bn2.weight.data.abs() / torch.sum(self.bn2.weight.data.abs())
x = x.permute(0, 2, 3, 1).contiguous()
x = torch.mul(weight_bn, x)
x = x.permute(0, 3, 1, 2).contiguous()
x = torch.sigmoid(x) * residual #
return x
代码解读
3 Experiment

全部评论 (0)
还没有任何评论哟~
