Non-local Neural Networks

受到计算机视觉的Non-local means(NLM)的影响,Non-local 提出Non-local operations,用于捕获长距离的关系,提升了语义分割的效果

什么是 Non-local operations?

  • Non-local-20230408143233
  • CNN、RNN 都是对局部区域的操作,就是 local operations;受到计算机视觉的 [[…/C04-OpenCV/OpenCV使用指南/B05-图像处理-图像滤波#^1ni6g8|Non-local means(NLM)]] 的影响,Non-local 提出 Non-local operations,用于捕获长距离的关系,如:像素与像素之间的关系、视频帧之间的关系、NLP 的字词之间的关系
  • Non-local operations 的定义:以下 x 是输入信号;i 代表的是输出位置,如空间、时间或者时空的索引,他的响应应该对 j 进行枚举然后计算得到的;f 函数计算 i 和 j 的相似度;g 函数计算 feature map 在 j 位置的表示;最终的 y 是通过响应因子 C (x) 进行标准化处理以后得到的

    yi=1C(x)jf(xi,xj)g(xj)y_{i}=\frac{1}{C(x)} \sum_{\forall j} f\left(x_{i}, x_{j}\right) g\left(x_{j}\right)

Non-local operations 的 f 函数?

  • 一个用于计算 i 和 j 相似度的函数,作者提出了四个具体的函数可以用作 f 函数
  • Gaussian functionexiTxje^{x_{i}^{T} x_{j}} 使用一个点乘来计算相似度,配合归一化,公式类似 softmax 的过程

    f(xi,xj)=exiTxjC(x)=jf(xi,xj)\begin{array}{c}f\left(x_{i}, x_{j}\right)=e^{x_{i}^{T} x_{j}} \\C(x)=\sum_{\forall j} f\left(x_{i}, x_{j}\right)\end{array}

  • Embedded Gaussian:基于上面的变换,现将 xi, xj 编码到一个空间再计算相似度

    f(xi,xj)=eθ(xi)Tϕ(xj)C(x)=jf(xi,xj)\begin{array}{l}f\left(x_{i}, x_{j}\right)=e^{\theta\left(x_{i}\right)^{T} \phi\left(x_{j}\right)} \\C(x)=\sum_{\forall j} f\left(x_{i}, x_{j}\right)\end{array}

  • Dot product

    f(xi,xj)=θ(xi)Tϕ(xj)C(x)=N\begin{array}{c}f\left(x_{i}, x_{j}\right)=\theta\left(x_{i}\right)^{T} \phi\left(x_{j}\right) \\C(x)=N\end{array}

  • Concatenation

    f(xi,xj)=RELU(wfT.[θ(xi)ϕ(xj)]C(x)=N\begin{array}{c}f\left(x_{i}, x_{j}\right)=RELU(w_f^T.[\theta\left(x_i\right)\phi\left(x_{j}\right)] \\C(x)=N\end{array}

Non-local operations 的 g 函数?

  • 可以看做一个线性转化(Linear Embedding),可以通过空间上的1×1卷积实现,公式如下,其中 WgW_g 是需要学习的权重矩阵

    g(xj)=Wgxjg(x_j)=W_gx_j

  • 这个相当于计算得到每个待加注意力位置中间变量表示,后续注意力矩阵乘这个中间变量表示,得到加注意力的结果

什么是 Non-local?

  • Non-local-20230408143234
  • 非局部神经网络模型(Non-local)用于有效捕捉序列中各个元素间的依赖关系。在这里,所谓的序列可以是单幅图像的不同位置(即空间序列),也可以是视频中的不同帧(即时间序列),还可以是视频中不同帧的不同位置(即时空序列)
  • Non-local 网络更像是一个通用的“积木”,可以将其嵌入到任意具体视觉任务模型中的任意位置,可谓“即插即用”

Non-local 的自注意力结构设计?

  • Non-local-20230408143235
  • 上图是 Non-local 选择Embedded Gaussian作为 f 函数设计的 Non-local block,模块最终输出是 zi=Wzyi+xi\mathbf{z}_i=W_z\mathbf{y}_i+\mathbf{x}_i,其中 Wz,yiW_z,y_i 是 f 函数和 g 函数计算得到,xix_i 是原始输入
  • (1)输入 X 先被编码到 T×H×W×512T\times H\times W\times 512 空间,然后再经过 reshape,dot-product,经过 softmax 归一化得到 f(xi,xj)f(x_i,x_j)
  • (2) x 经过 1 x 1 卷积得到 T×H×W×512T\times H\times W\times 512 ,reshape 后得到 g(xj)g(x_j)
  • (3) f(xi,xj)×g(xj)f (x_i, x_j) \times g(x_j) 得到注意力值,经过 1 x 1 卷积调整通道后和 x 相加

Non-local 在什么实体之间构建注意力?

  • Drawing 2023-03-18 10.43.06.excalidraw
  • 注意力矩阵 THW×THWTHW\times THW,表示 T 个样例,高宽为 HW 的矩阵,对于一个位置的注意力,是只由单个样例内的所有位置计算,还是所有样例的所有位置参与了?
  • 经过是证明,这种空间注意力不仅仅是一个样例参与,而是所有样例都参与,实际上可以忽略样例,假设 THW=18,那么就是 18 个特征点之间构建注意力矩阵 (18,18),不管这 18 个特征点是来自哪些样例,来自哪个位置,都参与了注意力矩阵的构建
  • 所以总结可以,注意力空间在一个视频帧内、多个视频帧之间构建,其构建过程针对特征点,而不是样例

什么是 Non-local means (NLM)?

  • 图像平滑-20230520224309-1
  • 局部降噪算法:均值滤波、中值滤波等,都是使用一个固定的 Kernel 对图像进行一个滤波操作。这种算法被称之为局部算法。“局部均值”滤波器采用目标像素周围的一组像素的平均值来平滑图像
  • NLM:图像去噪的一种算法。与“局部均值”滤波器不同,非局部均值过滤采用图像中所有像素的平均值,并根据这些像素与目标像素的相似程度进行加权。与局部均值算法相比,这导致滤波后清晰度更高,图像中的细节损失更少
  • NLM 的实现:通过在图像块中进行搜索,通过计算滑动窗口与指定窗口的欧氏距离,从而它们之间的相似程度,从而确定加权平均的值,进行滤波操作,其中 W(i,j)W(i,j) 表示加权平均的 kernel 值,由两个块之间的相似度决定; Opencv 使用 cv: : fastNlMeansDenoisingColored 可快速执行 NLM

    NL[v](i)=jIw(i,j)v(j),NL[v](i)=\sum\limits_{j\in I}w(i,j)v(j),