【YOLOv8改进 - 注意力机制】Focused Linear Attention :全新的聚焦线性注意力模块

简介: YOLOv8专栏探讨了该目标检测算法的创新改进,包括使用聚焦线性注意力模块,解决了Transformer在视觉任务中的效率和表达力问题。该模块增强自注意力,提高焦点能力和特征多样性,保持线性复杂度。文章提供了实证证据证明其在多个基准上的性能提升,并在GitHub上发布了代码。论文和更多实战案例链接见文中。

YOLOv8目标检测创新改进与实战案例专栏

专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLOv8基础解析+创新改进+实战案例

介绍

摘要

自注意力的二次计算复杂性在将Transformer模型应用于视觉任务时一直是一个持久的挑战。相比之下,线性注意力通过精心设计的映射函数来近似Softmax操作,提供了更高效的替代方案,其计算复杂性为线性。然而,目前的线性注意力方法要么遭受显著的性能下降,要么因映射函数引入了额外的计算开销。在本文中,我们提出了一种新颖的聚焦线性注意力模块,以实现高效率和高表现力。具体来说,我们首先从聚焦能力和特征多样性两个角度分析了线性注意力性能下降的因素。为克服这些限制,我们引入了一个简单但有效的映射函数和一个高效的秩恢复模块,以增强自注意力的表现力,同时保持低计算复杂性。大量实验表明,我们的线性注意力模块适用于各种先进的视觉Transformer,并在多个基准测试上实现了一致的性能提升。代码可在 https://github.com/LeapLabTHU/FLatten-Transformer 获取。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

Focused Linear Attention技术是一种用于改进自注意力机制的方法 。

  1. 焦点能力(Focus Ability):传统的自注意力机制(如Softmax注意力)在计算注意力权重时通常会产生相对平滑的分布,导致模型难以集中关注到最重要的特征。Focused Linear Attention通过引入专门设计的映射函数,调整查询和键的特征方向,使得注意力权重更易区分。这样可以使模型更加集中地关注到重要的特征,提高了焦点能力。

  2. 特征多样性(Feature Diversity):另一个问题是线性注意力可能会降低特征的多样性,因为注意力矩阵的秩可能会减小。为了解决这一问题,Focused Linear Attention引入了秩恢复模块,通过应用额外的深度卷积来恢复注意力矩阵的秩,从而保持不同位置的输出特征多样化。

  3. 线性复杂度(Linear Complexity):与Softmax注意力相比,Focused Linear Attention具有线性复杂度,使得可以更高效地处理大规模数据,扩展感受野到更大的区域,同时保持相同的计算量。这使得模型能够更好地捕捉长距离的依赖关系,同时在各种视觉任务中表现出色。

核心代码

class FocusedLinearAttention(nn.Module):
    def __init__(self, dim, num_patches, num_heads=8, qkv_bias=False, qk_scale=None, attn_drop=0., proj_drop=0., sr_ratio=1,
                 focusing_factor=3, kernel_size=5):
        super().__init__()
        assert dim % num_heads == 0, f"dim {dim} should be divided by num_heads {num_heads}."

        # 初始化参数
        self.dim = dim
        self.num_heads = num_heads
        head_dim = dim // num_heads

        # 定义查询q的线性层
        self.q = nn.Linear(dim, dim, bias=qkv_bias)
        # 定义键k和值v的线性层,输出维度是2倍的dim
        self.kv = nn.Linear(dim, dim * 2, bias=qkv_bias)
        # 定义注意力的dropout层
        self.attn_drop = nn.Dropout(attn_drop)
        # 定义输出投影的线性层
        self.proj = nn.Linear(dim, dim)
        # 定义输出投影的dropout层
        self.proj_drop = nn.Dropout(proj_drop)

        # 缩小比例参数
        self.sr_ratio = sr_ratio
        if sr_ratio > 1:
            # 定义卷积层用于缩小特征图的大小
            self.sr = nn.Conv2d(dim, dim, kernel_size=sr_ratio, stride=sr_ratio)
            # 定义层归一化层
            self.norm = nn.LayerNorm(dim)

        # 聚焦因子
        self.focusing_factor = focusing_factor
        # 定义深度可分离卷积层
        self.dwc = nn.Conv2d(in_channels=head_dim, out_channels=head_dim, kernel_size=kernel_size,
                             groups=head_dim, padding=kernel_size // 2)
        # 定义缩放参数
        self.scale = nn.Parameter(torch.zeros(size=(1, 1, dim)))
        # 定义位置编码参数
        self.positional_encoding = nn.Parameter(torch.zeros(size=(1, num_patches // (sr_ratio * sr_ratio), dim)))
        print('Linear Attention sr_ratio{} f{} kernel{}'.format(sr_ratio, focusing_factor, kernel_size))

task与yaml配置

详见: https://blog.csdn.net/shangyanaf/article/details/140457255

相关文章
|
5月前
|
机器学习/深度学习 计算机视觉 网络架构
改进YOLOv8:添加CBAM注意力机制(涨点明显)
改进YOLOv8:添加CBAM注意力机制(涨点明显)
3499 1
|
5月前
|
机器学习/深度学习 Ruby
YOLOv5改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
YOLOv5改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
311 0
|
5月前
|
机器学习/深度学习 Ruby
YOLOv8改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
YOLOv8改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
653 0
|
14天前
|
机器学习/深度学习 自然语言处理 数据建模
三种Transformer模型中的注意力机制介绍及Pytorch实现:从自注意力到因果自注意力
本文深入探讨了Transformer模型中的三种关键注意力机制:自注意力、交叉注意力和因果自注意力,这些机制是GPT-4、Llama等大型语言模型的核心。文章不仅讲解了理论概念,还通过Python和PyTorch从零开始实现这些机制,帮助读者深入理解其内部工作原理。自注意力机制通过整合上下文信息增强了输入嵌入,多头注意力则通过多个并行的注意力头捕捉不同类型的依赖关系。交叉注意力则允许模型在两个不同输入序列间传递信息,适用于机器翻译和图像描述等任务。因果自注意力确保模型在生成文本时仅考虑先前的上下文,适用于解码器风格的模型。通过本文的详细解析和代码实现,读者可以全面掌握这些机制的应用潜力。
29 3
三种Transformer模型中的注意力机制介绍及Pytorch实现:从自注意力到因果自注意力
|
3月前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进 - 注意力机制】c2f结合CBAM:针对卷积神经网络(CNN)设计的新型注意力机制
【YOLOv8改进 - 注意力机制】c2f结合CBAM:针对卷积神经网络(CNN)设计的新型注意力机制
|
3月前
|
机器学习/深度学习 自然语言处理 并行计算
【YOLOv8改进 -注意力机制】Mamba之MLLAttention :基于Mamba和线性注意力Transformer的模型
YOLOv8专栏探讨了该目标检测模型的创新改进,包括使用Mamba模型的线性注意力Transformer变体,称为MLLA。Mamba的成功关键在于遗忘门和块设计,MLLA结合了这些优点,提升了视觉任务的性能。文章提供全面分析,并提出MLLA模型,其在效率和准确性上超过多种视觉模型。论文和代码可在提供的链接中找到。MLLA Block的代码示例展示了如何整合关键组件以实现高效运算。更多配置详情见相关链接。
|
3月前
|
机器学习/深度学习 测试技术 网络架构
【YOLOv10改进-注意力机制】MSCAAttention多尺度卷积注意力
YOLOv10专栏介绍了一种新的卷积网络架构SegNeXt,它在语义分割任务中展现出优于Transformer模型的效率和效果。SegNeXt通过名为Multi-Scale Convolutional Attention (MSCA)的组件,结合局部信息聚合、多尺度上下文捕获和通道关系模拟,提升了性能。在多个数据集上,SegNeXt以较少参数实现了超过现有SOTA的性能,特别是在Pascal VOC 2012上,以1/10的参数量达到90.6%的mIoU。YOLOv10引入了MSCA模块,用于增强目标检测的上下文关注。相关代码和配置详情可在链接中找到。
|
3月前
|
机器学习/深度学习 计算机视觉
【YOLOv10改进-注意力机制】 MSDA:多尺度空洞注意力 (论文笔记+引入代码)
YOLO目标检测专栏探讨了ViT的改进,提出DilateFormer,它结合多尺度扩张注意力(MSDA)来平衡计算效率和关注域大小。MSDA利用局部稀疏交互减少冗余,通过不同头部的扩张率捕获多尺度特征。DilateFormer在保持高性能的同时,计算成本降低70%,在ImageNet-1K、COCO和ADE20K任务上取得领先结果。YOLOv8引入了MultiDilatelocalAttention模块,用于实现膨胀注意力。更多详情及配置见相关链接。
|
3月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv10改进-注意力机制】HAT(Hybrid Attention Transformer,)混合注意力机制
YOLOv10专栏介绍了一种名为HAT的新方法,旨在改善Transformer在图像超分辨率中的表现。HAT结合通道和窗口注意力,激活更多像素并增强跨窗口信息交互。亮点包括:1) 更多像素激活,2) 有效跨窗口信息聚合,3) 任务特定的预训练策略。HAT模型包含浅层特征提取、深层特征提取和图像重建阶段。提供的代码片段展示了HAT类的定义,参数包括不同层的深度、注意力头数量、窗口大小等。欲了解更多详情和配置,请参考给定链接。
|
3月前
|
机器学习/深度学习 移动开发 资源调度
【YOLOv8改进 - 注意力机制】S2Attention : 整合空间位移和分割注意力
YOLOv8专栏探讨了MLP主干网络的创新,如S2-MLPv2,它通过通道扩展和分块空间移位提高性能,达到83.6%的ImageNet top-1准确率。文章介绍了分割注意力模块,用于融合特征图。提供了S2Attention类的代码示例,展示如何结合空间位移和分割注意力。详细内容和实战案例可在[CSDN博客](https://blog.csdn.net/shangyanaf)找到。