Zoom In and Out: A Mixed-scale Triplet Network for Camouflaged Object Detection

Pang_Zoom_in_and_Out_A_Mixed-Scale_Triplet_Network_for_Camouflaged_CVPR_2022_paper.pdf

GitHub - lartpang/ZoomNet: Zoom In and Out: A Mixed-scale Triplet Network for Camouflaged Object Detection, CVPR 2022

论文解读:Zoom In and Out: A Mixed-scale Triplet Network for Camouflaged Object Detection(CVPR 2022)

1. Introduction

伪装对象检测(COD)尝试分割视觉上融入周围环境的对象,除了伪装对象与其背景之间的高度内在相似性外,这些对象通常具有不同的规模,外观模糊,甚至严重遮挡的现象。当前的COD detectors容易受到背景环境干扰因素的影响。因此,很难为伪装对象挖掘出区分性和微妙的语义线索,导致无法从混乱的背景和一些不确定(低置信度)区域的预测中清楚地分割伪装的对象。为了准确地找到场景中模糊或伪装的物体,人类可能会尝试通过放大和缩小(重新缩放)图像来参考和比较不同比例下的形状或外观的变化。受到人类的这种特定行为模式激励,论文提出了一种混合尺度三元组ZoomNet,它显著提高了现有的伪装对象检测性能。

论文贡献如下:

1)提出了一个混合尺度三元组网络网络ZoomNet,它可以通过表征和统一不同缩放的尺度特异性特征以及优化策略来可靠地捕获复杂场景中的对象。

2)为了获得伪装对象的判别特征表示,设计了SIU和HMU来提炼,聚合和加强特定于尺度微妙的语义表示,以实现准确的伪装对象检测。

3)提出了一种简单而有效的优化增强策略UAL,它可以显著抑制来自背景的不确定性和干扰,而无需增加额外的参数。

2. Method

Untitled

受到人类在观察复杂场景时的缩放策略的启发,不同的缩放比例图像通常包含其特定信息。聚合不同尺度上的差异化信息将有助于从复杂的场景中探索不起眼但有价值的线索,从而促进伪装对象检测。

将同一图像的不同分辨率输入网络,这些尺度分为一个主图图像大小和作为辅助尺度的1.5倍以及0.5倍主图像。后者是通过重新缩放前者来模仿放大和缩小的操作。利用共享的特征编码器来提取不同尺度上的特征,并将它们馈送到尺度合并层。 为了集成这些包含丰富的特定于比例信息的特征,基于注意力感知设计了一尺度集成单(SIU),这将在很大程度上增强模型,以提炼关键和信息丰富的语义线索,以捕获难以检测的伪装对象。之后建立分级混合尺度单元(HMU),以自上而下的方式逐步集成多级特征,以增强混合尺度特征表示。 它进一步增加了感受野范围,并使模块内的特征表示多样化,并且生成分割图。论文还设计了不确定性感知损失(UAL)来协助BCE损失,使模型能够区分这些不确定的区域并产生准确可靠的预测。

2.1 Triplet Feature Encoder

使用ResNet-50作为主干网络,C-Net使用ASPP来捕获全局上下文信息,ASPP层由五个CBR(Conv3×3-BN-ReLU)分支组成。它们的内核大小和感受野大小为1,3,3,3,1和1,2,5,7,1。

ASPP 层结构图下所示

class ASPP(nn.Module):
    def __init__(self, in_dim, out_dim):
        super(ASPP, self).__init__()
        self.conv1 = ConvBNReLU(in_dim, out_dim, kernel_size=1)
        self.conv2 = ConvBNReLU(in_dim, out_dim, kernel_size=3, dilation=2, padding=2)
        self.conv3 = ConvBNReLU(in_dim, out_dim, kernel_size=3, dilation=5, padding=5)
        self.conv4 = ConvBNReLU(in_dim, out_dim, kernel_size=3, dilation=7, padding=7)
        self.conv5 = ConvBNReLU(in_dim, out_dim, kernel_size=1)
        self.fuse = ConvBNReLU(5 * out_dim, out_dim, 3, 1, 1)

    def forward(self, x):
        conv1 = self.conv1(x)
        conv2 = self.conv2(x)
        conv3 = self.conv3(x)
        conv4 = self.conv4(x)
        # global average pooling operation and an up-sampling operation
        conv5 = self.conv5(cus_sample(x.mean((2, 3), keepdim=True), mode="size", factors=x.size()[2:]))
        return self.fuse(torch.cat((conv1, conv2, conv3, conv4, conv5), 1))

2.2 Scale Merging Layer

设计了一个基于注意力的SIU来筛选并结合特定于尺度的信息,如图所示: