【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

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程