deeplab v3+ 图像语义分割

发展历程

FCN,端到端的语义分割,将端到端的卷积网络推广到语义分割中;重新将预训练好的Imagenet网络用于分割问题中;使用反卷积层进行上采样;提出了跳跃连接来改善上采样的粗糙程度。


结构如下



segnet

将最大池化指数转移至解码器中,改善了分割分辨率。

具体解释:

在FCN网络中,通过上卷积层和一些跳跃连接产生了粗糙的分割图,为了提升效果而引入了更多的跳跃连接。

扫描二维码关注公众号,回复: 1113854 查看本文章

然而,FCN网络仅仅复制了编码器特征,而Segnet网络复制了最大池化指数。这使得在内存使用上,SegNet比FCN更为高效



UNET编码器-解码器结构,

deeplab v1 v2使用了空洞卷积;提出了在空间维度上实现金字塔型的空洞池化atrous spatial pyramid pooling(ASPP);使用了全连接条件随机场

缺点:DeepLab得到的预测结果只有原始输入的1/8大小。

deeplabv3改进了空间维度上的金字塔空洞池化方法(ASPP);该模块级联了多个空洞卷积结构。

示例代码

with tf.variable_scope("aspp"):
  if output_stride not in [8, 16]:
    raise ValueError('output_stride must be either 8 or 16.')

  atrous_rates = [6, 12, 18]
  if output_stride == 8:
    atrous_rates = [2*rate for rate in atrous_rates]

  with tf.contrib.slim.arg_scope(resnet_v2.resnet_arg_scope(batch_norm_decay=batch_norm_decay)):
    with arg_scope([layers.batch_norm], is_training=is_training):
      inputs_size = tf.shape(inputs)[1:3]
      # (a) one 1×1 convolution and three 3×3 convolutions with rates = (6, 12, 18) when output stride = 16.
      # the rates are doubled when output stride = 8.
      conv_1x1 = layers_lib.conv2d(inputs, depth, [1, 1], stride=1, scope="conv_1x1")
      conv_3x3_1 = layers_lib.conv2d(inputs, depth, [3, 3], stride=1, rate=atrous_rates[0], scope='conv_3x3_1')
      conv_3x3_2 = layers_lib.conv2d(inputs, depth, [3, 3], stride=1, rate=atrous_rates[1], scope='conv_3x3_2')
      conv_3x3_3 = layers_lib.conv2d(inputs, depth, [3, 3], stride=1, rate=atrous_rates[2], scope='conv_3x3_3')

      # (b) the image-level features
      with tf.variable_scope("image_level_features"):
        # global average pooling
        image_level_features = tf.reduce_mean(inputs, [1, 2], name='global_average_pooling', keepdims=True)
        # 1×1 convolution with 256 filters( and batch normalization)
        image_level_features = layers_lib.conv2d(image_level_features, depth, [1, 1], stride=1, scope='conv_1x1')
        # bilinearly upsample features
        image_level_features = tf.image.resize_bilinear(image_level_features, inputs_size, name='upsample')

      net = tf.concat([conv_1x1, conv_3x3_1, conv_3x3_2, conv_3x3_3, image_level_features], axis=3, name='concat')
      net = layers_lib.conv2d(net, depth, [1, 1], stride=1, scope='conv_1x1_concat')

      return net


                    正文


摘要

    空间金字塔池模块或编码 - 解码器结构被用于深度神经网络用于语义分割任务。前一种网络能够通过以多种速率和多个有效视场探测具有滤波器或汇集操作的输入特征来对多尺度上下文信息进行编码,而后一种网络能够通过逐渐恢复空间信息来捕获更清晰的对象边界。在这项工作中,我们建议结合两种方法的优点。特别,我们提出的模型DeepLabv3 +通过添加一个简单而有效的解码器模块来扩展DeepLabv3,以细化分割结果,尤其是沿着对象边界。我们进一步探索Xception模型,并将深度可分离卷积应用于Atrous Spatial Pyramid Pooling和解码器模块,从而形成更快更强的编码器 - 解码器网络。我们证明了该模型对PASCAL VOC 2012语义图像分割数据集的有效性,并且在没有任何后期处理的情况下在测试集上实现了89%的性能。

introduction

    语义分割的目标是将语义标签分配给图像中的每个像素[17,52,13,83,5]是计算机视觉中的一个基本主题。 基于完全卷积神经网络[64,49]的深卷积神经网络[41,38,64,68,70]相对于依赖手工特征的系统显示出惊人的进步[28,65,36,39,22,79 基准任务。 在这项工作中,我们考虑了两种类型的神经网络,它们使用空间金字塔池模块[23,40,26]或编码器 - 解码器结构[61,3]进行语义分割,其中前者通过将特征 不同的分辨率,而后者能够获得清晰的物体边界。

    为了捕获多尺度的上下文信息,DeepLabv3 [10]应用了几种不同速率的并行非线性卷积(称为Atrous Spatial PyramidPooling,或ASPP),而PSPNet [81]在不同的网格尺度上执行池操作。尽管丰富的语义信息被编码在最后的特征图中,

 由于网络骨干网内的跨步操作的汇集或卷积,丢失了与对象边界有关的详细信息。这可以通过应用无限卷积来提取更密集的特征映射来缓解。然而,鉴于最先进的神经网络[38,68,70,27,12]和有限的GPU存储器的设计,提取输出特征图的计算上是禁止的,该输出特征图比输入小8倍甚至4倍解析度。以ResNet-101 [27]为例,当应用非均匀卷积来提取比输入分辨率小16倍的输出特征时,最后3个残差块(9层)内的特征必须被扩大。更糟糕的是,如果需要比输入小8倍的输出特性,则会影响26个残留块(78层!)。因此,如果为这种类型的模型提取更密集的输出特征,则计算密集。另一方面,编码器 - 解码器模型[61,3]使得编码器路径中的计算速度更快(因为没有特征被扩大),并逐渐恢复解码器路径中尖锐的物体边界。试图结合两种方法的优点,我们建议通过结合多尺度上下文信息来丰富编码器 - 解码器网络中的编码器模块

    具体来说,我们提出的称为DeepLabv3 +的模型通过添加简单而有效的解码器模块来扩展DeepLabv3 [10],以恢复对象边界,如图1所示。丰富的语义信息被编码在DeepLabv3的输出中,卷积允许人们根据计算资源的预算来控制编码器特征的密度。此外,解码器模块允许详细的对象边界恢复。
在最近深度可分离的卷积成功[67,71,12,31,80]的推动下,我们也探索了这一操作,并通过采用类似于[60]的Xception模型[12],在速度和准确性两方面显示出改进,用于语义分割的任务,并且将有害的可分离卷积应用于ASPP和解码器模块。最后,我们证明了该模型在PASCAL VOC 2012语义分割基准测试中的有效性,并且在没有任何后期处理的情况下在测试集上获得了89.0%的性能,从而设置了一个新的最新技术。

总之,我们的贡献是:

我们提出了一种新型的编码器 - 解码器结构,它采用DeepLabv3作为强大的编码器模块和简单而有效的解码器模块。
•在我们提出的编码器 - 解码器结构中,可以任意控制提取的编码器特性的分辨率,通过无量级卷积进行折衷精度和运行时间,这对于现有的编码器 - 解码器模型是不可能的。
•我们针对分割任务调整Xception模型,并将深度可分离卷积应用于ASPP模块和解码器模块,从而形成更快更强的编码器 - 解码器网络。
•我们提出的模型在PASCAL VOC 2012数据集上获得了最新的最新性能。 我们还提供设计选择和型号变体的详细分析。


        

猜你喜欢

转载自blog.csdn.net/heavenpeien/article/details/80135529