注意力机制技术总结

简介: 什么是注意力?就是只写有用的,只留下值得关注的部分。对于已经过时的结构或论文,不为了刻意做到“史上最全的...总结”,“全面综述....”,而将其写在文章中,让读者产生这篇文章很有价值的感觉,但实际上看下来,读者很容易被无关紧要的内容、过时的内容、过于详细的内容所耗费精力,而真正重要的内容什么也没学到。什么是真正重要的内容?那就是模块的设计思想,改进思路,具体结构,这样设计的优点,解决了什么问题。这是这篇总结与其它综述的不同之处。


注意力机制在视觉上是非常重要的部分,这方面的综述、总结有很多。为了本文总结的全面性,我基本都看了一遍。然而这些综述要么面面俱到,对所有内容都非常详细地阐述,包括一些非常不常用的,过时的论文或结构;要么没分清重点,有些内容跟论文有关,但跟注意力无关,这些文章也把这些内容总结到里面。


什么是注意力?就是只写有用的,只留下值得关注的部分。对于已经过时的结构或论文,不为了刻意做到“史上最全的...总结”,“全面综述....”,而将其写在文章中,让读者产生这篇文章很有价值的感觉,但实际上看下来,读者很容易被无关紧要的内容、过时的内容、过于详细的内容所耗费精力,而真正重要的内容什么也没学到。


什么是真正重要的内容?那就是模块的设计思想,改进思路,具体结构,这样设计的优点,解决了什么问题。


这是这篇总结与其它综述的不同之处。包括公众号中以往的《池化技术总结》《数据增强方法总结》《特征金字塔技术总结》等一系列总结,都是按照上面提到的这个原则来写的,里面所有的内容,都是值得去认真看的,而不重要的内容一般都只有几句话就带过了。


这篇文章介绍了一些即插即用的注意力模块,一些根据具体任务设计的注意力结构。此外,读者可根据这些论文中所提出的设计思想,改进思路等内容,在自己方向上设计相应的、合适且合理的结构。


STN(2015)


论文原文:Spatial Transformer Networks


这是一篇过时的文章,读者不必了解太多,但它的主要思想却值得写一下。

c0fa06846bfa609aca5f7a4375202d63.png

如上图所示,图像中的一些目标可能存在各种各样的角度,姿态,为了提高模型的泛化能力和鲁棒性,我们希望模型能对各种姿态,扭曲变形的目标,都能有较好的识别检测能力。因此,论文提出了对输入图像进行空间变换(spatial transformer),通过spatial transformer将其在空间上“摆正位置”。


b407c83319d26edb9c2185b75a95499b.png

具体做法如上图所示,类似于SE和CBAM,在网络中间加一个分支,作为空间转换器。关于这个转换器这里不多介绍,了解本文的主要思想即可。

 

OPAM(2017)


论文:Object-Part Attention Model for Fine-grained Image Classifification

这篇论文同样值得一写的是它的主要思想,其主要内容并没有值得去看的地方。

主要思想:对于细粒度图像分类来说,一个大类别下存在几百个小类别,而区分这些小类别的关键,在于目标身上的特征,例如识别数百种鸟类,此时背景信息对于区分不同类型的鸟类基本没有帮助。


为了让模型更加关注到目标所在的区域,对于图像中背景的地方,通过一个图像分类模型,生成saliency map。通过saliency map定位到目标所在的区域,裁剪,重新进入一个新的part-level Attention Model进行识别分类。


93aaa130226aeef5209739b8c8202a60.png

Residual Attention(2017)


论文:Residual Attention Network for Image Classifification

 

论文提出了残差注意力网络,这是一种在“非常深”的结构中采用混合注意力机制的卷积网络。残差注意力网络由多个注意力模块组成,这些模块会产生注意力感知功能。如下图所示,随着模块的深入,来自不同模块的注意力感知功能会自适应地变化。


 20210416214149874.png

注意力模块如下图所示:


20210416214204722.png

注意力模块由两条分支组成,一个是Soft Mask Branch,一个是Trunk Branch。

Trunk Branch是正常卷积结构,Soft Mask Branch是先经过两次max pooling,以便迅速获得更大的感受野,再通过双线性插值,回到input feature map的大小,再经过两次1x1卷积,以及sigmoid归一化。再与Trunk Branch进行融合。


融合的方式若是直接相乘,由于Soft Mask Branch的范围是(0,1],在经过多个堆叠的注意力模块后,feature maps由于多次乘以Soft Mask的值会变得极小,模型的性能会明显下降。因此提出Attention Residual learning来进行融合。


具体的融合方式如下图所示,即增加了残差连接。记住红色框的内容,后面会经常出现。

202104162142314.png

BAM(2018)

论文:BAM: Bottleneck Attention Module


 

具体结构如下图所示。细节内容就不多赘述了,读者看图更能理解,只介绍一个大概:利用了空洞卷积来获取更大的感受野,增加了通道注意力,方式是在feature map上全局最大池化,再降维升维,如右下角所示使用了上面那篇论文中的Attention Residual learning方式来融合。

fe6e442e9121fa063a945398452b6f52.png

CBAM(2018)

论文:CBAM: Convolutional Block Attention Module


 

CBAM同样是使用空间注意力和通道注意力,不过与BAM不同的是,通道注意力并不是像BAM那样融合在空间注意力内再做归一化,而是先后分开进行。


34738439f05bb0577fa04ab7ee2acff9.png

通道注意力的生成方式:先在feature maps上进行全局最大池化和全局平均池化得到两个1维向量,再经过共享的MLP层,再进行相加,sigmoid归一化。


空间注意力的生成方式:在通道上进行最大池化和平均池化,得到两个feature map,经过7x7卷积,得到一个feature map,再BN,sigmoid归一化。


20210416214258889.png

注:这种空间注意力只考虑了局部的信息,在后面CVPR2021的Coordinate Attention中有所改进。

 

Non-Local(2018)


论文:Non-local Neural Networks


卷积操作在每一层获得的感受野十分有限,对于一些长距离的依赖,需要堆叠很多层卷积才能获得,为此,作者提出了Non-Local Block,这种结构使得网络可以直接获得两个位置之间的依赖关系,而不用考虑距离。


具体结构图如下所示:(由于这个模型本是用于时空模型中,因此下方的结构图中包含了时间维度,去掉T便可用于图像)


20210416214318767.png

这种方式来源于transformer,先通过3个不同的1维卷积降维,再各自reshape为HW x512,前两者通过点积进行相似性计算,再归一化作为第三者的加权系数。最后使用1x1卷积升维和残差连接。


这种方式的最大缺点在于进行HW与HW做相似性计算,计算量是H的四次方,因此论文中提出当H=14或7时才使用。后面在GCNet和CCnet中会有所简化并改进。

 

PAN(2018)


论文:Pyramid Attention Network for Semantic Segmentation


1187ceada7d79e7dd6b2ce84b232e9f9.png


该论文针对语义分割引入像素级注意力。主要由两个部分组成:Feature Pyramid Attention (FPA) 和Global Attention Upsample module (GAU)。


FPA在空间金字塔池化的基础上调整而来,与空间金字塔池化不同的是,FPA通过不同大小的卷积来构建金字塔,并在此基础上引入了通道注意力。


 c8e22e6c12677fac6e3a60c2010bede7.pngGAU通过全局池化提供的全局信息作为指引选择low-level特征,这是因为high-level中有着丰富的语义信息,这可以帮助引导low-level的选择,从而达到选择更为精准的分辨率信息。

20210416214344847.png

Squeeze-and-Excitation(2018)


论文:Squeeze-and-Excitation Networks


这个不仅使用简单,对笔者来写这个也简单,先贴出论文中的结构图,再用Coordinate Attention中的一个结构图作为对论文中结构图的解释。


20210416214359625.png

其描述如下:

2021041621441241.png

CCNet(2019)


论文:CCNet: Criss-Cross Attention for Semantic Segmentation


6719ab067fa73abce4a55d6619d8852d.png

论文的主要思想在于从Non-Local的每个都与其它所有位置进行相似性计算变为只计算同一行和同一列的相似性。这样极大地节省了计算量。


具体结构图如下:


85f30cb56855572bef428d0b3fb0e104.png

其中Criss-Cross Attention Module如下左图所示,对于两次loop的示意图如下右图所示,经过两次loop,可获取到任意两个位置的依赖关系


d438dd7f1f492f0a904b4eeea024a9bc.png

GCNet(2019)


论文:GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond

如题所示,GCNet是在将Non-Local简化后与Squeeze-Excitation结合。


如下图所示:作者发现在query的不同点(图中的红点),计算出来的attention map是一样的。


20210416214444476.png

这就说明只需要计算一个点就可以了,其它位置的计算都是多余的,这样做的好处就是计算量极大减少。

20210416214458105.png

GCNet的整体框架如图a所示,简化版的Non-Local如图b所示,GCNet具体结构如图d所示。


GCNet将SE中的全局平均池化用简化版的Non-Local来代替,而SE下方的结构用了Bottleneck来进行transform。这里使用Bottleneck是为了减少参数量,其中r取16。

 

DANet(2019)


论文:Dual Attention Network for Scene Segmentation


论文提出了双注意力网络,由位置注意力模块(Position Attention Module)和通道注意力模块(Channel Attention Module)组成。


整体的结构图如下:

 33000517cf1befab276cb5d5819ff443.png

Position Attention Module和Channel Attention Module的结构图如下所示:这两个模块没什么细节的地方值得讲的,看个图就足以理解。

43fa521f9ede6c9304488c3e1326d303.png

Coordinate Attention(2021)

论文:Coordinate Attention for Effificient Mobile Network Design


这篇论文基于SE和CBAM改进而来,作者认为SE没有考虑空间信息,CBAM通过对每个位置的通道上进行池化,由于经过几层卷积和降采样后的feature maps的每个位置只包含原图的一个局部区域,因此这种做法只考虑了局部区域信息。为此,作者提出了一种新的attention机制--Coordinate Attention。


Coordinate Attention利用两个1D全局池化操作将沿垂直和水平方向的input features分别聚合为两个单独的direction-aware feature maps。 然后将具有嵌入的特定方向信息的这两个特征图分别编码为两个attention map,每个attention map都沿一个空间方向捕获输入特征图的远距离依存关系。 位置信息因此可以被保存在所生成的attention map中。 然后通过乘法将两个attention map都应用于input feature maps,以强调注意区域的表示。

20210416214534369.png

具体结构如图c所示,简单说来,Coordinate Attention是通过在水平方向和垂直方向上进行平均池化,再进行transform对空间信息编码,最后把空间信息通过在通道上加权的方式融合。

 

总结:本文介绍了一些注意力模块,虽然文字描述的比较少,但给出的结构图足以理解其主要操作。除了以上的内容,此外还包括强注意力,但不是特别常见,本文未对其进行总结。


相关文章
|
4月前
|
机器学习/深度学习
YOLOv8改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
YOLOv8改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
310 1
|
2月前
|
机器学习/深度学习 图计算 计算机视觉
【YOLOv8改进 - 注意力机制】 CascadedGroupAttention:级联组注意力,增强视觉Transformer中多头自注意力机制的效率和有效性
YOLO目标检测专栏探讨了Transformer在视觉任务中的效能与计算成本问题,提出EfficientViT,一种兼顾速度和准确性的模型。EfficientViT通过创新的Cascaded Group Attention(CGA)模块减少冗余,提高多样性,节省计算资源。在保持高精度的同时,与MobileNetV3-Large相比,EfficientViT在速度上有显著提升。论文和代码已公开。CGA通过特征分割和级联头部增加注意力多样性和模型容量,降低了计算负担。核心代码展示了CGA模块的实现。
|
3月前
|
机器学习/深度学习 自然语言处理 机器人
注意力机制详解(二)
注意力机制(Attention Mechanism)对比分析:无Attention模型中,Encoder-Decoder框架处理文本序列时,输入信息被编码为单一的中间语义表示,导致每个目标单词生成时使用相同编码,忽视了输入序列中各单词的不同影响。引入Attention模型后,每个目标单词根据输入序列动态分配注意力权重,更好地捕捉输入相关性,尤其适用于长序列,避免信息丢失。Self-Attention则进一步在序列内部建立联系,用于理解不同部分间的关系,常见于Transformer和BERT等模型中。
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【YOLOv8改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
YOLO目标检测专栏介绍了SimAM,一种无参数的CNN注意力模块,基于神经科学理论优化能量函数,提升模型表现。SimAM通过计算3D注意力权重增强特征表示,无需额外参数。文章提供论文链接、Pytorch实现代码及详细配置,展示了如何在目标检测任务中应用该模块。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
注意力机制详解(一)
注意力机制是受人类认知过程启发的一种深度学习技术,它允许模型动态地聚焦于输入的不同部分,根据上下文分配“注意力”。这种机制最早在序列到序列模型中提出,解决了长距离依赖问题,增强了模型理解和处理复杂数据的能力。基本的注意力计算涉及查询(Q)、键(K)和值(V),通过不同方式(如点积、拼接等)计算相关性并应用softmax归一化,得到注意力权重,最后加权组合值向量得到输出。自注意力是注意力机制的一种形式,其中Q、K和V通常是相同的。在自然语言处理(NLP)中,注意力机制广泛应用在Transformer和预训练模型如BERT中,显著提升了模型的表现。
|
2月前
|
机器学习/深度学习 自然语言处理 搜索推荐
深度学习中的自注意力机制:原理与应用
在深度学习领域,自注意力机制(Self-Attention Mechanism)已经成为一种强大的工具,它允许模型在处理序列数据时更加高效和灵活。本文将深入探讨自注意力机制的工作原理、数学基础以及在不同应用场景下的表现。我们将通过具体案例分析,展示自注意力如何提升神经网络对长距离依赖的捕捉能力,以及它在自然语言处理(NLP)、计算机视觉(CV)等领域的应用成效。
176 0
|
2月前
|
机器学习/深度学习 计算机视觉
【YOLOv10改进-注意力机制】CoordAttention: 用于移动端的高效坐标注意力机制
YOLOv10专栏探讨了将位置信息融入通道注意力的创新方法,提出“坐标注意力”机制,改善移动网络性能。该机制通过两个1D特征编码捕捉空间依赖并保持位置细节,生成增强对象表示的注意力图。简单易整合到现有网络如MobileNet,几乎无额外计算成本,且在ImageNet及目标检测等任务中表现优越。实现代码展示了CoordAtt模块的工作流程。更多详情和配置见链接。
|
2月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv10改进-注意力机制】Polarized Self-Attention: 极化自注意力,双重注意力机制
YOLOv10引入了极化自注意(PSA)块,结合通道和空间注意力,降低信息损失。PSA通过极化过滤保持高分辨率,并用增强处理非线性分布。在2D姿态估计和分割任务上提升1-2点精度,相比基线提升2-4点。代码示例展示了PSA模块如何集成到模型中。更多配置详情见相关链接。
|
3月前
|
机器学习/深度学习 自然语言处理 算法
YOLOv5改进 | 注意力机制 | 添加三重注意力机制 TripletAttention【完整代码】
本文介绍了三重注意力机制在YOLOv5目标检测中的应用,这是一种轻量级方法,通过三分支结构捕获跨维度交互来计算注意力权重,几乎不增加计算开销。文章详细阐述了三重注意力的原理,包括全局、组间和组内三个层次的注意力计算,并提供了将TripletAttention模块添加到YOLOv5网络的教程。作者提供了代码实现和yaml配置文件的修改指导,以及在训练脚本中设置配置文件路径的步骤。完整代码附在文章末尾,适合初学者实践。此外,文章还鼓励读者探索在不同位置添加三重注意力以进一步优化模型性能。
|
3月前
|
机器学习/深度学习 计算机视觉
【保姆级教程|YOLOv8添加注意力机制】【2】在C2f结构中添加ShuffleAttention注意力机制并训练
【保姆级教程|YOLOv8添加注意力机制】【2】在C2f结构中添加ShuffleAttention注意力机制并训练