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)。
非局部块的设计灵感来源于非局部均值操作,它通过计算输入特征图中任意两点之间的关系来直接捕捉全局依赖,而不仅仅是局部邻域的信息。
上图是,如何通过权重平均所有位置的特征来计算特定位置的响应。
例如,它关联了第一帧中的足球和最后两帧中的足球。
其实非局部操作可以关联第一帧中足球的位置与后续帧中足球的位置,即使它们在时间和空间上是分离的。
这种关联有助于网络更准确地识别和理解足球运动的整个序列。
非局部块的工作机制包括以下步骤:
-
成对关系函数 (f): 计算不同帧之间的相似度或关系(如足球在不同帧中的位置),从而实现帧与帧之间的关联。
-
表示函数 (g): 提取每帧中足球位置的特征表示,这些特征可以是足球的形状、颜色或其他视觉特征。
-
归一化函数 (C(x)): 确保计算得到的响应在不同帧间是比例适当的,以避免由于帧数变化带来的影响。
-
残差连接: 允许网络在添加非局部块的同时保留原始特征,确保新旧信息的有效融合。
-
灵活性: 非局部块可以插入网络中任何需要捕捉长距离依赖的层中,提供对全局信息的理解以及对局部特征的敏感性。
通过这种方式,非局部神经网络在视频分类任务中实现了对足球动作序列的全局理解,如从起踢到落地的整个运动过程,即使这些动作在视频中是分散的。
这种全局理解对于复杂动作的准确分类至关重要。
非局部块的设计细节:
非局部块的核心是一个基于非局部操作的计算单元,其基本形式可以表示为:
- 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)1∑∀jf(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) 是一个归一化因子。
非局部块的具体实现步骤包括:
-
成对关系函数 (f):这个函数计算了位置 (i) 与其他所有位置 (j) 之间的关系。
一个常见的选择是使用嵌入式高斯函数来计算这种相似度。
用于评估任意两帧之间的相关性。
例如,使用嵌入式高斯函数来计算不同帧之间的相似度,从而捕获动作的连续性和变化。
-
表示函数 (g):这个函数用于获取位置 (j) 处的输入信号的表示,通常通过一个线性变换(例如,权重矩阵 ( W g ) (W_g) (Wg))来实现。
提取每一帧的特征表示。
通过对每个位置(即每一帧)应用线性变换,提取对理解视频内容有用的特征。
-
归一化:通过 C ( x ) C(x) C(x) 实现,确保了整个操作的输出不会因为特征数量的不同而产生过大的变化。
确保所有帧贡献的总和被适当标准化,保持响应的稳定性。
-
残差连接:为了将非局部块无缝集成到现有网络中并保持网络性能,通常会在非局部块的输出上添加一个残差连接,即 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 的维度,“+” 表示残差连接。
保证非局部块可以无缝集成到任何预训练模型中,增强而不替代原有的特征提取能力。
-
灵活性:非局部块可以被插入到神经网络的任意位置,既可以用来捕捉早期特征的全局依赖,也可以用于更深层次的特征。
这种设计使得非局部块既可以增强模型对全局信息的理解,也保持了对局部特征的敏感性。
非局部块通过这样的设计,能够有效地增强深度学习模型对全局依赖的捕捉能力,这对于处理图像识别、视频分类等需要理解复杂空间或时空关系的任务尤为重要。
整合全局信息:
操作:非局部块通过遍历视频中的所有帧,基于成对函数和表示函数计算得到的权重,整合全局信息。
- 每一帧的输出不仅反映了该帧本身的信息,还包含了与视频中其他所有帧的关系。
- 这样,模型就能够理解视频中跨越长时间序列的动态变化。
Non-local 神经网络
整篇文章的核心解法是引入非局部神经网络来增强深度学习模型对视频内容中长距离时空依赖的捕捉能力,特别是在视频分类任务中。
这一解法通过几个关键概念和技术构建而成,形成了一个系统的方法来提高模型性能。
非局部块的详细结构:
-
输入特征图(X): 输入信号是具有时间(T)、高(H)、宽(W)和通道数(1024)的四维特征图。
-
变换函数(θ, φ, g):
- θ: 一个1×1×1的卷积操作,用于转换输入特征图X,以便计算相似度。
- φ: 类似于θ,也是一个1×1×1的卷积操作,它与θ配合使用,共同决定特征之间的权重。
- g: 与θ和φ一起工作,1×1×1的卷积操作,用于提取输入特征的另一个表示,这个表示会与由θ和φ确定的权重结合。
-
计算关系权重: 使用θ和φ变换后的特征计算两个位置之间的相似度,通常涉及到计算点积并应用softmax函数来获取归一化的注意力权重。
-
应用权重: 将计算出的注意力权重应用到由g变换得到的特征上,这通常通过矩阵乘法实现。
-
加权特征组合: 对于每个位置i,将所有位置j的加权特征求和,得到非局部操作的输出。
-
归一化因子(C(x)): 通常情况下,为了使非局部操作的输出与输入特征图保持一致的尺度,需要通过归一化因子C(x)来调整。
-
输出特征图(Y): 最终,非局部操作的输出是通过在输入特征图X上加上经过非局部处理的特征图得到的,这一步通常涉及到残差连接和一个1×1×1的卷积操作Wz。
-
残差连接: 为了融入原始特征并防止训练过程中的性能退化,输出特征图Y会与输入特征图X进行元素级的相加。
通过这个结构,非局部块能够在每个位置捕捉全局依赖,不仅包括空间位置之间的关系,还包括跨时间的动态变化,这对于理解复杂的视频序列至关重要。
这种设计使得网络能够强调重要的特征并抑制不相关的信息,从而提高视频分类任务的准确性。
整体关联图:
-
2D ConvNet基线(C2D):提供了处理视频的起点,主要关注于图像的空间特征,而时间信息通过简单的池化操作来整合。
这是最基础的视频处理模型,主要强调单帧图像的处理。
-
膨胀的3D ConvNet(I3D):在C2D的基础上增加了对时间维度的直接处理,通过将2D卷积核“膨胀”成3D形式,使得模型能够在空间和时间上同时捕捉特征。
这一步提升了模型对视频中动态内容的理解能力。
-
非局部网络:在C2D或I3D模型的基础上进一步增强,通过插入非局部块来捕捉全局的时空依赖。
非局部网络不仅关注局部信息,还能够理解视频中任意两点之间的长距离关系,从而全面提升模型对复杂视频内容的理解。
-
成对关系函数 (f):在非局部块内部,用于计算视频帧之间的相似度或关系,是捕捉全局依赖的关键。
-
表示函数 (g):用于提取每个位置(视频帧)的特征表示,与(f)函数配合使用,强化模型对每一帧的理解。
-
归一化:确保非局部块的输出在不同视频或帧数下保持稳定,通过归一化处理来平衡各个位置的贡献。
-
残差连接:保证非局部块可以无缝集成到任何预训练模型中,增强模型性能的同时,避免破坏原有的学习成果。
-
这些概念和技术的关联图可以想象为一棵树:
- 树根是2D ConvNet基线,它支持整个模型的基础;
- 树干是膨胀的3D ConvNet,为模型提供了时间维度上的处理能力;
- 树枝是非局部网络,进一步延伸模型的能力,使其能够捕捉更广泛和深入的时空依赖;
- 而成对关系函数、表示函数、归一化和残差连接等则像是树叶和果实,为非局部网络提供了必要的细节和功能,使其能够有效地工作。
通过这样的结构,非局部神经网络能够有效地增强深度学习模型对视频内容的全局理解,特别是在处理需要理解长时间跨度内复杂动态的视频分类任务时。
效果
实验结果表明,即使在基线C2D模型中添加一个非局部块也能显著提高模型的分类性能,表现为在验证集上的准确率有所提高。
将单个非局部块添加到ResNet的不同阶段的结果表明,无论是在网络的早期阶段还是后期阶段添加非局部块,都能带来性能的提升,但是添加到空间尺寸较小的res5阶段时提升稍小。
这可能是因为在较小的空间尺寸上,模型提供的空间信息不足以进行精确的空间关系分析。
增加更多非局部块的实验结果表明,在网络中添加更多的非局部块可以进一步提高性能,特别是当这些块被添加到不同的网络层级时,它们可以执行长距离多跳通信,帮助模型更有效地捕捉复杂的时空依赖关系。
小目标涨点
更新中…