注意力机制——Non-local Networks(NLNet)
Non-local Networks(NLNet):NLNet是一种非局部注意力模型,通过对整个输入空间的特征进行加权求和,以捕捉全局信息。
传统的卷积神经网络(CNN)在处理图像时,只考虑了局部区域内的像素信息,忽略了全局信息之间的相互作用。NLNets通过引入非局部块来解决这个问题,该块包括一个自注意力模块,用于学习像素之间的相互作用。
自注意力模块采用注意力机制来计算每个像素与其他像素之间的相互依赖关系,并使用这些依赖关系来加权聚合所有像素的特征表示。这种全局交互方式使得模型能够在像素之间建立远距离的依赖关系,从而提高了模型的表示能力。
NonLocalBlock模块pytorch实现:
import torch
import torch.nn as nn
import torch.nn.functional as Fclass NonLocalBlock(nn.Module):def __init__(self, in_channels, inter_channels=None):super(NonLocalBlock, self).__init__()self.in_channels = in_channelsself.inter_channels = inter_channels or in_channels // 2# 定义 g、theta、phi、out 四个卷积层self.g = nn.Conv2d(in_channels=self.in_channels, out_channels=self.inter_channels, kernel_size=1, stride=1, padding=0)self.theta = nn.Conv2d(in_channels=self.in_channels, out_channels=self.inter_channels, kernel_size=1, stride=1, padding=0)self.phi = nn.Conv2d(in_channels=self.in_channels, out_channels=self.inter_channels, kernel_size=1, stride=1, padding=0)self.out = nn.Conv2d(in_channels=self.inter_channels, out_channels=self.in_channels, kernel_size=1, stride=1, padding=0)# 定义 softmax 层,用于将 f_ij 进行归一化self.softmax = nn.Softmax(dim=-1)def forward(self, x):batch_size = x.size(0)# 计算 g(x)g_x = self.g(x).view(batch_size, self.inter_channels, -1)g_x = g_x.permute(0, 2, 1)# 计算 theta(x)theta_x = self.theta(x).view(batch_size, self.inter_channels, -1)theta_x = theta_x.permute(0, 2, 1)# 计算 phi(x)phi_x = self.phi(x).view(batch_size, self.inter_channels, -1)# 计算 f_ijf = torch.matmul(theta_x, phi_x)# 对 f_ij 进行归一化f_div_C = self.softmax(f)# 计算 y_iy = torch.matmul(f_div_C, g_x)y = y.permute(0, 2, 1).contiguous()y = y.view(batch_size, self.inter_channels, *x.size()[2:])# 计算 z_iy = self.out(y)z = y + xreturn z
NonLocalBlock模块在网络中添加:
class NLNet(nn.Module):def __init__(self, num_classes=10):super(NLNet, self).__init__()self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)self.bn1 = nn.BatchNorm2d(64)self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)self.nonlocal1 = NonLocalBlock(64)self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)self.bn2 = nn.BatchNorm2d(128)self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)self.nonlocal2 = NonLocalBlock(128)self.conv3 = nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1)self.bn3 = nn.BatchNorm2d(256)self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)self.fc = nn.Linear(256*4*4, num_classes)def forward(self, x):x = self.conv1(x)x = F.relu(self.bn1(x))x = self.pool1(x)x = self.nonlocal1(x)x = self.conv2(x)x = F.relu(self.bn2(x))x = self.pool2(x)x = self.nonlocal2(x)x = self.conv3(x)x = F.relu(self.bn3(x))x = self.pool3(x)x = x.view(-1, 256*4*4)x = self.fc(x)return x
注意力机制——Non-local Networks(NLNet)相关推荐
- 【注意力机制】Squeeze-and-Excitation Networks论文理解
摘要 卷积操作: 卷积操作是卷积神经网络(CNNs)的核心构造块,它通过融合每一层局部接受域(感受野)内的空间和信道信息使网络构建信息特征.大量先前的研究已经调查了这种关系的空间成分,试图通过 ...
- 注意力机制——Spatial Transformer Networks(STN)
Spatial Transformer Networks(STN)是一种空间注意力模型,可以通过学习对输入数据进行空间变换,从而增强网络的对图像变形.旋转等几何变换的鲁棒性.STN 可以在端到端的训练 ...
- 注意力机制:认知模型与计算机应用
注意力机制:认知模型与计算机应用 "注意力机制"在风靡计算机神经网络设计之前,首先是一种被广泛接受的人类认知方法.本调研文稿将首先从人类认知出发,讨论几种经典的人类注意力模型,和人 ...
- 常见的两种注意力机制
为什么需要注意力机制 seq2seq模型已经在机器翻译.自然语言处理领域取得了很大的进步,基于贝叶斯条件概率公式,seq2seq由一个编码器和一个解码器构成,编码器将源序列A编码成一个固定长度的特征向 ...
- 【深度学习】(8) CNN中的通道注意力机制(SEnet、ECAnet),附Tensorflow完整代码
各位同学好,今天和大家分享一下attention注意力机制在CNN卷积神经网络中的应用,重点介绍三种注意力机制,及其代码复现. 在我之前的神经网络专栏的文章中也使用到过注意力机制,比如在MobileN ...
- (C1-2)注意力机制学习(TBD)
注意力机制 图像处理注意力机制Attention汇总(附代码) ⭐ 暂时没有要深入学习,只是用到了SENet,不太明白为什么它是一种注意力机制方法,于是去检索学习了下,后续有必要再补充. 根据注意力权 ...
- 注意力机制(SE, ECA, CBAM, SKNet, scSE, Non-Local, GCNet, ASFF) Pytorch代码
注意力机制 1 SENet 2 ECANet 3 CBAM 3.1 通道注意力 3.2 空间注意力 3.3 CBAM 4 展示网络层具体信息 5 SKNet 6 scSE 7 Non-Local Ne ...
- 注意力机制(Attention Mechanism)-SENet
引言 神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案.在神经网络学习中,一般而言模型的参 ...
- 深度学习中的注意力机制(SENet、ECA、CBAM)pytorch验证
先验证 SENet 介绍一下:SE注意力机制(Squeeze-and-Excitation Networks),它是一种通道类型的注意力机制,就是在通道维度上增加注意力机制,主要内容是是squeeze ...
最新文章
- MPB:中大李文均组-河口水体和沉积物中微生物的分离培养与鉴定
- Memcached原理深度分析详解
- 腾讯 Web UI 解决方案 QMUI Web —— 探索与沉淀
- java增强型for报错_Java基础——增强for循环
- C# 关于密码加密 (转载)
- python计算凸包并绘制凸包曲线
- Proxy Hosted Virtual
- 模拟扑克牌随机选择(Java)
- 三星Bixby如此人性 小娜的下一步就是善解人意
- python全栈薪资这么高,你知道大厂面试都问什么吗?
- 机器学习实战应用案例100篇(十二)-樽海鞘算法从原理到实战应用案例
- C++判断一个数是否是质数(极简版)
- 在线制作流程图、思维导图(基于ProcessOn平台)
- MP3参数,格式,术语有关一切内容详解
- 公主救骑士---地下城游戏_leetcode
- JavaWeb查漏补缺
- 在EXCEL表格中如何快速换行
- 读书和不读书的人,最大的区别是什么?--林语堂
- Discuz蜘蛛统计seo插件-蜘蛛统计插件
- B端产品客户画像的一点感悟