卷积神经网络中的自我注意

简介: 卷积神经网络中的自我注意

最近我在自己训练的墙体检测的网络中添加了自注意力,这提高了墙分割的dice分数。我写这篇短文是为了总结cnn的自注意力机制,主要是为了以后可以回顾一下我做了什么,但我也希望对你们有用。

为什么Self-Attention

这篇文章描述了CNN的自注意力。对于这种自注意力机制,它可以在而不增加计算成本的情况下增加感受野。

它是如何工作的

对前一隐含层的特征进行重塑,使之:

640.png

其中,C是通道的数量,N是所有其他维度的乘积(稍后我们将看到代码)

对x进行1x1卷积,得到f, g, h。这将改变通道的数量从C到C*:

640.png

640.png

计算f(x)和g(x)中像素位置之间的一系列softmax权重:

640.png

这些权重称为“注意力图”,本质上是量化图像中像素j相对于像素i的“重要性”。由于这些权重(β)是在特征集的整个高度和宽度上计算的,因此接收场不再局限于小内核的大小。

将自我注意层的输出计算为:

640.png

640.png

这里,v是另一个1x1卷积的输出。请注意,输出的通道数量与自关注的输入相同。

这是论文中的一张图,这些图将这些操作可视化了

640.png

通常,我们设置:C * = C / 8。

作为最后一步,我们将输入特征x添加到输出的加权中(gamma是另一个可学习的标量参数):

640.png

使用pytorch的实现

以下简短有效的实现方法来自Fast.ai

classSelfAttention(Module):
"Self attention layer for `n_channels`."def__init__(self, n_channels):
self.query,self.key,self.value= [self._conv(n_channels, c) forcin (n_channels//8,n_channels//8,n_channels)]self.gamma=nn.Parameter(tensor([0.]))
def_conv(self,n_in,n_out):
returnConvLayer(n_in, n_out, ks=1, ndim=1, norm_type=NormType.Spectral, act_cls=None, bias=False)
defforward(self, x):
#Notationfromthepaper.
size=x.size()
x=x.view(*size[:2],-1)
f,g,h=self.query(x),self.key(x),self.value(x)
beta=F.softmax(torch.bmm(f.transpose(1,2), g), dim=1)
o=self.gamma*torch.bmm(h, beta) +xreturno.view(*size).contiguous()

第4行:定义三个1x1转换层来创建f(x),g(x),h(x)。这些通常称为查询,键和值(请参见第14行)

第13行:重塑为C x N大小的张量。

第15行:按照上述定义计算softmax注意权重(“ bmm”是pytorch的批矩阵乘法)。

第17行:恢复特征的原始形状

此实现与本文中描述的算法有所不同(但等效),因为它将1x1卷积v(x)和h(x)组合在一起,并且调用为h(x)或“值”。组合的1x1转换层具有C个输入通道和C个输出通道。此实现与本文中的算法等效,因为学习两个1x1转换层等效于学习一个具有兼容大小的转换层。

结果测试

通过在UNet块中替换conv层,我在UNet体系结构中使用了自注意力层。自我注意层的引入提高了用于分割墙壁的DICE得分。这是“ Wall Color AI”应用程序中的一个示例:

640.png

目录
相关文章
|
9天前
|
机器学习/深度学习 计算机视觉 Python
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力本文提出了一种简单且高效的卷积神经网络(ConvNets)注意力模块——SimAM。与现有模块不同,SimAM通过优化能量函数推断特征图的3D注意力权重,无需添加额外参数。SimAM基于空间抑制理论设计,通过简单的解决方案实现高效计算,提升卷积神经网络的表征能力。代码已在Pytorch-SimAM开源。
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
1天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
12天前
|
机器学习/深度学习 监控 自动驾驶
卷积神经网络有什么应用场景
【10月更文挑战第23天】卷积神经网络有什么应用场景
15 2
|
12天前
|
机器学习/深度学习 自然语言处理 算法
什么是卷积神经网络
【10月更文挑战第23天】什么是卷积神经网络
20 1
|
15天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
56 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2天前
|
机器学习/深度学习 人工智能 自动驾驶
深入解析深度学习中的卷积神经网络(CNN)
深入解析深度学习中的卷积神经网络(CNN)
9 0
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第32天】本文将介绍深度学习中的一个重要分支——卷积神经网络(CNN),以及其在图像识别领域的应用。我们将通过一个简单的代码示例,展示如何使用Python和TensorFlow库构建一个基本的CNN模型,并对其进行训练和测试。
|
11天前
|
机器学习/深度学习 自然语言处理 TensorFlow
深度学习中的卷积神经网络(CNN)及其应用
【10月更文挑战第26天】在这篇文章中,我们将深入探讨卷积神经网络(CNN)的基本原理、结构和应用。CNN是深度学习领域的一个重要分支,广泛应用于图像识别、语音处理等领域。我们将通过代码示例和实际应用案例,帮助读者更好地理解CNN的概念和应用。
|
13天前
|
机器学习/深度学习 算法 计算机视觉
深度学习与生活:如何利用卷积神经网络识别日常物品
【10月更文挑战第24天】在这篇文章中,我们将探索深度学习如何从理论走向实践,特别是卷积神经网络(CNN)在图像识别中的应用。通过一个简单的示例,我们将了解如何使用CNN来识别日常生活中的物体,如水果和家具。这不仅是对深度学习概念的一次直观体验,也是对技术如何融入日常生活的一次深刻反思。文章将引导读者思考技术背后的哲理,以及它如何影响我们的生活和思维方式。
下一篇
无影云桌面