首先介绍非局部均值的概念
非局部均值(NL-means)作为一项去噪技术,充分利用了图像中的冗余信息,在去噪的同时能最大程度地保持图像的细节特征
基本思想是:当前像素的估计值,由图像中与它具有相似邻域结构的像素加权平均得到
理论上,该算法需要在整个图像范围内判断像素间的相似度,也就是说,每处理一个像素点时,都要计算它与图像中所有像素点间的相似度。
但是考虑到效率问题,在实现的时候,我们会设定两个固定大小的窗口:搜索窗口和邻域窗口
邻域窗口在搜索窗口中滑动,根据邻域间的相似性确定像素的权值。
下图是NL-means算法执行过程
大窗口是以目标像素 x 为中心的搜索窗口
两个灰色小窗口分别是以 x 、 y 为中心的邻域窗口
其中以 y 为中心的邻域窗口在搜索窗口中滑动,通过计算两个邻域窗口间的相似程度,为 y 赋以权值 w(x,y)
(但是该算法的最大缺陷就是计算复杂度太高,程序非常耗时,导致该算法不够实用)
受到非局部均值的启发,将非局部操作定义为:
其中, x 是输入信号(图片,队列,视频,通常是特征),i 是输出位置(在空间、时间或时空中)的索引,它的响应值是通过j枚举所有可能位置来计算的
函数 f 计算 i 和所有 j 之间的相似关系
函数 g 计算输入信号在位置 j 的表示
最终的响应值通过响应因子 C(x) 进行标准化处理得到
即将所有位置对一个位置的特征加权和作为该位置的响应值
对应的非局部模块表达式为:
其中, yi 是非局部操作的输出
可以发现,这里也使用了残差连接的方式
之所以要用残差,是因为这种结构能够在不破坏原始网络结构的基础上,很方便的将非局部模块嵌入到模型当中
为了进一步提升模型效率,可以进行一些调整:
(1)将 θ,φ,g的通道数设置为输入特征的一半,这样会大大减少计算量
(2)采用抽样的方式,进一步减轻计算量,将non-local改进为如下公式:
其中,x^是x经过池化后得到,在空间域中执行这个操作,可以将成对计算的数量减少1/4
这个技巧不会改变非局部的行为,只会使计算变得更稀疏,实现起来也很简单,只需要在上图的θ,g中加一个最大池化层即可