金字塔场景解析网络(Pyramid Scene Parsing Network )

引言

基于语义分割的场景解析是计算机视觉中的基本主题。目标是为图像中的每个像素分配一个类别标签。场景解析提供了对场景的完整理解。它预测每个元素的标签、位置和形状。

场景解析的难度与场景和标签的多样性密切相关

金字塔场景解析网络(Pyramid Scene Parsing Network )_第1张图片

最先进的场景解析框架主要基于全卷积网络 (FCN) [26]。基于深度卷积神经网络 (CNN) 的方法提高了对对象的动态理解。

对于准确的场景感知,知识图依赖于场景上下文的先验信息。我们发现,当前基于FCN的模型的主要问题是缺乏利用全局场景类别线索的合适策略。对于典型的复杂场景理解,以前为了获得全局图像级别的特征,空间金字塔池 [18] 被广泛使用,其中空间统计为整体场景解释提供了良好的描述符。空间金字塔池网络 [12] 进一步增强了能力。 

与这些方法不同,为了结合合适的全局特征,我们提出了金字塔场景解析网络 (PSPNet)。除了用于像素预测的传统扩张型FCN [3,40] 之外,我们还将像素级特征扩展到专门设计的全局金字塔池。局部和全局线索共同使最终预测更加可靠。我们还提出了一种深度监督损失的优化策略。

相关工作

在强大的深度神经网络 [17,444,34,13] 的驱动下,像场景解析和语义分割这样的像素级预测任务通过用卷积层代替分类中的全连接层而获得了巨大的进步 [26]。为了扩大神经网络的感受域,[3,40] 方法使用了扩张卷积。Noh等 [30] 提出了一种具有反卷积网络的粗到细结构来学习分段掩模。我们的基线网络是FCN和扩张网络 [26,3]。

其他工作主要朝两个方向进行。一是 [26、3、5、39、11] 具有多尺度特征。由于在深度网络中,高层特征包含更多的语义含义和更少的位置信息。结合多尺度特征可以提高性能

另一个方向是基于结构预测。之前的工作 [3] 使用条件随机场 (CRF) 作为后处理来完善分割结果。以下方法 [25,41,1] 通过端到端建模改进了网络。这两个方向都改善了场景解析的定位能力,其中预测的语义边界适合对象。然而,在复杂的场景中仍然有很大的空间来利用必要的信息。

为了充分利用全局图像水平的先验知识来理解不同的场景,[18,27] 的方法提取了具有传统特征的全局上下文信息,而不是从深度神经网络中提取的。在对象检测框架下也进行了类似的改进 [35]。Liu等 [24] 证明了用FCN进行全局平均池化可以改善语义分割结果。但是,我们的实验表明,对于具有挑战性的ad20k数据,这些全局描述符的代表性不足。因此,与 [24] 中的全局池不同,我们通过金字塔场景解析网络通过基于不同区域的上下文聚合来利用全局上下文信息的能力。

Pyramid Scene Parsing Network

不匹配的关系

上下文关系是普遍且重要的,尤其是对于复杂的场景理解而言。例如,一架飞机可能在跑道上或在空中飞行,而不在道路上。对于图2中的第一排示例,FCN根据其外观将黄色框中的船预测为 “汽车”。但是众所周知,汽车很少在河上行驶。缺乏收集上下文信息的能力会增加错误分类的机会

金字塔场景解析网络(Pyramid Scene Parsing Network )_第2张图片

混淆类别

在ade20k数据集 [43] 中有许多类标签对在分类上很混乱。例子是田野和大地;  墙壁,房屋,建筑物和摩天大楼。它们的外观相似。在图2的第二行中,FCN预测盒子中的对象是摩天大楼的一部分和建筑物的一部分。这些结果应该被排除在外,这样整个物体要么是摩天大楼,要么是建筑物,但不是两者都有。可以通过利用类别之间的关系来解决此问题。

不显眼的类别

场景包含任意大小的对象/东西。很难找到一些小尺寸的东西,例如路灯和招牌,尽管它们可能非常重要。相反,大物体或东西可能会超出FCN的感受野,从而导致不连续的预测。如图2的第三行所示,枕头具有与片材相似的外观。忽略全局场景类别可能无法解析枕头。为了提高非常小或大的对象的性能,应该特别注意包含不明显类别内容的不同子区域。

 总结这些观察结果,许多错误与不同接受领域的上下文关系和全局信息部分或完全相关。因此,具有合适的全局场景级先验的深度网络可以大大提高场景解析的性能

金字塔池化模块

通过以上分析,我们在下面介绍了金字塔池模块,该模块在经验上被证明是有效的全局上下文先验

深度神经网络中,感受野的大小可以大致表示我们使用上下文信息的程度。尽管理论上ResNet [13] 的感受野已经大于输入图像,但Zhou等人 [42] 表明,CNN的经验感受野比理论感受野小得多,尤其是在高层。这使得许多网络之前没有充分融入全局先验

全局平均池是一个很好的基线模型,作为全局上下文先验,它通常用于图像分类任务 [34,13]。在 [24] 中,它成功地应用于语义分割。但是关于ade20k中的复杂场景图像 [43],这种策略不足以涵盖必要的信息。这些场景图像中的像素被注释为许多东西和对象。直接将它们融合以形成单个向量可能会失去空间关系并导致歧义。在这方面,全局上下文信息以及子区域上下文有助于区分各种类别可以将来自不同子区域的信息融合在一起。

在 [12] 中,由金字塔池化生成的不同级别的特征图最终被展平并级联,以馈送到完全连接的层中进行分类。此全局先验旨在消除CNN的固定大小约束以进行图像分类为了进一步减少不同子区域之间的上下文信息丢失,我们提出了一种分层的全局先验信息,该先验信息包含具有不同规模并且在不同子区域之间变化的信息。我们将其称为金字塔池化模块,用于在深度神经网络的最终层特征图上进行全局场景先验构建,如图3的部分 (c) 所示。

金字塔场景解析网络(Pyramid Scene Parsing Network )_第3张图片

import torch
import torch.nn as nn
import torch.nn.functional as F


class PPM(nn.Module):
    def __init__(self, in_dim, out_dim, bins):
        super(PPM, self).__init__()
        self.features = []
        for bin in bins:
            self.features.append(nn.Sequential(
                nn.AdaptiveAvgPool2d(bin),
                nn.Conv2d(in_dim, out_dim, kernel_size=1, bias=False),
                nn.BatchNorm2d(out_dim),
                nn.ReLU(inplace=True)
            ))
        self.features = nn.ModuleList(self.features)

    def forward(self, x):
        x_size = x.size()
        out = [x]
        for f in self.features:
            temp = f(x)
            temp = F.interpolate(temp, x_size[2:], mode="bilinear", align_corners=True)
            out.append(temp)

        return torch.cat(out, 1)


if __name__ == "__main__":
    # inputs: (B, C, H, W)
    inputs = torch.rand((8, 3, 16, 16))
    # PPM params: (in_dim, out_dim, sizeList)
    ppm = PPM(3, 2, [1, 2, 3, 6])
    # outputs: (B=8, C=3+2*4=11, H=16, W=16)
    outputs = ppm(inputs)
    print("Outputs shape:", outputs.size())

 我们提议的PSPNet概述。给定一个输入图像 (a),我们首先使用CNN来获得最后一个卷积层 (b) 的特征图,然后应用金字塔解析模块来收获不同的子区域表示,然后通过上采样和级联层来形成最终的特征表示,在 (c) 中同时携带本地和全局上下文信息。最后,将表示形式馈入卷积层以获得最终的每像素预测 (d)。

金字塔池化模块融合了四个不同金字塔尺度下的特征。红色突出显示的最粗级别是全局池化以生成单个bin输出。下面的金字塔级将特征图分成不同的子区域,并形成不同位置的汇集表示。金字塔池模块中不同级别的输出包含具有不同大小的特征图。为了保持全局特征的权重,如果金字塔的级别大小为N,我们在每个金字塔级别之后使用1 × 1卷积层将上下文表示的维数降低到原始的1/N。然后,我们通过双线性插值直接对低维特征图进行上采样,以获得与原始特征图相同大小的特征。最后,将不同级别的功能串联为最终的金字塔池全局功能。

金字塔级别的数量和每个级别的大小可以修改。它们与馈入金字塔池层的特征图的大小有关。该结构通过在几步中采用不同大小的池核来抽象不同的子区域。因此,多阶段内核应在表示上保持合理的差距。我们的金字塔池模块是一个四级模块,垃圾箱大小分别为1 × 1、2 × 2、3 × 3和6 × 6

网络架构

使用金字塔池模块,我们提出了金字塔场景解析网络 (PSPNet),如图3所示。给定图3(a) 中的输入图像,我们使用具有扩张网络策略 [3,40] 的预训练的ResNet [13] 模型来提取特征图。最终的特征图尺寸是输入图像的1/8,如图3(b) 所示。我们使用 (c) 中所示的金字塔池模块来收集上下文信息使用我们的4级金字塔,池化内核覆盖了图像的整个,一半和小部分它们被融合为全局先验。然后,我们在 (c) 的最后部分将先验与原始特征图连接。之后是一个卷积层,以生成 (d) 中的最终预测图。

为了解释我们的结构,PSPNet为像素级场景解析提供了有效的全局上下文先验金字塔池模块可以收集信息级别,比全局池化更具代表性 [24]。就计算成本而言,与原始的扩张型FCN网络相比,我们的PSPNet并没有增加太多。(这里可以使用PSPNet代替SE中的全局平均池化)

你可能感兴趣的:(经典的神经网络结构,深度学习,计算机视觉,人工智能)