现在注意力模型在计算机视觉领域应用的越来越广泛了。不光在图像分割,其他领域也应用的比较多。RAM这篇文章是应用在图像超分辨率上。这是因为应用到图像超分辨领域的注意力模型大都没有考虑超分辨和其它高层计算机视觉问题的天然不同。
作者提出了一个新的注意力模型,由针对 SR 问题优化的新的通道和空间注意力机制以及将这两者结合起来的融合机制组成
上图就是这种模型的结构图。
在以前的方法中,通道注意力(CA)大多采用平均池化或者最大池化。但是,作者认为超分辨问题旨在恢复出图像的高频成分,因此利用通道的高频特性来学习注意力更加合理。所以,这里采取方差池化,也就是求得每个通道大小为 W×H 的特征图的方差。后续步骤与之前方法类似,通过两层神经网络来预测注意力图。
在空间注意力(SA)中,每个通道代表着一种滤波器,不同的滤波器负责提取图像的不同特征。因此在这里需要区别对待不同的通道,而不是像之前的注意力机制那样直接对通道维度进行压缩。这里,作者采用了深度可分离卷积,针对每个通道的特征分别卷积得到注意力图。
这里有一个简单的利用keras和tensorflow 的实现
def RAM(input, channels,reduction_ratio=16, kernel_size=3):
# pre-attention feature extraction
x = Conv2D(channels, kernel_size, strides=1, padding='same')(input)
x = ReLU()(x)
x = Conv2D(channels, kernel_size, strides=1, padding='same')(x)
# compute attentions
_, ca = Lambda(lambda x: tf.nn.moments(x, axes=[1, 2]))(input)
ca = Dense(channels // reduction_ratio)(ca)
ca = ReLU()(ca)
ca = Dense(channels)(ca)
sa = DepthwiseConv2D(kernel_size, padding='same')(input)
fa = add([ca, sa])
fa = Activation('sigmoid')(fa)
# apply attention
x = multiply([x, fa])
return add([input, x])
整个论文的模型,是由多个RAM还有其他的上采样构成