Non-local Neural Networks
受到计算机视觉的Non-local means(NLM)的影响,Non-local 提出Non-local operations,用于捕获长距离的关系,提升了语义分割的效果
什么是 Non-local operations?
- 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) 进行标准化处理以后得到的
Non-local operations 的 f 函数?
- 一个用于计算 i 和 j 相似度的函数,作者提出了四个具体的函数可以用作 f 函数
- Gaussian function: 使用一个点乘来计算相似度,配合归一化,公式类似 softmax 的过程
- Embedded Gaussian:基于上面的变换,现将 xi, xj 编码到一个空间再计算相似度
- Dot product:
- Concatenation:
Non-local operations 的 g 函数?
- 可以看做一个线性转化(Linear Embedding),可以通过空间上的1×1卷积实现,公式如下,其中 是需要学习的权重矩阵
- 这个相当于计算得到每个待加注意力位置中间变量表示,后续注意力矩阵乘这个中间变量表示,得到加注意力的结果
什么是 Non-local?
- 非局部神经网络模型(Non-local)用于有效捕捉序列中各个元素间的依赖关系。在这里,所谓的序列可以是单幅图像的不同位置(即空间序列),也可以是视频中的不同帧(即时间序列),还可以是视频中不同帧的不同位置(即时空序列)
- Non-local 网络更像是一个通用的“积木”,可以将其嵌入到任意具体视觉任务模型中的任意位置,可谓“即插即用”
Non-local 的自注意力结构设计?
- 上图是 Non-local 选择Embedded Gaussian作为 f 函数设计的 Non-local block,模块最终输出是 ,其中 是 f 函数和 g 函数计算得到, 是原始输入
- (1)输入 X 先被编码到 空间,然后再经过 reshape,dot-product,经过 softmax 归一化得到
- (2) x 经过 1 x 1 卷积得到 ,reshape 后得到
- (3) 得到注意力值,经过 1 x 1 卷积调整通道后和 x 相加
Non-local 在什么实体之间构建注意力?
- 注意力矩阵 ,表示 T 个样例,高宽为 HW 的矩阵,对于一个位置的注意力,是只由单个样例内的所有位置计算,还是所有样例的所有位置参与了?
- 经过是证明,这种空间注意力不仅仅是一个样例参与,而是所有样例都参与,实际上可以忽略样例,假设 THW=18,那么就是 18 个特征点之间构建注意力矩阵 (18,18),不管这 18 个特征点是来自哪些样例,来自哪个位置,都参与了注意力矩阵的构建
- 所以总结可以,注意力空间在一个视频帧内、多个视频帧之间构建,其构建过程针对特征点,而不是样例
什么是 Non-local means (NLM)?
- 局部降噪算法:均值滤波、中值滤波等,都是使用一个固定的 Kernel 对图像进行一个滤波操作。这种算法被称之为局部算法。“局部均值”滤波器采用目标像素周围的一组像素的平均值来平滑图像
- NLM:图像去噪的一种算法。与“局部均值”滤波器不同,非局部均值过滤采用图像中所有像素的平均值,并根据这些像素与目标像素的相似程度进行加权。与局部均值算法相比,这导致滤波后清晰度更高,图像中的细节损失更少
- NLM 的实现:通过在图像块中进行搜索,通过计算滑动窗口与指定窗口的欧氏距离,从而它们之间的相似程度,从而确定加权平均的值,进行滤波操作,其中 表示加权平均的 kernel 值,由两个块之间的相似度决定; Opencv 使用 cv: : fastNlMeansDenoisingColored 可快速执行 NLM