CFIDNet: cascaded feature interaction decoder for RGB-D salient object detection

CFIDNet: cascaded feature interaction decoder for RGB-D salient object detection

CFIDNET:用于RGB-D显著目标检测的级联特征交互解码器 

Neural Computing and Applications (2022)

一、Motivation

1. 现有的rgb-d SOD模型容易忽略特定于模态的特征,并通过简单的逐元素加法或乘法来融合多模态特征。因此,当遇到不准确或模糊的深度图像时,显著图的质量可能会因此而降低。

2. 此外,许多模型采用U形架构,逐层集成多层次特征。尽管低级别特征可以逐渐完善,但对高级特征的增强却很少关注,这可能会导致次优结果。

二、Solution

a novel network named CFIDNet

具体来说,作者设计了feature-enhanced module【FEM,从深度图像中挖掘出信息丰富的深度线索,并利用RGBdepth模式之间的互补信息来增强RGB特征。

此外,作者提出了feature refinement module[FRM]来利用多级特征之间的多尺度互补信息,并通过应用残差连接来完善这些特征。

然后提出了级联特征交互解码器(CFID)来迭代地细化多级特征。

三、CFIDNet

3.1 Overview of the proposed CFIDNet

考虑到深度图的质量较低的因素,RGB特征一般保持更多的语义信息,作者认为深度特征不是很重要,因此把它辅助特征。CFIDNet 由两种模块组成,包括 CFID 和骨干编码器。 采用常用的 ResNet-50 作为骨干网络。

 

分别从 RGB 和 depth 模态中提取五个阶段的特征。对于每层侧输出特征使用 1 *1 卷积层将通道数减少到 64,然后将每对多模态特征输入 FEM 以生成相应的增强特征。利用一系列 FID 对多级融合特征进行迭代细化。 值得注意的是,FID 的输入特征的空间分辨率与相应输出特征的空间分辨率相同。 因此,前一个 FID 的输出可以直接用作后一个 FID 的输入。

3.2 Feature-enhanced module (FEM)-特征增强模块

1.深度特征经过通道注意力机制,再与输入的depth特征相乘得到

2.相乘之后的结果 经过3*3的卷积层之后再与本身相加,得到结果

3.与输入的rgb特征进行拼接,再经过两层3*3的卷积与rgb相加,得到最终的输出结果

 

'''通道注意力'''
class ChannelAttention(nn.Module):
    def __init__(self, channel):
        super(ChannelAttention, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1) #自适应平均池化,指定输出(H,W),通道数不发生变化
        self.fc1 = nn.Sequential(nn.Linear(channel, channel // 4, bias=False), nn.ReLU(inplace=True))
        self.relu1 = nn.ReLU(inplace=True)
        self.fc2 = nn.Sequential(nn.Linear(channel // 4, channel, bias=False), nn.Sigmoid())

    def forward(self, x): #x为深度特征
        n, c, h, w = x.shape
        y1 = self.avg_pool(x) #自适应平均池化,指定输出(H,W),通道数不发生变化
        y1 = y1.reshape(n, -1) #转化为n行
        y = self.fc2(self.fc1(y1)) #两次全连接层,sigmoid
        y = y.reshape(n, c, 1, 1).expand_as(x).clone() # expand_as扩展张量维度扩展为与x相同的size
        y = x * y #与开始输入的depth相乘
        return y

'''FEM模块'''
class CrossModality(nn.Module):
    def __init__(self, config):
        super(CrossModality, self).__init__()
        channel = config.channels
        self.ca = ChannelAttention(channel)

        self.conv1 = nn.Sequential(
            nn.Conv2d(channel, channel, 3, 1, 1, bias=False),
            norm_layer(channel),
        )
        self.conv2 = nn.Sequential(
            nn.Conv2d(2 * channel, channel, 3, 1, 1, bias=False),
            norm_layer(channel),
            nn.ReLU(inplace=True),
            nn.Conv2d(channel, channel, 3, 1, 1, bias=False),
            norm_layer(channel)
        )
        self.relu = nn.ReLU(inplace=True)
        self.relu2 = nn.ReLU(inplace=True)

    def forward(self, rgb_feature, depth_feature):
        depth_feature = self.ca(depth_feature) #1
        depth_feature = self.relu(depth_feature + self.conv1(depth_feature))#2
        rgb_feature = rgb_feature + self.conv2(torch.cat([rgb_feature, depth_feature], dim=1))
        return self.relu2(rgb_feature)#3

3.3 Feature refinement module (FRM)-细化多层次特征

将输入的多级特征分为三组,并使用FRM细化。

首先来自三个相邻层的多级特征级联。  输入的高级、中级和低级特征记为 Fh,Fm, Fl, 由于这些特征的空间分辨率不同,我们通过使用双线性插值操作将 Fh 调整为与 Fm 相同的大小。 然后应用卷积层进行细化。 类似地,将步长为 2 的卷积层应用于 Fl。 这三个特征的融合过程表述为:

 3.4 Cascaded feature interaction decoder (CFID)

 CFID包含多个子解码器FID,迭代地细化多级特征。每个FID使用三个 FRM 来逐步完善所有级别的特征。 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值