BiFormer:从局部空间特征到高效的全局空间特征
- 提出背景
- BiFormer 结构
- 小目标涨点
- YOLO v5 魔改
- YOLO v7 魔改
- YOLO v8 魔改
提出背景
论文:https://arxiv.org/pdf/2303.08810.pdf
代码:https://github.com/rayleizhu/BiFormer
问题: 传统的卷积神经网络(CNN)在处理图像时局限于局部上下文,难以捕捉全局上下文信息。
解法:
-
注意力机制能够计算空间位置间的特征亲和力,从而捕获长距离依赖,提高模型对全局信息的理解能力。
-
引入注意力模型到计算机视觉中,使用注意力机制代替卷积操作,实现全局上下文建模。
Transformer 变压器模型由于其能够捕捉长距离依赖和高度的灵活性,在自然语言处理(NLP)领域取得了巨大成功。
- 从【注意力机制】开始,到【Transformer】
近年来,研究者开始将(Transformer)变压器应用于计算机视觉任务,期望能够借助其长距离依赖捕捉能力来改进视觉理解。
然而,视觉数据的高维度特性使得直接应用变压器模型变得计算代价高昂。
这是因为(Transformer)变压器模型依赖于注意力机制,该机制需要计算和存储所有输入数据点之间的相互作用,导致随着输入大小的增加,所需的计算资源和内存急剧增加。
六种不同的注意力机制及其在处理图像时的关注点(由星号标记)。这些机制包括:
- (a) Vanilla Attention:传统的全局注意力机制,计算所有空间位置上的特征关联,计算量大,内存占用高。
- (b) Local Attention:局部注意力机制,仅在局部窗口内计算特征关联。
- © Axial Attention:轴向注意力,按行或列计算特征关联。
- (d) Dilated Attention:扩张注意力,使用扩张的窗口来捕捉更广范围的上下文信息。
- (e) Deformable Attention:变形注意力,能够适应图像内容调整关注的区域。
- (f) Bi-level Routing Attention:双层路由注意力,这是BiFormer使用的机制,先在区域级别筛选相关区域,然后在这些区域中进行令牌到令牌的注意力计算。
问题: 虽然注意力机制能够提升模型对全局信息的捕捉能力,但它需要计算所有空间位置间的成对特征亲和力,导致高计算复杂度和内存消耗。
解法:
- 开发更高效的注意力机制,通过减少必须计算和存储的亲和力对数量来降低计算和内存复杂度。
- 作者提出了一种创新的注意力机制——双层路由注意力机制。
上图是 BiFormer 如何通过收集最相关的键值对来减少计算和提高效率,使用密集矩阵乘法来进行高效计算,这对GPU是友好的。
这种机制通过以下步骤降低计算复杂度和内存占用:
-
子解法1: 稀疏注意力引入:
- 为了减少计算复杂度和内存占用,只让模型关注一小部分最重要的信息(键值对)。
- 之所以用这个子解法,是因为传统的注意力机制需要计算所有数据点之间的关系,非常消耗计算资源。
- 操作: 将输入特征图分割成多个非重叠的区域,并对每个区域的特征进行线性投影,以获得该区域的查询(Q)、键(K)和值(V)。
-
子解法2: 区域级路由:
- 首先在更大的区域级别筛选出最可能相关的区域,减少需要进一步处理的数据量。
- 之所以用这个子解法,是因为直接在最细节的层面(像素或特征点)上筛选相关信息效率低下。
- 操作: 构建一个有向图来确定哪些区域应该被给定区域关注,进而通过保留每个区域最相关的k个连接来修剪亲和图。
-
子解法3: 令牌级注意力应用:
- 在通过区域级筛选后的数据上,进行细致的处理,确保关注到的是确实有价值的信息。
- 之所以用这个子解法,是因为即使在区域级筛选后,我们仍需要从这些区域中找到最具体、最相关的信息。
- 操作: 在经过区域到区域路由后,对选定的区域内的所有键值对应用细粒度的令牌到令牌注意力,使用聚合操作以适应现代GPU的内存访问模式。
这一机制使BiFormer模型能够以内容感知的方式,仅关注对每个查询最相关的一小部分信息,大幅提高了计算效率和性能。
图展示了BiFormer模型的注意力机制如何聚焦于图像的不同部分。
对于两个场景,它展示了原始图像并标出了两个查询位置,模型关注的相应区域(路由区域),以及最终的注意力热图。
这说明了模型基于查询位置选择性地聚焦于输入图像相关部分的能力。
举个例子,在一个大型图书馆里寻找关于“人工智能”的书籍,这个图书馆有成千上万的书籍,分布在不同的区域和书架上。
-
子解法1: 稀疏注意力引入:
- 这就像是你已经知道“人工智能”书籍只可能在“科技”和“计算机科学”这两个大的分类区域中。
- 因此,你不需要去每个区域逐本查看所有的书籍,而是直接去这两个与你的需求最相关的区域。
- 之所以采用这种方法,是因为如果检查图书馆里的每一本书,将会非常耗时。这就像是传统注意力机制需要计算所有数据点之间的关系,非常耗费时间和精力。
-
子解法2: 区域级路由:
- 当你到达“科技”和“计算机科学”区域后,你会注意到这些区域根据子主题进一步划分成小区域,比如“软件开发”、“网络安全”和“人工智能”。
- 在这一步,你会选择直接前往“人工智能”小区域,而忽略其他不相关的小区域。
- 之所以这样做,是因为即使在“科技”和“计算机科学”这两个大区域中,也存在大量与你的需求不相关的书籍。直接前往最可能包含你需要信息的小区域,可以更高效地找到目标书籍。
-
子解法3: 令牌级注意力应用:
- 在“人工智能”小区域里,你会详细检查每一本书的标题和简介,找到最符合你需求的几本书。
- 这一步骤确保了你不仅找到了正确的区域,也找到了具体的、最有价值的信息。
- 之所以需要这一步,是因为即使是在“人工智能”小区域内,也会有许多不同方向和层次的书籍。细致地挑选能够确保你获得最相关和有价值的信息。
这种“筛选和聚焦”的方法大大减少了搜索的范围和复杂度,最终使你能够高效地找到你需要的信息。
这与在变压器模型中引入双层路由注意力机制的目的是一致的:先大范围筛选出可能相关的区域,再在这些区域中寻找最具体、最相关的信息。
BiFormer 结构
这幅图是BiFormer模型的整体架构和一个BiFormer模块的详细构造。
左侧:BiFormer的整体架构
- 输入是一个具有高度H、宽度W和3个颜色通道的图像。
- 模型被分为四个阶段,每个阶段都包含一个或多个BiFormer块(标记为 ( N 1 , N 2 , N 3 , N 4 ) ( N_1, N_2, N_3, N_4) (N1,N2,N3,N4)。
- 第一阶段开始于一个补丁嵌入层,将图像转换成一个维度为 H 4 × W 4 × C \frac{H}{4} \times \frac{W}{4} \times C 4H×4W×C 的特征映射。
- 在接下来的每个阶段,通过补丁合并模块将特征映射的空间分辨率减半,同时增加通道数(例如,第二阶段的输出是 H 8 × W 8 × 2 C \frac{H}{8} \times \frac{W}{8} \times 2C 8H×8W×2C。
- 这样的金字塔结构有助于模型在不同的尺度上捕捉图像特征,对于处理复杂的视觉任务非常有用。
右侧:BiFormer模块的细节
- 一个BiFormer块由几个主要部分组成:
- 深度可分离卷积(DWConv 3x3):它是一个轻量级的卷积层,用于捕捉局部特征并保持计算效率。
- 双层路由注意力(Bi-level Routing Attention):这是BiFormer的核心特性,它动态地选择与每个查询最相关的键值对,而不是简单地与所有特征交互。
- 层正规化(LN):用于稳定模型的训练过程。
- 多层感知机(MLP):一个全连接的网络部分,用于非线性特征变换。
这种设计使得BiFormer在处理大规模图像数据时,能够有效地降低计算负担,同时保持对长距离依赖的敏感性。
每个BiFormer块通过细化特征表示,并结合多尺度信息处理,以提升模型的视觉识别能力。
小目标涨点
更新中…