【YOLO v5 v7 v8 小目标改进】BiFormer:从局部空间特征到高效的全局空间特征

2024-02-29 18:12

本文主要是介绍【YOLO v5 v7 v8 小目标改进】BiFormer:从局部空间特征到高效的全局空间特征,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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. 子解法1: 稀疏注意力引入:

    • 这就像是你已经知道“人工智能”书籍只可能在“科技”和“计算机科学”这两个大的分类区域中。
    • 因此,你不需要去每个区域逐本查看所有的书籍,而是直接去这两个与你的需求最相关的区域。
    • 之所以采用这种方法,是因为如果检查图书馆里的每一本书,将会非常耗时。这就像是传统注意力机制需要计算所有数据点之间的关系,非常耗费时间和精力。
  2. 子解法2: 区域级路由:

    • 当你到达“科技”和“计算机科学”区域后,你会注意到这些区域根据子主题进一步划分成小区域,比如“软件开发”、“网络安全”和“人工智能”。
    • 在这一步,你会选择直接前往“人工智能”小区域,而忽略其他不相关的小区域。
    • 之所以这样做,是因为即使在“科技”和“计算机科学”这两个大区域中,也存在大量与你的需求不相关的书籍。直接前往最可能包含你需要信息的小区域,可以更高效地找到目标书籍。
  3. 子解法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块通过细化特征表示,并结合多尺度信息处理,以提升模型的视觉识别能力。

小目标涨点

更新中…

YOLO v5 魔改

YOLO v7 魔改

YOLO v8 魔改

这篇关于【YOLO v5 v7 v8 小目标改进】BiFormer:从局部空间特征到高效的全局空间特征的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/759623

相关文章

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、