PFNet:Camouflaged Object Segmentation with Distraction Mining——论文简述

一、简介

针对伪装目标检测,本论文提出了Positioning and Focus Network (PFNet),该网络包含两个模块,定位(positioning module,PM)和聚焦(focus module,FM)。其中,定位模块从全局定位目标可能所在的位置,聚焦模块对区域进行识别并消除干扰来完善分割结果。

二、模型

在这里插入图片描述
对于一张RGB图像,先用Resnet-50做backbone,提取出的多层特征,再送入四层卷积层减小通道数量;然后通过PM模块定位可能的目标位置;最后通过多个FM模块来发现和移除 false-positive 和 false-negative 的 distractions。

    def __init__(self, backbone_path=None):
        super(PFNet, self).__init__()
        # params

        # backbone
        resnet50 = resnet.resnet50(backbone_path)
        self.layer0 = nn.Sequential(resnet50.conv1, resnet50.bn1, resnet50.relu)
        self.layer1 = nn.Sequential(resnet50.maxpool, resnet50.layer1)
        self.layer2 = resnet50.layer2
        self.layer3 = resnet50.layer3
        self.layer4 = resnet50.layer4

        # channel reduction
        self.cr4 = nn.Sequential(nn.Conv2d(2048, 512, 3, 1, 1), nn.BatchNorm2d(512), nn.ReLU())
        self.cr3 = nn.Sequential(nn.Conv2d(1024, 256, 3, 1, 1), nn.BatchNorm2d(256), nn.ReLU())
        self.cr2 = nn.Sequential(nn.Conv2d(512, 128, 3, 1, 1), nn.BatchNorm2d(128), nn.ReLU())
        self.cr1 = nn.Sequential(nn.Conv2d(256, 64, 3, 1, 1), nn.BatchNorm2d(64), nn.ReLU())

        # positioning
        self.positioning = Positioning(512)

        # focus
        self.focus3 = Focus(256, 512)
        self.focus2 = Focus(128, 256)
        self.focus1 = Focus(64, 128)

        for m in self.modules():
            if isinstance(m, nn.ReLU):
                m.inplace = True

2.1 Positioning Module

PM包括一个 channel attention block 和一个 spatial attention block

channel attention block中:
通过输入的 C x H x W 的张量 F 获得 k、q、v,在 C 上做attention,i 和 j 的关系是C上的关系,输出得到 F’,对于 F‘ 乘上一个可学习的超参数,并累加一个identify mapping。
在这里插入图片描述
在这里插入图片描述
spatial attention block中:
首先对 F’ 用1 x 1的卷积改变其通道数来获得q’ 和 k’,v‘ 的通道数不变,在空间上做attention,i 和 j 的关系是位置 N=H x W上的关系,接下来的操作同 CA 类似。

2.2 Focus Module

FM的目的就是发现和消除 false-positive 和 false-negative 的错误预测。

具体步骤见如下代码及注释。

    def forward(self, x, y, in_map):
        # x; current-level features
        # y: higher-level features
        # in_map: higher-level prediction

        up = self.up(y)  # Conv+BN+ReLU+双线性插值上采样

        input_map = self.input_map(in_map)
        f_feature = x * input_map  # foreground-attentive features
        b_feature = x * (1 - input_map)  # background-attentive features

        fp = self.fp(f_feature)  # Context Exploration
        fn = self.fn(b_feature)  # Context Exploration

        refine1 = up - (self.alpha * fp)  # 抑制模糊的背景(false-positive)
        refine1 = self.bn1(refine1)
        refine1 = self.relu1(refine1)

        refine2 = refine1 + (self.beta * fn)  # 增强丢失的目标(false-negative)
        refine2 = self.bn2(refine2)
        refine2 = self.relu2(refine2)

        output_map = self.output_map(refine2)

        return refine2, output_map

其中的Context Exploration Block如下所示。
DConv是膨胀卷积,目的是增加模型的感受野。
在这里插入图片描述
通过CE,模型能获得大尺度上感知上下文的特征的能力。

2.3 损失函数

在PFNet中有4个输出的预测值,一个是PM,另外的是FM,

对于PM模块,使用bce和iou损失。
在这里插入图片描述
对于FM模块,使用weighted bce和weighted iou损失。
在这里插入图片描述
最后的一个总损失即:
在这里插入图片描述

三、实验

在这里插入图片描述
在这里插入图片描述
消融实验:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值