Pyramid Feature Attention Network for Saliency detection------论文理解

代码链接:https://github.com/CaitinZhao/cvpr2019_Pyramid-Feature-Attention-Network-for-Saliency-detection

1. 概述

在显著性检测算法中,如何提取到更有效的特征是该任务的难点之一。如今算法多通过融合多尺度特征来提取更有效的特征,但并不是所有的特征都是有效的,而且有些可能导致相反的效果。

为了解决该问题,我们通过金字塔特征注意网络来注意高语义特征低维空间结构特征
首先,使用上下文感知金字塔特征提取(Context-aware PyramidFeatureExtraction,CPFE)模块对高级多尺度信息捕捉丰富的语义信息。

其次,在CPFE模块后加入通道注意模块( channel-wise attention,CA)以及低级特征中提取的空间注意模块( spatial attention,SA),然后将CA和SA融合。

最后,我们提出边缘保护损失,使网络学习到更多的边界定位的细节信息。


目前,最有效的显著性目标检测算法都是基于FCN网络,由多个卷积层和池化层堆叠来逐渐增加感受野大小以及获得更高级的语义信息。但池化层减小了特征映射的大小并恶化了显著对象的边界。

为了解决该现象,一些研究者通过手动提取特征将显著性目标的边界特征进行保存。但这种方法难以有效地融合单独提取的互补特征,并且很耗时。因此研究者们便开始通过融合多尺度特征来进行显著性目标检测。深层的特征通常包含全局上下文感知信息,这些信息适合于正确定位显著区域。 浅层的特征包含空间结构细节,适合于定位边界。这些方法的缺点是,融合不同尺度的特征但是并未考虑到每一层不同的贡献。

本文中,我们提出了一种新颖的显著性目标检测方法----- Pyramid Feature Attention (PFA)网络。考虑到不同级别特征图有不同的特征,低级特征图包含很多噪声,高级图只能得到一个近似区域。如图1所示。

Pyramid Feature Attention Network for Saliency detection------论文理解_第1张图片

对于低级特征来说,借鉴特征提取算法SIFT,我们设计了一个上下文感知金字塔特征提取(CPFE)模块,以获得多尺度多感受野的高级特征,然后我们使用通道注意方式(CA)来选择适当的规模和感受野以产生显著性区域。在训练中,CA将给CA模块将重要的通道赋予较大的权重。(方法参考SENet)为了产生更加精确定位显著区域的边界,我们将低级特征和边界信息融合。但并不是所有的边界信息都是有用的,我们只关注显著性物体和背景之间的边界。因此我们使用空间注意力更好的关注有效的低级特征来得到更加清晰的边界信息。

2. 网络模型

整个网络架构包括两部分:

一,上下文感知金字塔特征提取;

二,注意力机制。

Pyramid Feature Attention Network for Saliency detection------论文理解_第2张图片

2.1  上下文感知金字塔特征提取

目前CNN通过堆叠多个卷积层和池化层提取多尺度信息,但是显著性目标通常在尺寸、位置等上有着很大的变化。单纯的叠加卷积网络不能有效的处理这些复杂的变化。SIFT是一种特征检测算法,用来描述图片中局部信息。

SIFT融合尺度空间表示和金字塔多分辨率表示。尺度空间由具有相同分辨率的几个不同高斯核函数处理;金字塔多分辨率通过多个不同分辨率的下采样处理。借鉴SIFT的操作,我们使用空洞卷积用不同的感受野得到相同尺寸的特征图。在高级特征上3-3,4-3,5-3上采用空洞卷积提取多尺度特征。如图3.。

由代码中看出CFE模块是将输入进行四个分支的卷积,保证输出尺寸相同在进行拼接。

def CFE(input_tensor, filters, block_id):
    rate = [3, 5, 7]
    cfe0 = Conv2D(filters, (1, 1), padding='same', use_bias=False, name=block_id + '_cfe0')(
        input_tensor)
    cfe1 = AtrousBlock(input_tensor, filters, rate[0], block_id + '_cfe1')
    cfe2 = AtrousBlock(input_tensor, filters, rate[1], block_id + '_cfe2')
    cfe3 = AtrousBlock(input_tensor, filters, rate[2], block_id + '_cfe3')
    cfe_concat = Concatenate(name=block_id + 'concatcfe', axis=-1)([cfe0, cfe1, cfe2, cfe3])
    cfe_concat = BN(cfe_concat, block_id)
return cfe_concat

Pyramid Feature Attention Network for Saliency detection------论文理解_第3张图片

为了使最终提取的高级特征包含尺度和形状不变性的特征,我们分别使用rate为3,5,7的空洞卷积来获取上下文语义信息。

然后将三个卷积后的特征图连接到一起,通过1x1卷积降维。

之后,我们使用上下文感知信息获得三种不同的比例特征,然后将两个较小的特征上采样到最大的一个。

最后我们通过通道维数的拼接得到上下文感知金字塔特征提取模块的输出结果。

2.2 注意力机制

不同层的特征对生成显著特征图有不同的语义价值。但是目前存在的模型都是没有区分的融合多尺度特征,会导致信息的冗余。再者,不够精确的信息会导致表现的下降甚至错误的预测。过滤掉不重要的特征,更加关注有价值的信息是很重要的。因此我们在PFA模块中引入注意力机制。

由于不同级别有不同特征,我们采用高级通道注意方式和低级的空间注意力,以便选择有效功能。另外,我们不对高级特征使用空间注意力,因为高级特征包含高抽象语义,不需要过滤空间信息。低级特征也不使用通道注意机制,因为低级特征的不同通道之间几乎没有语义差异。

2.2.1 通道注意力机制

该部分类似于SENet,不再赘述。

2.2.2 空间注意力机制

低级特征往往包含很多细节信息,这些信息更容易带来坏的结果。在显著性检测中,我们希望获得显著对象和背景之间的详细边界。

本文中,我们使用空间注意力注意前景区域,而不是同等地考虑所有空间位置。为了增加感受野获得全局信息的同时不增加计算量,我们对CA模块的输出进行1xk和kx1的卷积,然后使用sigmoid对输出进行归一化。

Pyramid Feature Attention Network for Saliency detection------论文理解_第4张图片

 conv1 和conv2分别是1×k×C 和k×1×1。在实验中k设置为9。两个注意力机制详细的过程如图4所示。

'''
CPFE为对高级特征做空洞卷积过程,输出为256x256。
SA模块对高级特征CPFE的输出C345做空间注意力处理。
C1C2分别为vgg中低级特征,经过上采样拼接等操作后与SA模块的输出相乘。
最后将输出与原始的高级特征即C345相加。
'''    

    if with_CPFE:
        C3_cfe = CFE(C3, 32, 'C3_cfe')
        C4_cfe = CFE(C4, 32, 'C4_cfe')
        C5_cfe = CFE(C5, 32, 'C5_cfe')
        C5_cfe = BilinearUpsampling(upsampling=(4, 4), name='C5_cfe_up4')(C5_cfe)
        C4_cfe = BilinearUpsampling(upsampling=(2, 2), name='C4_cfe_up2')(C4_cfe)
        C345 = Concatenate(name='C345_aspp_concat', axis=-1)([C3_cfe, C4_cfe, C5_cfe])
        if with_CA:
            C345 = ChannelWiseAttention(C345, name='C345_ChannelWiseAttention_withcpfe')
    C345 = Conv2D(64, (1, 1), padding='same', name='C345_conv')(C345)
    C345 = BN(C345,'C345')
    C345 = BilinearUpsampling(upsampling=(4, 4), name='C345_up4')(C345)

    if with_SA:
        SA = SpatialAttention(C345, 'spatial_attention')
        C2 = BilinearUpsampling(upsampling=(2, 2), name='C2_up2')(C2)
        C12 = Concatenate(name='C12_concat', axis=-1)([C1, C2])
        C12 = Conv2D(64, (3, 3), padding='same', name='C12_conv')(C12)
        C12 = BN(C12, 'C12')
        C12 = Multiply(name='C12_atten_mutiply')([SA, C12])
    fea = Concatenate(name='fuse_concat',axis=-1)([C12, C345])
sa = Conv2D(1, (3, 3), padding='same', name='sa')(fea)

Pyramid Feature Attention Network for Saliency detection------论文理解_第5张图片

2.3 损失函数

待补充。

3. 实验

Pyramid Feature Attention Network for Saliency detection------论文理解_第6张图片

你可能感兴趣的:(深度学习,计算机视觉,yolo,目标检测,计算机视觉,深度学习)