YOLOv5改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

简介: YOLOv5改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

一、本文介绍

本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制,它通过三个不同的视角来分析输入的数据,就好比三个人从不同的角度来观察同一幅画,然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入了一种新的注意力模块,这个模块包含三个分支,分别关注图像的不同维度。比如说,一个分支可能专注于图像的宽度,另一个分支专注于高度,第三个分支则聚焦于图像的深度,即色彩和纹理等特征。这样一来,网络就能够更全面地理解图像内容,就像是得到了一副三维眼镜,能够看到图片的立体效果一样。

image.png

推荐指数:⭐⭐⭐

专栏回顾:YOLOv5改进专栏——持续复现各种顶会内容——内含100+创新

二、Triplet Attention机制原理

image.png

2.1 Triplet Attention的基本原理

三重注意力(Triplet Attention)的基本原理是利用三支结构捕获输入数据的跨维度交互,从而计算注意力权重。这个方法能够构建输入通道或空间位置之间的相互依赖性,而且计算代价小。三重注意力由三个分支组成,每个分支负责捕获空间维度H或W与通道维度C之间的交互特征。通过对每个分支中的输入张量进行排列变换,然后通过Z池操作和一个大小为k×k的卷积层,生成注意力权重。这些权重是通过一个S形激活层生成的,然后应用于排列变换后的输入张量,再变换回原来的输入形状

三重注意力(Triplet Attention)的主要改进点包括:

  1. 跨维度的注意力权重计算: 通过一个创新的三支结构捕获通道、高度、宽度三个维度之间的交互关系来计算注意力权重。
  2. 旋转操作和残差变换: 通过旋转输入张量和应用残差变换来建立不同维度间的依赖,这是三重注意力机制中的关键步骤。
  3. 维度间依赖性的重要性: 强调在计算注意力权重时,捕获跨维度依赖性的重要性,这是三重注意力的核心直觉和设计理念。

下面的图片是三重注意力的一个抽象表示图,展示了三个分支如何捕获跨维度交互。图中的每个子图表示三重注意力中的一个分支:

image.png

1. 分支(a): 这个分支直接处理输入张量,没有进行旋转,然后通过残差变换来提取特征。

2. 分支(b): 这个分支首先沿着宽度(W)和通道(C)的维度旋转输入张量,然后进行残差变换。

3. 分支(c): 这个分支沿着高度(H)和通道(C)的维度旋转输入张量,之后同样进行残差变换。

总结:通过这样的设计,三重注意力模型能够有效地捕获输入张量中的空间和通道维度之间的交互关系。这种方法使模型能够构建通道与空间位置之间的相互依赖性,提高模型对特征的理解能力。

2.2 Triplet Attention和其它简单注意力机制的对比

下面的图片是论文中三重注意力机制和其它注意力机制的一个对比大家有兴趣可以看看,横向扩展以下自己的知识库。

image.png

这张图片是一幅对比不同注意力模块的图示,其中包括:

1.Squeeze Excitation (SE) Module: 这个模块使用全局平均池化 (Global Avg Pool) 生成通道描述符,接着通过两个全连接层(1x1 Conv),中间使用ReLU激活函数,最后通过Sigmoid函数生成每个通道的权重。

2. Convolutional Block Attention Module (CBAM): 首先使用全局平均池化和全局最大池化(GAP + GMP)结合,再通过一个卷积层和ReLU激活函数,最后经过另一个卷积层和Sigmoid函数生成注意力权重。

3. Global Context (GC) Module: 从一个1x1卷积层开始,经过Softmax函数进行归一化,接着进行另一个1x1卷积,然后使用LayerNorm和最终的1x1卷积,通过广播加法结合原始特征图。

4. Triplet Attention (我们的方法): 分为三个分支,每个分支进行不同的处理:通道池化后的7x7卷积,Z池化,再接一个7x7卷积,然后是批量归一化和Sigmoid函数。每个分支都有一个Permute操作来调整维度。最后,三个分支的结果通过平均池化聚合起来生成最终的注意力权重。

每种模块都设计用于处理特征图(C x H x W),其中C是通道数,H是高度,W是宽度。这些模块通过不同方式计算注意力权重,增强网络对特征的重要部分的关注度,从而在各种视觉任务中提高性能。图片中的符号⊗代表矩阵乘法,⊕代表广播元素级加法。

2.3 Triplet Attention的实现流程

下面的图片是三重注意力(Triplet Attention)的具体实现流程图。图中详细展示了三个分支如何处理输入张量,并最终合成三重注意力。下面是对这个过程的描述:

image.png

  1. 上部分支: 负责计算通道维度C和空间维度W的注意力权重。这个分支对输入张量进行Z池化(Z-Pool)操作,然后通过一个卷积层(Conv),接着用Sigmoid函数生成注意力权重。
  2. 中部分支: 负责捕获通道维度C与空间维度H和W之间的依赖性。这个分支首先进行相同的Z池化和卷积操作,然后同样通过Sigmoid函数生成注意力权重。
  3. 下部分支: 用于捕获空间维度之间的依赖性。这个分支保持输入的身份(Identity,即不改变输入),执行Z池化和卷积操作,之后也通过Sigmoid函数生成注意力权重。

每个分支在生成注意力权重后,会对输入进行排列(Permutation),然后将三个分支的输出进行平均聚合(Avg),最终得到三重注意力输出。

这种结构通过不同的旋转和排列操作,能够综合不同维度上的信息,更好地捕获数据的内在特征,同时这种方法在计算上是高效的,并且可以作为一个模块加入到现有的网络架构中,增强网络对复杂数据结构的理解和处理能力。

Snu77
+关注
目录
打赏
0
0
0
0
36
分享
相关文章
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
CNN中的注意力机制综合指南:从理论到Pytorch代码实现
注意力机制已成为深度学习模型的关键组件,尤其在卷积神经网络(CNN)中发挥了重要作用。通过使模型关注输入数据中最相关的部分,注意力机制显著提升了CNN在图像分类、目标检测和语义分割等任务中的表现。本文将详细介绍CNN中的注意力机制,包括其基本概念、不同类型(如通道注意力、空间注意力和混合注意力)以及实际实现方法。此外,还将探讨注意力机制在多个计算机视觉任务中的应用效果及其面临的挑战。无论是图像分类还是医学图像分析,注意力机制都能显著提升模型性能,并在不断发展的深度学习领域中扮演重要角色。
190 10
聊一聊计算机视觉中常用的注意力机制以及Pytorch代码实现
本文介绍了几种常用的计算机视觉注意力机制及其PyTorch实现,包括SENet、CBAM、BAM、ECA-Net、SA-Net、Polarized Self-Attention、Spatial Group-wise Enhance和Coordinate Attention等,每种方法都附有详细的网络结构说明和实验结果分析。通过这些注意力机制的应用,可以有效提升模型在目标检测任务上的性能。此外,作者还提供了实验数据集的基本情况及baseline模型的选择与实验结果,方便读者理解和复现。
249 0
聊一聊计算机视觉中常用的注意力机制以及Pytorch代码实现
【YOLOv10改进-注意力机制】 MSDA:多尺度空洞注意力 (论文笔记+引入代码)
YOLO目标检测专栏探讨了ViT的改进,提出DilateFormer,它结合多尺度扩张注意力(MSDA)来平衡计算效率和关注域大小。MSDA利用局部稀疏交互减少冗余,通过不同头部的扩张率捕获多尺度特征。DilateFormer在保持高性能的同时,计算成本降低70%,在ImageNet-1K、COCO和ADE20K任务上取得领先结果。YOLOv8引入了MultiDilatelocalAttention模块,用于实现膨胀注意力。更多详情及配置见相关链接。
YOLOv8改进 | 注意力机制 | 添加适用于遥感图像的LSKblock注意力——【二次创新+完整代码】
遥感目标检测的研究主要集中在改进方向边界框的表示上,而忽略了遥感场景中独特的先验知识。 这类先验知识对于准确检测微小目标至关重要,因为这些目标往往需要更大的上下文信息才能被正确识别。提出的 LSKNet 可以动态调整其大的空间感受野,以更好地模拟不同目标的距离上下文,从而提高遥感目标检测的精度。 LSKNet 是第一个在遥感目标检测中探索大选择性核机制的方法。
【保姆级教程|YOLOv8添加注意力机制】【2】在C2f结构中添加ShuffleAttention注意力机制并训练
【保姆级教程|YOLOv8添加注意力机制】【2】在C2f结构中添加ShuffleAttention注意力机制并训练
YOLOv5改进 | 注意力机制 | 添加三重注意力机制 TripletAttention【完整代码】
本文介绍了三重注意力机制在YOLOv5目标检测中的应用,这是一种轻量级方法,通过三分支结构捕获跨维度交互来计算注意力权重,几乎不增加计算开销。文章详细阐述了三重注意力的原理,包括全局、组间和组内三个层次的注意力计算,并提供了将TripletAttention模块添加到YOLOv5网络的教程。作者提供了代码实现和yaml配置文件的修改指导,以及在训练脚本中设置配置文件路径的步骤。完整代码附在文章末尾,适合初学者实践。此外,文章还鼓励读者探索在不同位置添加三重注意力以进一步优化模型性能。
注意力机制(二)(自注意力机制)
看一个物体的时候,我们倾向于一些重点,把我们的焦点放到更重要的信息上
注意力机制(二)(自注意力机制)
YOLOv8改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附完整代码+小白必备】
在这个教程中,作者介绍了如何在YOLOv8图像识别模型中集成DoubleAttention模块,以提升模型捕捉长距离关系的效率。DoubleAttention通过全局和局部注意力模块捕获图像的全局和局部信息。教程详细阐述了DoubleAttention的工作原理,并提供了相应的代码实现。读者将学习到如何在YOLOv8的网络结构中添加这一组件,并给出了完整的代码示例。此外,还分享了GFLOPs的计算,以及鼓励读者尝试在不同位置添加注意力机制作为进阶练习。完整代码和更多详情可在提供的链接中获取。