【YOLO v5 v7 v8 小目标改进】Non-local 注意力实现非局部神经网络,解决长空间和时间数据依赖问题

Non-local 注意力实现非局部神经网络,解决长空间和时间数据依赖问题

    • 提出背景
      • 长距离技术对比
      • Non-local Block是怎么设计
      • Non-local 神经网络
      • 效果
    • 小目标涨点
      • YOLO v5 魔改
      • YOLO v7 魔改
      • YOLO v8 魔改

 


提出背景

论文:https://arxiv.org/pdf/1711.07971.pdf

代码:https://github.com/facebookresearch/video-nonlocal-net

问题:图像中的长距离依赖难以捕捉

在图像识别任务中,图像的不同部分之间可能存在重要的关联,即使这些部分在图像中相距很远。

例如,在理解一个场景中的物体关系时,远处的背景可能对识别前景物体至关重要。

传统解法:深层卷积神经网络(CNN)

  • 子特征1:深层堆叠
    • 之所以用这个解法,是因为 通过增加网络的深度,逐层扩大感受野,希望能间接捕捉到远处区域的信息。
  • 子特征2:重复的局部操作
    • 之所以用这个解法,是因为 卷积操作本质上是局部的,需要通过多层重叠来尝试覆盖更大的区域。

本文解法:非局部神经网络

  • 子特征1:直接长距离交互
    • 之所以使用非局部操作,是因为 它允许网络在计算某个位置的响应时,直接考虑图像中所有位置的信息,从而无需依赖于逐步扩大的局部操作。
  • 子特征2:效率和灵活性
    • 之所以使用非局部操作,是因为 这种方法不仅能更直接地捕获长距离依赖,还能以较少的层数实现,提高了模型的效率和灵活性。

传统CNN方法:通过增加网络深度,逐步增大感受野,希望能捕获到更远处物体的信息。

这种方法(卷积+下采样的池化层)虽然在某种程度上有效,但计算成本高,且当依赖关系跨越很长距离时,效果可能不理想。

非局部神经网络方法:通过插入非局部操作块,直接计算图像中任何两点之间的关系,无论它们相距多远。

这种方法能够更直接有效地捕获长距离依赖,对于场景理解等复杂任务表现更好,同时保持了较低的计算复杂度。

长距离技术对比

本文的非局部神经网络及其相关技术主要聚焦于解决深度学习模型中的长距离依赖问题,特别是在图像处理、视频分析、自然语言处理等领域。

这些技术通过考虑输入数据中远距离元素之间的关系,能够捕捉和利用这些信息以提高模型的性能。

我们将非局部神经网络与其他一些流行技术进行对比,以突出其独特之处和应用场景。

非局部神经网络 vs. 卷积神经网络(CNN):

  • 局部性原则:CNN通过滤波器在输入数据上滑动来捕捉局部特征,这意味着每次操作只考虑输入数据的一个小邻域。这种方法在图像识别等任务中非常有效,因为它利用了图像中的局部空间连续性。
  • 长距离依赖:与CNN不同,非局部神经网络直接计算输入数据中任意两点之间的关系,使得模型能够捕获长距离依赖。这对于那些需要全局理解输入数据的任务尤其重要,如视频分类,其中时间跨度内的动作识别依赖于跨帧的信息。

非局部神经网络 vs. 循环神经网络(RNN):

  • 序列数据处理:RNN设计用来处理序列数据,通过递归地处理序列中的每个元素,并保持一个内部状态来存储之前元素的信息,从而理解序列中的时间依赖。
  • 效率和长期依赖:虽然RNN能够处理时间序列数据中的依赖关系,但它们在捕获长期依赖方面存在困难,并且训练过程中容易遇到梯度消失或爆炸的问题。非局部神经网络通过其结构能够更直接地捕获长期依赖,且通常更容易训练。

非局部神经网络 vs. Transformer:

  • 自注意力机制:Transformer模型通过自注意力机制来处理序列数据,允许模型在计算序列中每个元素的表示时考虑到序列中的所有元素。这使得Transformer非常擅长捕获长距离依赖,特别是在处理自然语言任务时。
  • 通用性和特定应用:虽然Transformer和非局部神经网络都能处理长距离依赖问题,但Transformer尤其在自然语言处理领域表现出色。相比之下,非局部神经网络更多地被应用于图像和视频分析领域,其设计更侧重于捕获这些类型数据中的空间和时空依赖。

采用自注意力机制改进的方法:

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

应用场景选择:

选择非局部神经网络还是其他技术,取决于特定任务的需求:

  • 对于需要捕获图像或视频数据中的复杂空间和时空依赖的应用,非局部神经网络提供了一个有效的解决方案。
  • 对于序列数据处理,特别是需要理解长文本或进行语言翻译的任务,Transformer可能是更好的选择。
  • 当任务侧重于捕获局部图像特征或进行简单的时间序列预测时,CNN和RNN可能分别是更合适的工具。

结论: 非局部神经网络及其相关技术在处理长距离依赖方面提供了一个强有力的工具,尤其适用于那些传统方法难以处理的复杂空间和时间数据依赖问题。

Non-local Block是怎么设计

非局部块(Non-local Block)是一种设计用于捕捉深度学习模型中长距离依赖关系的结构,可以被集成到各种现有的神经网络架构中,如卷积神经网络(CNN)或循环神经网络(RNN)。

非局部块的设计灵感来源于非局部均值操作,它通过计算输入特征图中任意两点之间的关系来直接捕捉全局依赖,而不仅仅是局部邻域的信息。

在这里插入图片描述
上图是,如何通过权重平均所有位置的特征来计算特定位置的响应。

例如,它关联了第一帧中的足球和最后两帧中的足球。

在这里插入图片描述

 

其实非局部操作可以关联第一帧中足球的位置与后续帧中足球的位置,即使它们在时间和空间上是分离的。

这种关联有助于网络更准确地识别和理解足球运动的整个序列。

非局部块的工作机制包括以下步骤:

  1. 成对关系函数 (f): 计算不同帧之间的相似度或关系(如足球在不同帧中的位置),从而实现帧与帧之间的关联。

  2. 表示函数 (g): 提取每帧中足球位置的特征表示,这些特征可以是足球的形状、颜色或其他视觉特征。

  3. 归一化函数 (C(x)): 确保计算得到的响应在不同帧间是比例适当的,以避免由于帧数变化带来的影响。

  4. 残差连接: 允许网络在添加非局部块的同时保留原始特征,确保新旧信息的有效融合。

  5. 灵活性: 非局部块可以插入网络中任何需要捕捉长距离依赖的层中,提供对全局信息的理解以及对局部特征的敏感性。

通过这种方式,非局部神经网络在视频分类任务中实现了对足球动作序列的全局理解,如从起踢到落地的整个运动过程,即使这些动作在视频中是分散的。

这种全局理解对于复杂动作的准确分类至关重要。

非局部块的设计细节:

非局部块的核心是一个基于非局部操作的计算单元,其基本形式可以表示为:

  • y i = 1 C ( x ) ∑ ∀ j f ( x i , x j ) g ( x j ) y_i = \frac{1}{C(x)} \sum_{\forall j} f(x_i, x_j)g(x_j) yi=C(x)1jf(xi,xj)g(xj)

这里:

  • ( i ) (i) (i) 是要计算响应的输出位置的索引(可以是空间、时间或时空中的位置)。
  • ( j ) (j) (j) 遍历所有可能的位置。
  • ( x ) (x) (x) 是输入信号(图像、序列、视频或它们的特征)。
  • ( y ) (y) (y) 是与 (x) 大小相同的输出信号。
  • ( f ) (f) (f) 是一个成对函数,用于计算位置 (i) 和所有 (j) 之间的关系(例如,相似度或亲和力)。
  • ( g ) (g) (g) 是一个一元函数,用于在位置 (j) 上计算输入信号的表示。
  • C ( x ) C(x) C(x) 是一个归一化因子。

非局部块的具体实现步骤包括:

  1. 成对关系函数 (f):这个函数计算了位置 (i) 与其他所有位置 (j) 之间的关系。

    一个常见的选择是使用嵌入式高斯函数来计算这种相似度。

    用于评估任意两帧之间的相关性。

    例如,使用嵌入式高斯函数来计算不同帧之间的相似度,从而捕获动作的连续性和变化。

  2. 表示函数 (g):这个函数用于获取位置 (j) 处的输入信号的表示,通常通过一个线性变换(例如,权重矩阵 ( W g ) (W_g) (Wg))来实现。

    提取每一帧的特征表示。

    通过对每个位置(即每一帧)应用线性变换,提取对理解视频内容有用的特征。

  3. 归一化:通过 C ( x ) C(x) C(x) 实现,确保了整个操作的输出不会因为特征数量的不同而产生过大的变化。

    确保所有帧贡献的总和被适当标准化,保持响应的稳定性。

  4. 残差连接:为了将非局部块无缝集成到现有网络中并保持网络性能,通常会在非局部块的输出上添加一个残差连接,即 z i = W z y i + x i z_i = W_z y_i + x_i zi=Wzyi+xi,其中 W z W_z Wz 是可学习的权重矩阵,用于调整非局部操作的输出,以匹配输入 x i x_i xi 的维度,“+” 表示残差连接。

    保证非局部块可以无缝集成到任何预训练模型中,增强而不替代原有的特征提取能力。

  5. 灵活性:非局部块可以被插入到神经网络的任意位置,既可以用来捕捉早期特征的全局依赖,也可以用于更深层次的特征。

    这种设计使得非局部块既可以增强模型对全局信息的理解,也保持了对局部特征的敏感性。

    非局部块通过这样的设计,能够有效地增强深度学习模型对全局依赖的捕捉能力,这对于处理图像识别、视频分类等需要理解复杂空间或时空关系的任务尤为重要。

整合全局信息:

操作:非局部块通过遍历视频中的所有帧,基于成对函数和表示函数计算得到的权重,整合全局信息。

  • 每一帧的输出不仅反映了该帧本身的信息,还包含了与视频中其他所有帧的关系。
  • 这样,模型就能够理解视频中跨越长时间序列的动态变化。

 


Non-local 神经网络

整篇文章的核心解法是引入非局部神经网络来增强深度学习模型对视频内容中长距离时空依赖的捕捉能力,特别是在视频分类任务中。

这一解法通过几个关键概念和技术构建而成,形成了一个系统的方法来提高模型性能。

非局部块的详细结构:
在这里插入图片描述

  1. 输入特征图(X): 输入信号是具有时间(T)、高(H)、宽(W)和通道数(1024)的四维特征图。

  2. 变换函数(θ, φ, g):

    • θ: 一个1×1×1的卷积操作,用于转换输入特征图X,以便计算相似度。
    • φ: 类似于θ,也是一个1×1×1的卷积操作,它与θ配合使用,共同决定特征之间的权重。
    • g: 与θ和φ一起工作,1×1×1的卷积操作,用于提取输入特征的另一个表示,这个表示会与由θ和φ确定的权重结合。
  3. 计算关系权重: 使用θ和φ变换后的特征计算两个位置之间的相似度,通常涉及到计算点积并应用softmax函数来获取归一化的注意力权重。

  4. 应用权重: 将计算出的注意力权重应用到由g变换得到的特征上,这通常通过矩阵乘法实现。

  5. 加权特征组合: 对于每个位置i,将所有位置j的加权特征求和,得到非局部操作的输出。

  6. 归一化因子(C(x)): 通常情况下,为了使非局部操作的输出与输入特征图保持一致的尺度,需要通过归一化因子C(x)来调整。

  7. 输出特征图(Y): 最终,非局部操作的输出是通过在输入特征图X上加上经过非局部处理的特征图得到的,这一步通常涉及到残差连接和一个1×1×1的卷积操作Wz。

  8. 残差连接: 为了融入原始特征并防止训练过程中的性能退化,输出特征图Y会与输入特征图X进行元素级的相加。

通过这个结构,非局部块能够在每个位置捕捉全局依赖,不仅包括空间位置之间的关系,还包括跨时间的动态变化,这对于理解复杂的视频序列至关重要。

这种设计使得网络能够强调重要的特征并抑制不相关的信息,从而提高视频分类任务的准确性。

 
整体关联图:

  1. 2D ConvNet基线(C2D):提供了处理视频的起点,主要关注于图像的空间特征,而时间信息通过简单的池化操作来整合。

    这是最基础的视频处理模型,主要强调单帧图像的处理。

  2. 膨胀的3D ConvNet(I3D):在C2D的基础上增加了对时间维度的直接处理,通过将2D卷积核“膨胀”成3D形式,使得模型能够在空间和时间上同时捕捉特征。

    这一步提升了模型对视频中动态内容的理解能力。

  3. 非局部网络:在C2D或I3D模型的基础上进一步增强,通过插入非局部块来捕捉全局的时空依赖。

    非局部网络不仅关注局部信息,还能够理解视频中任意两点之间的长距离关系,从而全面提升模型对复杂视频内容的理解。

    • 成对关系函数 (f):在非局部块内部,用于计算视频帧之间的相似度或关系,是捕捉全局依赖的关键。

    • 表示函数 (g):用于提取每个位置(视频帧)的特征表示,与(f)函数配合使用,强化模型对每一帧的理解。

    • 归一化:确保非局部块的输出在不同视频或帧数下保持稳定,通过归一化处理来平衡各个位置的贡献。

    • 残差连接:保证非局部块可以无缝集成到任何预训练模型中,增强模型性能的同时,避免破坏原有的学习成果。

这些概念和技术的关联图可以想象为一棵树:

  • 树根是2D ConvNet基线,它支持整个模型的基础;
  • 树干是膨胀的3D ConvNet,为模型提供了时间维度上的处理能力;
  • 树枝是非局部网络,进一步延伸模型的能力,使其能够捕捉更广泛和深入的时空依赖;
  • 而成对关系函数、表示函数、归一化和残差连接等则像是树叶和果实,为非局部网络提供了必要的细节和功能,使其能够有效地工作。

通过这样的结构,非局部神经网络能够有效地增强深度学习模型对视频内容的全局理解,特别是在处理需要理解长时间跨度内复杂动态的视频分类任务时。

效果

实验结果表明,即使在基线C2D模型中添加一个非局部块也能显著提高模型的分类性能,表现为在验证集上的准确率有所提高。

将单个非局部块添加到ResNet的不同阶段的结果表明,无论是在网络的早期阶段还是后期阶段添加非局部块,都能带来性能的提升,但是添加到空间尺寸较小的res5阶段时提升稍小。

这可能是因为在较小的空间尺寸上,模型提供的空间信息不足以进行精确的空间关系分析。

增加更多非局部块的实验结果表明,在网络中添加更多的非局部块可以进一步提高性能,特别是当这些块被添加到不同的网络层级时,它们可以执行长距离多跳通信,帮助模型更有效地捕捉复杂的时空依赖关系。

小目标涨点

更新中…

YOLO v5 魔改

YOLO v7 魔改

YOLO v8 魔改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/713158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抽象类与抽象方法

文章目录 抽象类抽象类的特点 抽象方法抽象方法的特点 模板设计模式模板设计模式能解决的问题示例 #抽象类与抽象方法 抽象类 用abstract关键字来修饰一个类时,这个类就叫抽象类。 public abstract 类名{... }抽象类的特点 1)抽象类不能被实例化。 2&…

AOP(黑马学习笔记)

AOP基础 学习完spring的事务管理之后,接下来我们进入到AOP的学习。 AOP也是spring框架的第二大核心,我们先来学习AOP的基础。 在AOP基础这个阶段,我们首先介绍一下什么是AOP,再通过一个快速入门程序,让大家快速体验A…

JAVASE初认识

1.初认识其结构 1.源文件(扩展名为*.java):源文件带有类的定义。类用来表示程序的一个组件,小程序或许只会有一个类。类的内容必须包含在花括号里面。 2.类:类中带有一个或多个方法。方法必须在类的内部声明。 3.方法&#xff1…

vue3创建h5 项目使用rem做响应式的配置

第一步 安装依赖: npm install amfe-flexible -S npm install postcss-px2rem -S第二步 main.ts文件中导入 import "amfe-flexible/index.js";第三步 进行配置: vue3 项目中创建 postcss.cinfig.js文件,这里是基于设计稿是750px…

gRPC知识归档

文章目录 gRPC知识归档gRPC原理什么是gRPCgRPC的特性gRPC支持语言gRPC使用场景gRPC设计的动机和原则 数据封装和数据传输问题网络传输中的内容封装和数据体积问题JSONProtobuf(微服务之间的服务器调用,一般采用二进制序列化,比如protobuf&…

【airtest】自动化入门教程(二)airtest操作

目录 一、touch 二、wait 三、swipe 四、exists 五、text 六、keyevent 七、snapshot 八、sleep 九、断言 9.1 assert_exists 9.2 assert_not_exists 9.3 assert_equal 9.4 assert_not_equal 前言:本文主要针对aritest部分的基础操作,aritest是一个跨平…

网络编程第二天

1.基于TCP的通信(面向连接的通信) 服务器代码实现&#xff1a; #include <myhead.h> #define IP "192.168.126.91" #define PORT 9999 int main(int argc, const char *argv[]) {//1、创建套接字int sfd-1;if((sfdsocket(AF_INET,SOCK_STREAM,0))-1){perror(…

ES系列之Logstash实战入门

概述 作为ELK技术栈一员&#xff0c;Logstash用于将数据采集到ES&#xff0c;通过简单配置就能把各种外部数据采集到索引中进行保存&#xff0c;可提高数据采集的效率。 原理 数据源提供的数据进入Logstash的管道后需要经过3个阶段&#xff1a; input&#xff1a;负责抽取数…

【ArcPy】批量读取文件夹excel中XY并转为点shp

示例展示 代码 只读取excel中含有XY字段的文件&#xff0c;并将矢量命名为excel文件名称。 import os import pandas as pd import arcpy folder_path r"C:\Users\admin\Desktop\excelfile" extension"xlsx" files [file for file in os.listdir(folder…

SpringCloud gateway限流无效,redis版本低的问题

在使用springCloud gateway的限流功能的时候&#xff0c;配置RedisRateLimiter限流无效&#xff0c;后来发现是Redis版本过低导致的问题&#xff0c;实测 Redis版本为3.0.504时限流无效&#xff0c;改用7.0.x版本的Redis后限流生效。查了资料发现很多人都遇见过这个问题&#x…

RedisTemplate 序列化成功,反序列化失败List, Set, Map失败

RedisTemplate 序列化成功&#xff0c;反序列化失败List, Set, Map失败 异常信息RedisTemplate配置异常原因错误代码示例解决方法 序列化成功&#xff0c;反序列化失败 异常信息 Caused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve ty…

小程序事件处理

事件处理 一个应用仅仅只有界面展示是不够的&#xff0c;还需要和用户做交互&#xff0c;例如&#xff1a;响应用户的点击、获取用户输入的值等等&#xff0c;在小程序里边&#xff0c;我们就通过编写 JS 脚本文件来处理用户的操作 1. 事件绑定和事件对象 小程序中绑定事件与…

React之组件定义和事件处理

一、组件的分类 在react中&#xff0c;组件分为函数组件和class组件&#xff0c;也就是无状态组件和有状态组件。 * 更过时候我们应该区别使用无状态组件&#xff0c;因为如果有状态组件会触发生命周期所对应的一些函数 * 一旦触发他生命周期的函数&#xff0c;它就会影响当前项…

如何设置从小程序跳转到其它小程序

​有的商家有多个小程序&#xff0c;希望能够通过一个小程序链接到所有其它小程序&#xff0c;用户可以通过点击跳转链接实现从一个小程序跳转到另一个小程序。要怎么才能实现这样的跳转呢。下面具体介绍。 1. 设置跳转。在小程序管理员后台->分类管理&#xff0c;添加一个…

ssm个人学习01

Spring配置文件: spring环境的搭建: 1:导入对应的spring坐标 也就是依赖 2:编写controller, service, dao相关的代码 3:创建配置文件(在resource下面配置文件) 例如:applicationContext.xml <bean id "" class ""> <property name "&…

工作电压范围宽的国产音频限幅器D2761用于蓝牙音箱,输出噪声最大仅-90dBV

近年来随着相关技术的不断提升&#xff0c;音箱也逐渐从传统的音箱向智能音箱、无线音箱升级。同时在消费升级的背景下&#xff0c;智能音箱成为人们提升生活品质的方式之一。智能音箱是智能化和语音交互技术的产物&#xff0c;具有点歌、购物、控制智能家居设备等功能&#xf…

python水表识别图像识别深度学习 CNN

python水表识别&#xff0c;图像识别深度学习 CNN&#xff0c;Opencv,Keras 重点&#xff1a;项目和文档是本人近期原创所作&#xff01;程序可以将水表图片里面的数据进行深度学习&#xff0c;提取相关信息训练&#xff0c;lw1.3万字重复15%&#xff0c;可以直接上交那种&…

Vue中<style scoped lang=“scss“>的含义

这段代码中的<style scoped lang"scss">是HTML和Vue框架结合使用时常见的一个模式&#xff0c;具体含义如下&#xff1a; scoped&#xff1a;这是一个Vue.js特有的属性&#xff0c;用来指定样式只应用于当前组件的元素。没有这个属性时&#xff0c;样式会全局应…

elasticsearch7.17 terms聚合性能提升90%+

背景 ES7 相比于 ES6 有多个层面的优化&#xff0c;对于开源的ES而言&#xff0c;升级是必经之路。 ES的使用场景非常多&#xff0c;在升级过程中可能会遇到非预期的结果&#xff1b; 比如之前文章提到的典型案例&#xff1a;ES7.17版本terms查询性能问题 ES7.17版本terms查…

【Python笔记-FastAPI】后台任务+WebSocket监控进度

目录 一、代码示例 二、执行说明 (一) 调用任务执行接口 (二) 监控任务进度 实现功能&#xff1a; 注册后台任务&#xff08;如&#xff1a;邮件发送、文件处理等异步场景&#xff0c;不影响接口返回&#xff09;监控后台任务执行进度&#xff08;进度条功能&#xff09;支…