语义分割_语义分割技巧 - CSDN
精华内容
参与话题
  • (2) Pothole语义分割:对汽车行驶场景中的路坑进行标注和语义分割 (3) Kaggle细胞核分割比赛 :利用U-Net进行Kaggle细胞核分割 本课程使用keras版本的U-Net,在Ubuntu系统上用Jupyter Notebook做项目演示。...
  • 深度学习-语义分割总结

    万次阅读 多人点赞 2018-06-30 18:11:47
    什么是语义分割对图片的每个像素都做分类。较为重要的语义分割数据集有:VOC2012 以及 MSCOCO 。 有哪几种方法传统机器学习方法:如像素级的决策树分类,参考TextonForest 以及 Random Forest based classifiers 。...

    翻译自qure.ai

    1. 什么是语义分割

      对图片的每个像素都做分类。

      较为重要的语义分割数据集有:VOC2012 以及 MSCOCO

    2. 有哪几种方法

      传统机器学习方法:如像素级的决策树分类,参考TextonForest 以及 Random Forest based classifiers 。再有就是深度学习方法。更确切地说,是卷积神经网络。

      深度学习最初流行的分割方法是,打补丁式的分类方法 ( patch classification ) 。逐像素地抽取周围像素对中心像素进行分类。由于当时的卷积网络末端都使用全连接层 ( full connected layers ) ,所以只能使用这种逐像素的分割方法。

      2014年,来自伯克利的 Fully Convolutional Networks(FCN) 卷积网络,去掉了末端的全连接层。随后的语义分割模型基本上都采用了这种结构。除了全连接层,语义分割另一个重要的问题是池化层。池化层能进一步提取抽象特征增加感受域,但是丢弃了像素的位置信息。但是语义分割需要类别标签和原图像对齐,因此需要从新引入像素的位置信息。有两种不同的架构可以解决此像素定位问题。

      第一种是编码-译码架构。编码过程通过池化层逐渐减少位置信息、抽取抽象特征;译码过程逐渐恢复位置信息。一般译码与编码间有直接的连接。该类架构中U-net 是最流行的。

      第二种架构是膨胀卷积 ( dilated convolutions ) ,抛弃了池化层。使用的卷积核如下图。

      dilated

      条件随机场的后处理 经常用来提高分割的精确度。后处理利用图像的光感强度(可理解为亮度),将周围强度相近的像素分为同一类。能提高 1-2 个百分点。

    3. 文章汇总

      按时间顺序总结八篇paper,看语义分割的结构是如何演变的。分别有FCNSegNetDilated ConvolutionsDeepLab (v1 & v2)RefineNetPSPNetLarge Kernel MattersDeepLab v3

      FCN 2014年

      主要的贡献:

      • 为语义分割引入了 端到端卷积网络,并流行开来
      • 重新利用 ImageNet 的预训练网络用于语义分割
      • 使用 反卷积层 进行上采样
      • 引入跳跃连接来改善上采样粗糙的像素定位

      说明:

      比较重要的发现是,分类网络中的全连接层可以看作对输入的全域卷积操作,这种转换能使计算更为高效,并且能重新利用 ImageNet 的预训练网络。经过多层卷积及池化操作后,需要进行上采样,FCN 使用反卷积(可学习)取代简单的线性插值算法进行上采样。

    fcn

    SegNet 2015年

    编码-译码架构

    主要贡献:

    • 将池化层结果应用到译码过程。引入了更多的编码信息。使用的是pooling indices而不是直接复制特征,只是将编码过程中 pool 的位置记下来,在 uppooling 是使用该信息进行 pooling 。


    poolindex

    segnet

    U-Net 2015
    U-Net 有更规整的网络结构,通过将编码器的每层结果拼接到译码器中得到更好的结果。

    unet

    Dilated Convolutions 2015年

    通过膨胀卷积操作聚合多尺度的信息

    主要贡献:

    • 使用膨胀卷积
    • 提出 ’context module‘ ,用来聚合多尺度的信息

      说明:

      池化在分类网络中能够扩大感知域,同样降低了分辨率。所以作者提出了膨胀卷积层。

      dilated conv

    dilated
    (a) 原始的 3×33×3卷积,1-dilated,感受野为 3×33×3;

    (b) 在(a)的基础上进行 3×33×3卷积,2-dilated,感受野为 7×77×7;

    (c) 在(b)的基础上进行 3×33×3卷积,4-dilated,感受野为 15×1515×15;

    由于padding和卷积的stride=1,卷积前后feature map大小可以保持不变,但每个元素的感受野指数增大。Link

    膨胀卷积在 DeepLab 中也被称为暗黑卷积 (atrous convolution) 。此卷积能够极大的扩大感知域同时不减小空间维度。本模型移去了VGG网的最后两层池化层,并且其后续的卷积层都采用膨胀卷积。

    作者还训练了一个模块,输入卷积结果,级联了不同膨胀系数的膨胀卷积层的,输出和输入有一样的尺寸,因此此模块能够提取不同规模特征中的信息,得到更精确的分割结果。

    最后预测结果图是原图的八分之一大小,文章使用插值得到最后的分割结果。

    DeepLab (v1 & v2) 2014 & 2016

    主要贡献:

    • 使用膨胀卷积
    • 提出了暗黑空间金字塔池化 (ASPP),融合了不同尺度的信息。
    • 使用全连接的条件随机场

      说明:

      基本网络和 dilated convolutions 一致。最后的结构化预测 (精细分割) 采用全连接的 CDF。提出了ASPP,但结果不如 FC-CDF 。

    Pipline

    ASPP

    RefineNet 2016年

    主要贡献:

    • 精心设计的译码模块
    • 所有模块遵循残余连接设计

      说明:

      膨胀卷积有几个缺点,如计算量大、需要大量内存。这篇文章采用编码-译码架构。编码部分是 ResNet-101 模块。译码采用 RefineNet 模块,该模块融合了编码模块的高分辨率特征和前一个 RefineNet 模块的抽象特征。

      每个 RefineNet 模块接收多个不同分辨率特征,并融合。看图。

      Architecture

      RefineNet Block

      PSPNet 2016年

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

      主要贡献:

    • 提出了金字塔池化模块来聚合图片信息

    • 使用附加的损失函数

      说明:

      金字塔池化模块通过应用大核心池化层来提高感知域。使用膨胀卷积来修改 ResNet 网,并增加了金字塔池化模块。金字塔池化模块对 ResNet 输出的特征进行不同规模的池化操作,并作上采样后,拼接起来,最后得到结果。

      本文提出的网络结构简单来说就是将DeepLab(不完全一样)aspp之前的feature map pooling了四种尺度之后 将5种feature map concat到一起经过卷积最后进行prediction的过程。

      附加的损失函数:看不懂

      Architecture

      Large Kernel Matters 2017

      主要贡献:

    • 提出了使用大卷积核的编码-译码架构

      说明:

      理论上更深的 ResNet 能有很大的感知域,但研究表明实际上提取的信息来自很小的范围,因此使用大核来扩大感知域。但是核越大,计算量越大,因此将 k x k 的卷积近似转换为 1 x k + k x 1 和 k x 1 + 1 x k 卷积的和。本文称为 GCN。

      本文的架构是:使用 ResNet 作为编译器,而 GCN 和反卷积作为译码器。还使用了名为 Boundary Refinement 的残余模块。

      Architecture

      DeepLab v3 2017

      主要贡献:

    • 改进 ASPP

    • 串行部署 ASPP 的模块

      说明:

      和 DeepLab v2 一样,将膨胀卷积应用于 ResNet 中。改进的 ASPP 指的是将不同膨胀率的膨胀卷积结果拼接起来。并使用了 BN 。

      于 Dilated convolutions (2015) 不一样的是,v3 直接对中间的特征图进行膨胀卷积,而不是在最后做。

      Improved ASPP

    采集多尺度信息的方法
    multi-scale

    对比

    模型 分数 (VOC2012)
    FCN 67.2
    SegNet 59.9
    Dilated Convolutions 75.3
    DeepLab (v1 & v2) 79.7
    RefineNet 84.2
    PSPNet 85.4
    Large Kernel Matters 83.6
    DeepLab v3 85.7
    展开全文
  • 语义分割(Semantic Segmentation)方法

    万次阅读 多人点赞 2019-01-02 19:18:36
    语义分割方面的资源:https://github.com/mrgloom/awesome-semantic-segmentation 1. 什么是语义分割 语义分割是当今计算机视觉领域的关键问题之一。从宏观上看,语义分割是一项高层次的任务,...

    翻译来自:https://gist.github.com/khanhnamle1994/e2ff59ddca93c0205ac4e566d40b5e88

    语义分割方面的资源:https://github.com/mrgloom/awesome-semantic-segmentation

    1. 什么是语义分割

    语义分割是当今计算机视觉领域的关键问题之一。从宏观上看,语义分割是一项高层次的任务,为实现场景的完整理解铺平了道路。场景理解作为一个核心的计算机视觉问题,其重要性在于越来越多的应用程序通过从图像中推断知识来提供营养。其中一些应用包括自动驾驶汽车、人机交互、虚拟现实等,近年来随着深度学习的普及,许多语义分割问题正在采用深层次的结构来解决,最常见的是卷积神经网络,在精度上大大超过了其他方法。以及效率。

    什么是语义分割?
    语义分割是从粗推理到精推理的自然步骤:
    原点可以定位在分类,分类包括对整个输入进行预测。
    下一步是本地化/检测,它不仅提供类,还提供关于这些类的空间位置的附加信息。
    最后,语义分割通过对每个像素进行密集的预测、推断标签来实现细粒度的推理,从而使每个像素都被标记为其封闭对象矿石区域的类别。

    2.语义分割的基础

    也有必要回顾一些对计算机视觉领域做出重大贡献的标准深层网络,因为它们通常被用作语义分割系统的基础:
    Alexnet:Toronto首创的Deep CNN,以84.6%的测试准确率赢得了2012年Imagenet竞赛。它由5个卷积层、最大池层、作为非线性的ReLUs、3个完全卷积层和dropout组成。
    VGG-16:这款牛津型号以92.7%的准确率赢得了2013年的Imagenet竞争。它使用第一层中具有小接收场的卷积层堆栈,而不是具有大接收场的少数层。
    GoogLeNet:这GoogLeNet赢得了2014年Imagenet的竞争,准确率为93.3%。它由22层和一个新引入的称为初始模块的构建块组成。该模块由网络层网络、池操作、大卷积层和小卷积层组成。
    Resnet:这款微软的模型以96.4%的准确率赢得了2016年的Imagenet竞争。这是众所周知的,因为它的深度(152层)和残余块的引进。剩余的块通过引入标识跳过连接来解决培训真正深层架构的问题,以便层可以将其输入复制到下一层。

    3.语义分割的方法

    现有的语义分割方法是什么?
    一个通用的语义分割体系结构可以被广泛认为是一个编码器网络,然后是一个解码器网络:

    • 编码器通常是一个预先训练的分类网络,如vgg/resnet,然后是一个解码器网络。
    • 解码器的任务是将编码器学习到的识别特征(低分辨率)语义投影到像素空间(高分辨率)上,得到密集的分类。

    与分类不同的是,深度网络的最终结果是唯一重要的,语义分割不仅需要在像素级别上进行区分,而且还需要一种机制将编码器不同阶段学习到的区分特征投影到像素空间上。不同的方法使用不同的机制作为解码机制的一部分。让我们探讨三种主要方法:

    1-基于区域的语义分割
    基于区域的方法通常遵循“使用识别的分割”管道,首先从图像中提取自由形式的区域并对其进行描述,然后进行基于区域的分类。在测试时,基于区域的预测转换为像素预测,通常通过根据包含该预测的最高评分区域标记像素。

    R-CNN(具有CNN特征的区域)是基于区域的方法的代表性工作之一。根据目标检测结果进行语义分割。具体来说,R-CNN首先利用选择性搜索来提取大量的目标提案,然后计算每个提案的CNN特征。最后,使用类特定的线性支持向量机对每个区域进行分类。与传统的以图像分类为主要目的的CNN结构相比,R-CNN能够处理更复杂的任务,如目标检测和图像分割,甚至成为这两个领域的重要基础。此外,R-CNN可以建立在任何CNN基准结构之上,如Alexnet、VGG、Googlenet和Resnet。

                                        

    对于图像分割任务,R-CNN提取了每个区域的两种特征:全区域特征和前景特征,发现将它们作为区域特征连接在一起可以获得更好的性能。R-CNN由于使用了高度歧视性的CNN功能,取得了显著的性能改进。但是,它也面临着分割任务的一些缺点:

    • 此功能与分段任务不兼容。
    • 该特征包含的空间信息不足,无法精确生成边界。
    • 生成基于分段的建议需要时间,并且会极大地影响最终性能。

    由于这些瓶颈,最近的研究提出了解决这些问题,包括SDS, Hypercolumns, Mask R-CNN。

    2-全卷积网络语义分割
    原始的完全卷积网络(FCN)学习从像素到像素的映射,而不提取区域建议。FCN网络管道是经典CNN的延伸。其主要思想是使经典的CNN以任意大小的图像作为输入。CNN仅接受和生产特定尺寸输入的标签的限制来自完全连接的固定层。与之相反,FCN只有卷积层和池层,它们能够对任意大小的输入进行预测。

                                       

    在这个特定的FCN中,一个问题是通过几个交替的卷积层和池层传播,输出特征映射的分辨率被降采样。因此,FCN的直接预测通常分辨率较低,导致对象边界相对模糊。为了解决这个问题,已经提出了各种更先进的基于FCN的方法,包括SegNet, DeepLab-CRF, 和 Dilated Convolutions。

    3-弱监督语义分割
    语义分割中的大多数相关方法都依赖于大量带有像素级分割遮罩的图像。然而,手工注释这些面具是相当费时,令人沮丧和商业成本。因此,最近提出了一些弱监督的方法,这些方法致力于通过使用带注释的边界框来实现语义分割。

                                    

    例如,Boxsup使用边界框注释作为监督来训练网络,并迭代地改进用于语义分割的估计掩码。简单地说,它把弱监督限制看作输入标签噪声问题,并探讨了递归训练作为一种去噪策略。像素级标记解释了多实例学习框架中的分割任务,并添加了一个额外的层来约束模型,以将更多的权重分配给重要的像素进行图像级分类。

    4.用全卷积网络进行语义分割

    在本节中,我们将逐步介绍最流行的语义分割体系结构-完全卷积网(FCN)的实现。我们将使用Python3中的TensorFlow库以及其他依赖项(如numpy和scipy)来实现它。
    在本练习中,我们将使用fcn在图像中标记道路的像素。我们将使用Kitti道路数据集进行道路/车道检测。这是Udacity的自动驾驶汽车纳米学位计划中的一个简单练习,您可以了解有关此Github回购中设置的更多信息。

    以下是FCN体系结构的主要特点:

    • FCN将知识从VGG16传输到执行语义分割。
    • VGG16的全连接层使用1X1卷积转换为全卷积层。这个过程产生一个低分辨率的类存在热图。
    • 使用转置卷积(用双线性内插滤波器初始化)对这些低分辨率语义特征图进行上采样。
    • 在每个阶段,通过在VGG16中添加来自较粗但分辨率较高的底层特征图的特征,进一步细化了上采样过程。
    • 跳过连接在每个卷积块之后引入,以使后续块能够从以前的集合特性中提取更抽象、类显著的特性。

    FCN有3个版本(FCN-32、FCN-16、FCN-8)。我们将实施FCN-8,具体步骤如下:

    Encoder:使用预先培训过的VGG16作为编码器。解码器从VGG16的第7层开始。
    FCN Layer-8:最后一个完全连接的VGG16层被1x1卷积替换。
    FCN Layer-9:fcn layer-8升序2次,与VGG16的layer 4匹配,使用带参数的转置卷积:(kernel=(4,4),stead=(2,2),padding='same')。之后,在VGG16的第4层和fcn的第9层之间添加了一个跳过连接。
    FCN Layer-10:fcn layer-9被放大2倍,以便与VGG16第3层的尺寸匹配,使用带参数的转置卷积:(kernel=(4,4),stead=(2,2),padding=(相同))。之后,在VGG16的第3层和fcn第10层之间添加了一个跳过连接。
    FCN Layer-11:fcn layer-10被放大4倍以匹配输入图像大小的尺寸,因此我们得到实际图像,深度等于类数,使用带参数的转置卷积:(kernel=(16,16),step=(8,8),padding='same')。

               

    步骤1
    我们首先将预先培训过的VGG-16模型加载到TensorFlow中。以TensorFlow session和vgg文件夹的路径(可在此处下载)为例,我们返回vgg模型中的张量元组,包括图像输入、keep-prob(控制辍学率)、第3层、第4层和第7层。

    def load_vgg(sess, vgg_path):
      
      # load the model and weights
      model = tf.saved_model.loader.load(sess, ['vgg16'], vgg_path)
    
      # Get Tensors to be returned from graph
      graph = tf.get_default_graph()
      image_input = graph.get_tensor_by_name('image_input:0')
      keep_prob = graph.get_tensor_by_name('keep_prob:0')
      layer3 = graph.get_tensor_by_name('layer3_out:0')
      layer4 = graph.get_tensor_by_name('layer4_out:0')
      layer7 = graph.get_tensor_by_name('layer7_out:0')
    
    return image_input, keep_prob, layer3, layer4, layer7

    步骤2
    现在,我们主要使用vgg模型中的张量为fcn创建层。给定vgg层输出的张量和要分类的类数,我们返回该输出最后一层的张量。特别地,我们将1X1卷积应用于编码器层,然后将解码器层添加到具有跳过连接和升序采样的网络中。

    def layers(vgg_layer3_out, vgg_layer4_out, vgg_layer7_out, num_classes):
       
        # Use a shorter variable name for simplicity
        layer3, layer4, layer7 = vgg_layer3_out, vgg_layer4_out, vgg_layer7_out
    
        # Apply 1x1 convolution in place of fully connected layer
        fcn8 = tf.layers.conv2d(layer7, filters=num_classes, kernel_size=1, name="fcn8")
    
        # Upsample fcn8 with size depth=(4096?) to match size of layer 4 so that we can add skip connection with 4th layer
        fcn9 = tf.layers.conv2d_transpose(fcn8, filters=layer4.get_shape().as_list()[-1],
        kernel_size=4, strides=(2, 2), padding='SAME', name="fcn9")
    
        # Add a skip connection between current final layer fcn8 and 4th layer
        fcn9_skip_connected = tf.add(fcn9, layer4, name="fcn9_plus_vgg_layer4")
    
        # Upsample again
        fcn10 = tf.layers.conv2d_transpose(fcn9_skip_connected, filters=layer3.get_shape().as_list()[-1],
        kernel_size=4, strides=(2, 2), padding='SAME', name="fcn10_conv2d")
    
        # Add skip connection
        fcn10_skip_connected = tf.add(fcn10, layer3, name="fcn10_plus_vgg_layer3")
    
        # Upsample again
        fcn11 = tf.layers.conv2d_transpose(fcn10_skip_connected, filters=num_classes,
        kernel_size=16, strides=(8, 8), padding='SAME', name="fcn11")
    
    return fcn11

    步骤3
    下一步是优化我们的神经网络,也就是建立TensorFlow损失函数和优化器操作。这里我们使用交叉熵作为损失函数,使用Adam作为优化算法。

    def optimize(nn_last_layer, correct_label, learning_rate, num_classes):
      
      # Reshape 4D tensors to 2D, each row represents a pixel, each column a class
      logits = tf.reshape(nn_last_layer, (-1, num_classes), name="fcn_logits")
      correct_label_reshaped = tf.reshape(correct_label, (-1, num_classes))
    
      # Calculate distance from actual labels using cross entropy
      cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=correct_label_reshaped[:])
      # Take mean for total loss
      loss_op = tf.reduce_mean(cross_entropy, name="fcn_loss")
    
      # The model implements this operation to find the weights/parameters that would yield correct pixel labels
      train_op = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss_op, name="fcn_train_op")
    
    return logits, train_op, loss_op

    步骤4
    这里我们定义了train-nn函数,它接受重要的参数,包括epoch数、批大小、丢失函数、优化器操作和输入图像的占位符、标签图像、学习速率。对于培训过程,我们还将保持概率设置为0.5,学习率设置为0.001。为了跟踪进度,我们还打印出培训期间的损失。

    def train_nn(sess, epochs, batch_size, get_batches_fn, train_op,
                 cross_entropy_loss, input_image,
                 correct_label, keep_prob, learning_rate):
    
      keep_prob_value = 0.5
      learning_rate_value = 0.001
      for epoch in range(epochs):
          # Create function to get batches
          total_loss = 0
          for X_batch, gt_batch in get_batches_fn(batch_size):
    
              loss, _ = sess.run([cross_entropy_loss, train_op],
              feed_dict={input_image: X_batch, correct_label: gt_batch,
              keep_prob: keep_prob_value, learning_rate:learning_rate_value})
    
              total_loss += loss;
    
          print("EPOCH {} ...".format(epoch + 1))
          print("Loss = {:.3f}".format(total_loss))
    print()

    步骤5
    最后,是时候训练我们的网络了!在这个run函数中,我们首先使用load_vgg、layers和optimize函数构建网络。然后,我们使用train_nn函数对网络进行训练,并保存推理数据以备记录。

    def run():
      
      # Download pretrained vgg model
      helper.maybe_download_pretrained_vgg(data_dir)
    
      # A function to get batches
      get_batches_fn = helper.gen_batch_function(training_dir, image_shape)
      
      with tf.Session() as session:
            
        # Returns the three layers, keep probability and input layer from the vgg architecture
        image_input, keep_prob, layer3, layer4, layer7 = load_vgg(session, vgg_path)
    
        # The resulting network architecture from adding a decoder on top of the given vgg model
        model_output = layers(layer3, layer4, layer7, num_classes)
    
        # Returns the output logits, training operation and cost operation to be used
        # - logits: each row represents a pixel, each column a class
        # - train_op: function used to get the right parameters to the model to correctly label the pixels
        # - cross_entropy_loss: function outputting the cost which we are minimizing, lower cost should yield higher accuracy
        logits, train_op, cross_entropy_loss = optimize(model_output, correct_label, learning_rate, num_classes)
        
        # Initialize all variables
        session.run(tf.global_variables_initializer())
        session.run(tf.local_variables_initializer())
    
        print("Model build successful, starting training")
    
        # Train the neural network
        train_nn(session, EPOCHS, BATCH_SIZE, get_batches_fn, 
                 train_op, cross_entropy_loss, image_input,
                 correct_label, keep_prob, learning_rate)
    
        # Run the model with the test images and save each painted output image (roads painted green)
        helper.save_inference_samples(runs_dir, data_dir, session, image_shape, logits, keep_prob, image_input)
        
    print("All done!")

    关于我们的参数,我们选择epochs=40,batch_size=16,num_classes=2,image_shape=(160,576)。在两次试验通过后,dropout=0.5,dropout=0.75,我们发现第二次试验产生更好的结果,平均损失更好。

    要查看完整代码,请查看此链接:https://gist.github.com/khanhnamle1994/e2ff59ddca93c0205ac4e566d40b5e88

    展开全文
  • 语义分割看这一篇就够了!

    万次阅读 多人点赞 2020-07-31 13:13:58
    语义分割技术综述 本文就Image Segmentation Using Deep Learning: A Survey 第三章的模型进行了分析和介绍,第一第二章的基础指示可以看原文进行学习,相关知识有很多这里就不班门弄斧了。 最好是一边读原文一边看...

    语义分割技术综述

    本文就Image Segmentation Using Deep Learning: A Survey
    第三章的模型进行了分析和介绍,第一第二章的基础指示可以看原文进行学习,相关知识有很多这里就不班门弄斧了。
    最好是一边读原文一边看本文效果更佳原文连接
    能力有限,水平一般,抱着学习的态度分享此文,有不准确的地方还请各位大佬斧正!

    3.1 全卷积网络

    关于FCN的资料有很多这里就不展开了
    在这里插入图片描述
    下图为升级版的FCN(跳跃连接)
    在这里插入图片描述

    3.2 带图像的卷积模型

    CNNs+全连接的CRF以解决深度卷积网络最后一层的定位不足以进行精确的对象分割的问题。 这种模型可以更好的定位分割边界。

    CNN+CRF模型

    CNN+CRF模型

    3.3 解码器编码器模型

    如下图所示,左侧是编码器结构(VGG-16),右侧是解码器结构
    在这里插入图片描述

    一种更优的网络Segnet。encoder是一个沿用VGG16的网络模型,主要对物体信息进行解析。decoder将解析后的信息对应成最终的图像形式,即每个像素都用对应其物体信息的颜色(或者是label)来表示。
    Encoder对图像的低级局域像素值进行归类与分析,从而获得高阶语义信息
    Decoder对缩小后的特征图像进行上采样, 并使用之前max-pooling的索引进行上采样。
    在这里插入图片描述

    编码器解码器结构应用于医学的模型

    U-net 和V-net 在这个领域表现良好,并在其他领域也有优秀贡献
    U-net的提出是最初是在用于显微镜下的图片语义分割。
    在这里插入图片描述
    U-net 有两个主要部分,分别是收缩并捕获信息和扩张并精准定位。
    左侧是特征提取部分 使用3x3的卷积和max pool进行编码。
    右侧是上采样部分,每上采样一次,就和特征提取部分对应的通道数相同尺度融合,但是融合之前要将其crop。这里的融合也是拼接。

    V-net也是基于FCN的模型,主要用于3D 医学图像的分割, 使用了一种客观的Dice coefficient。这种方法可以解决前景和后景图像体素不平衡的问题。

    在这里插入图片描述

    3.4 基于多尺度和金字塔网络的模型

    Feature Pyramid Network (FPN) 网络
    FPN 将bottom-up 和 top-down 过程进行横向连接。
    在这里插入图片描述
    Pyramid Scene Parsing Network (PSPN) 也是基于多尺度的网络。PSPN更好的学习全局信息。PSPN不同的是使用了带有空洞卷积的参差网络ResNet作为特征提取。

    首先输入图像经过一个特征提取网络提取特征,这部分作者采用的是添加了空洞卷积的ResNet网络,空洞卷积的作用前面也提到过了,主要是增大感受野,提取到的特征(具体而言stride=8)作为后面pyramid pooling模块的输入。在pyramid pooling模块中构建了深度为4的特征金字塔,不同深度的特征是基于输入特征通过不同尺度的池化操作得到的,池化的尺度是可以调整的,这篇文章中给出的池化后的特征尺寸分别是11、22、33和66。然后通过一个1*1卷积层将特征维度缩减为原来的1/4,最后将这些金字塔特征直接上采样到与输入特征相同尺寸,然后和输入特征做合并,也就是concat操作得到最终输出的特征图。特征合并的过程其实就是融合目标的细节特征(浅层特征)和全局特征(深层特征,也就是上下文信息)的过程,这里因为特征提取网络最后输出的特征层感受野足够大,所以有足够的全局信息(虽然网络的深度不算深),个人认为如果这里能够融合更多的浅层特征(比如stride=4的那一层),也许分割结果在细节方面会更好一些

    在这里插入图片描述
    还有一种Laplacian Pyramid Reconstruction
    网络高层特征富含语义信息,低层特征更多是结构信息。在本文提出的特征融合策略中,高层特征的预测输出通过一定方法(类似于拉式金字塔的做法)得到边缘的区域,然后从低层特征的预测结果中拿出这部分和高层输出结合在一起。即:大范围的语义信息取自高层特征,边缘信息取自低层特征。

    3.5 R-CNN 模型

    Fast R-CNN, Faster R-CNN, Maksed-RCNN 这些模型已经非常成功在目标检测领域。关于RCNN和目标检测见RCNN
    几个优秀的实例分割模型
    Mask R-CNN
    mask Rcnn 是基于faster rcnn基础上改版而来的。

    在这里插入图片描述
    Mask-Rcnn的网络结构
    在这里插入图片描述

    The Path Aggregation Network

    3.6 空洞卷积模型和Deeplab 家族

    空洞卷积提供了更大的感受野:例如3x3的卷机核在dilation rate为2的时候有和5x5的卷积核一样的感受野,但仅用了9个参数。如下图。

    Deeplab V1:
    使用空洞卷积和CRF(条件随机场)解决之前模型池化导致的信息丢失和标签之间的概率模型没有被应用的问题
    空洞卷积的主要作用是在增大感受野的同时,不增加参数数量,而且VGG中提出的多个小卷积核代替大卷积核的方法,只能使感受野线性增长,而多个空洞卷积串联,可以实现指数增长。

    DeepLab V2:
    DeepLab V2相对于DeepLab V1做了以下改进:

    1)用多尺度获得更好的分割效果(ASPP)

    2)基础层由VGG16改为ResNet

    3)使用不同的学习率

    其中ASPP的引入是最大也是最重要的改变。多尺度主要是为了解决目标在图像中表现为不同大小时仍能够有很好的分割结果,比如同样的物体,在近处拍摄时物体显得大,远处拍摄时显得小。具体做法是并行的采用多个采样率的空洞卷积提取特征,再将特征融合,类似于空间金字塔结构,形象的称为Atrous Spatial Pyramid Pooling (ASPP)。具体形式如下图所示
    在这里插入图片描述
    DeepLab V3:

    1)提出了更通用的框架,适用于任何网络

    2)复制了ResNet最后的block,并级联起来

    3)在ASPP中使用BN层

    4)去掉了CRF
    block 4 是Resnet的最后一个模块
    在这里插入图片描述
    deeplab v3+
    加入编码器解码器构造,可以通过改变Atrous rate 实现精度和时间的平衡
    在这里插入图片描述

    3.7 基于循环神经网络模型

    用两个 RNNs 水平的扫描图像,一个从上倒下,一个从下往上。每一个 RNN 将一个 patch 拉直以后的向量作为输入,然后更新其 hidden state,沿着输入图像 X 的每一个 column 进行。
    在这里插入图片描述
    还有一种2D-LSTM的结构
    输入图像被分成多个不重叠的窗口,每个窗口的RGB通道传入4个单独的LSTM模型。每个窗口有左上,左下,右上,右下4个方向。每个LSTM块的输出通过前向传播层,然后对每个方向进行求和并应用双曲正切。最后对最后的LSTM块进行求和并送入softmax。

    graph-LSTM
    使用LSTM网络的动机:传统的CNN大多是捕捉有限的局部信息,但是在语义预测的时候往往需要的是全局的信息。例如“举起的胳膊”这种,对比躯干才能判断胳膊是举起的还是放下的

    1. 输入的RGB图像首先经过预处理,使用SLIC来生成超像素的图像,在此基础上构建graph LSTM
    2. 原RGB图像经过5层cnn,获得feature map,该feature map分为两路继续进行
    3. 第一路 经过1X1的卷积层,获得confidence map(置信度map)
    4. 第二路 输入到LSTM
    5. 将更新序列作为上一步的输入,加快收敛速度(参差连接)
    6. 1X1的卷积获得置信度map,得到结果
      在这里插入图片描述
      更新序列排序: 通过将超像素的confidence进行排序,confidence最高的那个节点先更新。如果同时出现了置信度一样的两个节点,则先更新空间上偏左的那个

    DA-RNN: 用于连接3D场景和语义标注
    在这里插入图片描述
    基于自然语言表达的语义分割算法:
    使用CNN和LSTM分别对图像和图像描述进行编码
    将描述进行向量表述并和图像的fcn模型进行融合
    具体该模型工作原理可以看
    R. Hu, M. Rohrbach, and T. Darrell, “Segmentation from natural language expressions,” in European Conference on Computer Vision. Springer, 2016, pp. 108–124.

    在这里插入图片描述

    3.8 注意力机制模型

    注意力机制模型对不同对比例图像赋予不同对权重(例如下图的模型赋予大权重在小比例的人 进行1.0缩放,对近处的小孩进行小缩放0.5)
    在这里插入图片描述
    反向注意力机制:
    此模型有三个分支:
    第一个分支 学习的是pixel属于各个类别的概率分布;
    第二个分支 学习的是pixel不属于各个类别的概率分布;
    第三个分支 学习的是第一二个branch预测的map之间结合的权重;
    在这里插入图片描述

    Dual Attention network:

    采用移除down-sampling的dilated ResNet(与DeepLab相同)的预训练网络基础网络为,最后得到的feature map大小为输入图像的1/8。之后是两个并行的attention module分别捕获spatial和channel的依赖性,最后整合两个attention module的输出得到更好的特征表达。
    这篇文章有详细的讲解在此引用一下JimmyHua的DAnet笔记

    上半部分(Position Attention Module):
    捕获特征图的任意两个位置之间的空间依赖,对于某个特定的特征,被所有位置上的特征加权和更新。权重为相应的两个位置之间的特征相似性。因此,任何两个现有相似特征的位置可以相互贡献提升,而不管它们之间的距离。
    在这里插入图片描述
    下半部分:
    每个高层次特征的通道映射都可以看作是一个特定于类的响应,不同的语义响应相互关联。通过探索通道映射之间的相互依赖关系,可以强调相互依赖的特征映射,提高特定语义的特征表示。

    在这里插入图片描述
    两个attention module的输出先求和再做一次卷积得到最后的预测特征图

    3.9生成模型和对抗训练

    将模型生成的预测图或者真实的ground truth图像一同放入对抗网络
    组合1:原始训练图片+ground truth, 这时候判别器判别为 1 标签;
    组合2:原始训练图片+Segmentor分割结果, 这时候判别器判别为0标签。
    这样可以优化原始的损失函数,加入了对抗网络的损失函数, 提高分割精度,提高鉴别能力。
    在这里插入图片描述
    效果如图所示
    在这里插入图片描述
    弱监督的对抗网络语义分割:
    在这里插入图片描述
    假设分割类别数为K,那么判别器则有K+1个类别的输出。多出来的分类类别为”该像素为假像素”。训练时,使用标记的分割图像训练前K个通道,使用(真实图片,生成图片)图片组按照adversarial loss的定义训练”该像素为假像素”的通道。真是图片既有分割数据库中的图片,也有大量未标注的图片。或者也可以理解为判断“真/假”的分类器,其“真”的这一类扩展成了K类具体的语义类别。

    对于全卷积化的判别器,其改动就是将分类结果变为输入图片大小的dense prediction。从判断每一个样本的真伪变为每一个像素的真伪。这样独立的”该像素为假像素”通道才能和K类分割输出放在一起。

    除此之外,文章中提出的模型分为了’semi-supervised’和’weakly-supervised’,用以区分扩展用的数据是完全没有标注还是使用了分类标签。对于使用分类标签的’weakly-supervised’模型,GAN的生成器使用conditional GAN,将图片的分类标签作为输入。

    应用于医学的多尺度L1 Loss的语义分割模型:
    整个网络分为segmentor和critic两部分:
    1、segmentor部分为unet结构,encoder部分为4层stride=2的卷积,decoder部分为4层upsample,输出为网络预测的肿瘤二值图像;
    2、critic部分的网络共用segmentor部分encoder的前三层,分别向critic部分输入经预测的肿瘤二值图掩膜的原始输入图像,以及经真值肿瘤二值图掩膜的原始输入图像,最后的loss计算两个不同输出之间的MAE值(L1 loss)。其中Multi-scale体现在对critic部分每一个卷积层输出的特征图像都计算MAE值,最后的总loss取平均。
    3、训练方式类似于GAN的min-max对抗学习过程。首先,固定S(segmentor),对C(critic)进行一轮训练;再固定C(critic),对S(segmentor)进行一轮训练,如此反复。对 critic 的训练想使loss变大(min),对 segmentor 训练想使loss变小(max)。
    在这里插入图片描述

    3.10 图像分割的主动轮廓线学习模型

    将轮廓线的长度加入损失函数
    在这里插入图片描述
    感兴趣的可以看一下这篇笔记,感觉讲的很不错这边就不多赘述了
    图像分割的主动轮廓线学习模型

    3.11 其他模型

    EncNet:使用基础的特征提取将特征图送入上下文编码模型
    RefineNet:该网络显式地利用下采样过程中的所有可用信息来启用使用远程残差连接的高分辨率预测
    Seednet:使用强化学习的方式解决交互式分割的问题
    Feedforward-Net:将小图像元素(超像素)映射到从一系列范围不断扩大的嵌套区域中提取的丰富特征表示。这些区域是通过从超像素一直“缩小”到场景级分辨率而获得的。
    全景分割:全景分割将语义分割(为每个像素分配一个类标签)和实例分割(检测并分割每个对象实例)的典型任务统一起来。拟议的任务需要生成一个丰富而完整的连贯场景分割,这是迈向现实世界视觉系统的重要一步。

    语义分割优秀模型一览

    在这里插入图片描述
    引用:
    https://blog.csdn.net/u014380165/article/details/83869175
    https://zhuanlan.zhihu.com/p/75333140
    https://zhuanlan.zhihu.com/p/59055363
    https://blog.csdn.net/u010158659/article/details/78649827
    https://blog.csdn.net/qq_26020233/article/details/88790378

    展开全文
  • 语义分割综述

    万次阅读 多人点赞 2018-09-11 14:55:15
    太优秀了,收藏用!... 综述论文翻译:A Review on Deep Learning Techniques Applied to Semantic Segmentation ...近期主要在学习语义分割相关方法,计划将arXiv上的这篇综述好好翻译下,目前已完成了...

    太优秀了,收藏用!转载自:https://www.cnblogs.com/Jie-Liang/archive/2017/06/29/6902375.html

    综述论文翻译:A Review on Deep Learning Techniques Applied to Semantic Segmentation

    近期主要在学习语义分割相关方法,计划将arXiv上的这篇综述好好翻译下,目前已完成了一部分,但仅仅是尊重原文的直译,后续将继续完成剩余的部分,并对文中提及的多个方法给出自己的理解。

    论文地址:https://arxiv.org/abs/1704.06857

    应用于语义分割问题的深度学习技术综述

     

     

    摘要

     

    计算机视觉与机器学习研究者对图像语义分割问题越来越感兴趣。越来越多的应用场景需要精确且高效的分割技术,如自动驾驶、室内导航、甚至虚拟现实与增强现实等。这个需求与视觉相关的各个领域及应用场景下的深度学习技术的发展相符合,包括语义分割及场景理解等。这篇论文回顾了各种应用场景下利用深度学习技术解决语义分割问题的情况:首先,我们引入了领域相关的术语及必要的背景知识;然后,我们介绍了主要的数据集以及对应的挑战,帮助研究者选取真正适合他们问题需要及目标的数据集;接下来,我们介绍了现有的方法,突出了各自的贡献以及对本领域的积极影响;最后,我们展示了大量的针对所述方法及数据集的实验结果,同时对其进行了分析;我们还指出了一系列的未来工作的发展方向,并给出了我们对于目前最优的应用深度学习技术解决语义分割问题的研究结论。

     

    引言

     

    如今,语义分割(应用于静态2D图像、视频甚至3D数据、体数据)是计算机视觉的关键问题之一。在宏观意义上来说,语义分割是为场景理解铺平了道路的一种高层任务。作为计算机视觉的核心问题,场景理解的重要性越来越突出,因为现实中越来越多的应用场景需要从影像中推理出相关的知识或语义(即由具体到抽象的过程)。这些应用包括自动驾驶[1,2,3],人机交互[4],计算摄影学[5],图像搜索引擎[6],增强现实等。应用各种传统的计算机视觉和机器学习技术,这些问题已经得到了解决。虽然这些方法很流行,但深度学习革命让相关领域发生了翻天覆地的变化,因此,包括语义分割在内的许多计算机视觉问题都开始使用深度架构来解决,通常是卷积神经网络CNN[7-11],而CNN在准确率甚至效率上都远远超过了传统方法。然而,相比于固有的计算机视觉及机器学习分支,深度学习还远不成熟。也因此,还没有一个统一的工作及对于目前最优方法的综述。该领域的飞速发展使得对初学者的启蒙教育比较困难,而且,由于大量的工作相继被提出,要跟上发展的步伐也非常耗时。于是,追随语义分割相关工作、合理地解释它们的论点、过滤掉低水平的工作以及验证相关实验结果等是非常困难的。

     

    就我所知,本文是第一篇致力于综述用于语义分割的深度模型技术的文章。已经有较多的关于语义分割的综述调查,比如[12,13]等,这些工作在总结、分类现有方法、讨论数据集及评价指标以及为未来研究者提供设计思路等方面做了很好的工作。但是,这些文章缺少对某些最新数据集的介绍,他们不去分析框架的情况,而且没有提供深度学习技术的细节。因此,我们认为本文是全新的工作,而且这对于深度学习相关的语义分割社区有着重要意义。

    图 1 物体识别或场景理解相关技术从粗粒度推理到细粒度推理的演变:四幅图片分别代表分类、识别与定位、语义分割、实例分割。

     

    本文核心贡献如下:

    1)我们对于现有的数据集给出了一个全面的调查,这些数据集将会对深度学习技术推动的分割项目发挥作用;

    2)我们对于多数重要的深度学习语义分割方法进行了深度有条理的综述,包括他们的起源、贡献等;

    3)我们进行了彻底的性能评估,使用了多种评价指标如准确率、运行时间、内存占用等;

    4)我们对以上结果进行了讨论,并给出了未来工作的一系列可能的发展方向,这些方向可能在未来的发展进程中取得优势。我们还给出了该领域目前最好方法的总结。

     

    本文剩余部分安排:

    第二章介绍了语义分割问题,同时引入了相关工作中常用的符号、惯例等。其他的背景概念如通用的深度神经网络也在这章中回顾;

    第三章介绍了现有的数据集、挑战及实验基准;

    第四章回顾了现有方法,基于其贡献自下而上排序。本章重点关注这些方法的理论及闪光点,而不是给出一个定量的评估;

    第五章给出了一个简短的对于现有方法在给定数据集上定量表现的讨论,另外还有未来相关工作的发展方向;

    第六章则总结全文并对相关工作及该领域目前最优方法进行了总结。

     

     

    术语及背景概念

     

    为了更好地理解语义分割问题是如何用深度学习框架解决的,有必要了解到其实基于深度学习的语义分割并不是一个孤立的领域,而是在从粗糙推理到精细化推理过程中很自然的一步。这可以追溯到分类问题,包括对整个输入做出预测,即预测哪个物体是属于这幅图像的,或者给出多个物体可能性的排序。对于细粒度推理来说,将接下来进行物体的定位与检测,这将不止提供物体的类别,而且提供关于各类别空间位置的额外信息,比如中心点或者边框。这样很显然,语义分割是实现细粒度推理的很自然的一步,它的目标是:对每个像素点进行密集的预测,这样每个像素点均被标注上期对应物体或区域的类别。这还可以进一步改进,比如实例分割(即对同一类的不同实例标以不同的标签),甚至是基于部分的分割(即对已经分出不同类别的图像进行底层分解,找到每个类对应的组成成分)。图1展示了以上提到的演变过程。在本文中,我们主要关注一般的场景标注,也就是像素级别的分割,但是我们也会回顾实例分割及基于部分的分割的较重要的方法。

     

    最后,像素级别的标注问题可以松弛为以下公式:对于随机变量集合 中的每个随机变量,找到一种方法为其指派一个来自标签空间 中的一个状态。每个标签 表示唯一的一个类或者物体,比如飞机、汽车、交通标志或背景等。这个标签空间有 个可能的状态,通常会被扩展为  +1个,即视 为背景或者空的类。通常, 是一个二维的图像,包含W*H=N的像素点x。但是,这个随机变量的集合可以被扩展到任意维度,比如体数据或者超谱图像

     

    除了问题的定义,回顾一些可能帮助读者理解的背景概念也是必要的。首先是一些常见的被用作深度语义分割系统的网络、方法以及设计决策;另外还有用于训练的一些常见的技术比如迁移学习等。最后是数据的预处理以及增强式的方法等。

     

    2.1 常见的深度网络架构

     

    正如之前所讲,某些深度网络已经对该领域产生了巨大的贡献,并已成为众所周知的领域标准。这些方法包括AlexNet,VGG-16,GoogLeNet,以及ResNet。还有一些是由于其被用作许多分割架构的一部分而显得重要。因此,本文将在本章致力于对其进行回顾。

     

    2.1.1 AlexNet

     

    AlexNet(以作者名字Alex命名)首创了深度卷积神经网络模型,在2012年ILSVRC(ImageNet大规模图像识别)竞赛上以top-5准确率84.6%的成绩获胜,而与之最接近的竞争者使用了传统的而非深度的模型技术,在相同的问题下仅取得了73.8%的准确率。由Krizhecsky等人[14]给出的架构相对简单,包括卷积层、max-pooling层及ReLU层各五层作为非线性层,全连接层三层以及dropout层。图2给出了这个架构的示意。

    图 2 文献[14]中给出的AlexNet卷积神经网络架构。

    2.1.2 VGG

     

    VGG是由牛津大学Visual Geometry Group提出的卷积神经网络模型(以课题组的名字命名)。他们提出了深度卷积神经网络的多种模型及配置[15],其中一种提交到了2013年ILSVRC(ImageNet大规模图像识别)竞赛上。这个模型由于由16个权重层组成,因此也被称为VGG-16,其在该竞赛中取得了top-5上92.7%的准确率。图3展示了VGG-16的模型配置。VGG-16与之前的模型的主要的不同之处在于,其在第一层使用了一堆小感受野的卷积层,而不是少数的大感受野的卷积层。这使得模型的参数更少,非线性性更强,也因此使得决策函数更具区分度,模型更好训练。

     

    图 3  VGG-16卷积神经网络模型架构,本图经许可取自Matthieu Cord的演讲。

     

     

    2.1.3 GoogLeNet

     

    GoogLeNet是由Szegedy等人[16]提出的在ILSVRC-2014竞赛上取得top-5上93.3%准确率的模型。这个CNN模型以其复杂程度著称,事实上,其具有22个层以及新引入的inception模块(如图4所示)。这种新的方法证实了CNN层可以有更多的堆叠方式,而不仅仅是标准的序列方式。实际上,这些模块由一个网络内部的网络层(NiN)、一个池化操作、一个大卷积核的卷积层及一个小核的卷积层组成。所有操作均并行计算出来,而后进行1×1卷积操作来进行降维。由于这些模块的作用,参数及操作的数量大大减少,网络在存储空间占用及耗时等方面均取得了进步

    图 4 GoogLeNet框架中带有降维的Inception模块。

     

    2.1.4 ResNet

     

    微软提出的ResNet[17]由于在ILSVRC-2016中取得的96.4%的准确率而广受关注。除了准确率较高之外,ResNet网络还以其高达152层的深度以及对残差模块的引入而闻名。残差模块解决了训练真正深层网络时存在的问题,通过引入identity skip connections网络各层可以把其输入复制到后面的层上。

     

    本方法的关键想法便是,保证下一层可以从输入中学到与已经学到的信息不同的新东西(因为下一层同时得到了前一层的输出以及原始的输入)。另外,这种连接也协助解决了梯度消失的问题。

     

    图 5 ResNet中的残差模块。

     

    2.1.5 ReNet

     

    为了将循环神经网络RNN模型扩展到多维度的任务上,Graves等人[18]提出了一种多维度循环神经网络(MDRNN)模型,将每个单一的循环连接替换为带有d个连接的标准RNN,其中d是数据的spatio-temporal维度。基于这篇工作,Visin等人[19]提出了ReNet模型,其不使用多维RNN模型,而是使用常见的序列RNN模型。这样,RNN模型的数量在每一层关于d(输入图像的维数2d)线性增长。在ReNet中,每个卷积层(卷积+池化)被4个同时在水平方向与竖直方向切分图像的RNN模型所替代,如图6所示:

     

    图 6 ReNet架构中的一层,对竖直与水平方向的空间依赖性建模

     

    2.2 迁移学习

     

    从头训练一个深度神经网络通常是不可行的,有这样两个原因:训练需要足量的数据集,而这一般是很难得到的;网络达到收敛需要很长的时间。即便得到了足够大的数据集并且网络可以在短时间内达到收敛,从之前的训练结果中的权重开始训练也总比从随机初始化的权重开始训练要好[20,21]。迁移学习的一种重要的做法便是从之前训练好的网络开始继续训练过程来微调模型的权重值。

     

    Yosinski等人[22]证明了即便是从较不相关的任务中迁移学习来的特征也要比直接从随机初始化学习的特征要好,这个结论也考虑到了随着提前训练的任务与目标任务之间差异的增大,可迁移性将减小的情况。

     

    然而,迁移学习技术的应用并没有如此的直接。一方面,使用提前训练的网络必须满足网络架构等的约束,不过,因为一般不会新提出一个全新的网络结构来使用,所以使用现有的网络架构或网络组件进行迁移学习是常见的;另一方面,迁移学习中的训练过程本身相对于从头开始的训练过程来说区别非常小。合理选择进行微调的层是很重要的,一般选网络中较高的层因为底层一般倾向于保留更加通用的特征;同时,合理地确定学习率也是重要的,一般选取较小的值,因为一般认为提前训练的权重相对比较好,无需过度修改。

     

    由于收集和创建像素级别的分割标注数据集的内在的困难性,这些数据集的规模一般不如分类数据集如ImageNet[23,24]等的大。分割研究中数据集的规模问题在处理RGB-D或3D数据集时更加严重,因为这些数据集规模更小。也因此,迁移学习,尤其是从提前训练好的分类网络中微调而来的方式,将会成为分割领域的大势所趋,并且已经有方法成功地进行了应用,我们将在后面几章进行回顾。

     

    2.3 数据预处理与数据增强

     

    数据增强技术被证明了有利于通用的尤其是深度的机器学习架构的训练,无论是加速收敛过程还是作为一个正则项,这也避免了过拟合并增强了模型泛化能力[15]。

     

    数据增强一般包括在数据空间或特征空间(或二者均有)上应用一系列的迁移技术。在数据空间上应用增强技术最常见,这种增强技术应用迁移方法从已有数据中得到新的样本。有很多的可用的迁移方法:平移、旋转、扭曲、缩放、颜色空间转换、裁剪等。这些方法的目标均是通过生成更多的样本来构建更大的数据集,防止过拟合以及对模型进行正则化,还可以对该数据集的各个类的大小进行平衡,甚至手工地产生对当前任务或应用场景更加具有代表性的新样本。

     

    数据增强对小数据集尤其有用,而且其效用已经在长期使用过程中被证明。例如,在[26]中,有1500张肖像图片的数据集通过设计4个新的尺寸(0.6,0.8,1.2,1.5),4个新的旋角(-45,-22,22,45),以及4个新的gamma变化(0.5,0.8,1.2,1.5)被增强为有着19000张训练图像的数据集。通过这一处理,当使用增强数据集进行微调时,其肖像画分割系统的交叠准确率(IoU)从73.09%提升到了94.20%。

     

     

    数据集及竞赛

     

    以下两种读者应该阅读本部分内容:一是刚刚开始研究本领域问题的读者,再就是已经很有经验但是想了解最近几年其他研究者研究成果的可取之处的读者。虽然第二种读者一般很明确对于开始语义分割相关的研究来说数据集及竞赛是很重要的两个方面,但是对于初学者来说掌握目前最优的数据集以及(主流的)竞赛是很关键的。因此,本章的目标便是对研究者进行启发,提供一个对数据集的简要总结,这里面可能有正好他们需求的数据集以及数据增强或预处理等方面的技巧。不过,这也可以帮助到已经有深入研究的工作者,他们可能想要回顾基础或者挖掘新的信息。

     

    值得争辩的是,对于机器学习来说数据是最重要的或者最重要的之一。当处理深度网络时,这种重要性更加明显。因此,收集正确的数据放入数据集对于任何基于深度学习的分割系统来说都是极为重要的。收集与创建一个足够大而且能够正确代表系统应用场景的数据集,需要大量的时间,需要领域专门知识来挑选相关信息,也需要相关的基础设施使得系统可以正确的理解与学习(捕捉到的数据)。这个任务的公式化过程虽然相比复杂的神经网络结构的定义要简单,但是其解决过程却是相关工作中最难的之一。因此,最明智的做法通常是使用一个现存的足够可以代表该问题应用场景的标准数据集。使用标准数据集还有一个好处就是可以使系统间的对比更加公平,实际上,许多数据集是为了与其他方法进行对比而不是给研究者测试其算法的,在对比过程中,会根据方法的实际表现得到一个公平的排序,其中不涉及任何数据随机选取的过程。

     

    接下来我们将介绍语义分割领域最近最受欢迎的大规模数据集。所有列出的数据集均包含像素级别或点级别的标签。这个列表将根据数据内在属性分为3个部分:2维的或平面的RGB数据集,2.5维或带有深度信息的RGB(RGB-D)数据集,以及纯体数据或3维数据集。表1给出了这些数据集的概览,收录了所有本文涉及的数据集并提供了一些有用信息如他们的被构建的目的、类数、数据格式以及训练集、验证集、测试集划分情况。

    表 1  常见的大规模分割数据集

     

    3.1  2维数据集

     

    自始至终,语义分割问题最关注的是二维图像。因此,二维数据集在所有类型中是最丰富的。本章我们讨论语义分割领域最流行的二维大规模数据集,这考虑到所有的包含二维表示如灰度或RGB图像的数据集。

     

    PASCAL视觉物体分类数据集(PASCAL-VOC[27] (http://host.robots.ox.ac.uk/pascal/VOC/voc2012/) : 包括一个标注了的图像数据集和五个不同的竞赛:分类、检测、分割、动作分类、人物布局。分割的竞赛很有趣:他的目标是为测试集里的每幅图像的每个像素预测其所属的物体类别。有21个类,包括轮子、房子、动物以及其他的:飞机、自行车、船、公共汽车、轿车、摩托车、火车、瓶子、椅子、餐桌、盆栽、沙发、显示器(或电视)、鸟、猫、狗、马、绵羊、人。如果某像素不属于任何类,那么背景也会考虑作为其标签。该数据集被分为两个子集:训练集1464张图像以及验证集1449张图像。测试集在竞赛中是私密的。争议的说,这个数据集是目前最受欢迎的语义分割数据集,因此很多相关领域卓越的工作将其方法提交到该数据集的评估服务器上,在其测试集上测试其方法的性能。方法可以只用该数据集训练,也可以借助其他的信息。另外,其方法排行榜是公开的而且可以在线查询。

    PASCAL 上下文数据集PASCAL Context [28] (http://www.cs.stanford.edu/∼roozbeh/pascal-context/):对于PASCAL-VOC 2010识别竞赛的扩展,包含了对所有训练图像的像素级别的标注。共有540个类,包括原有的20个类及由PASCAL VOC分割数据集得来的图片背景,分为三大类,分别是物体、材料以及混合物。虽然种类繁多,但是只有59个常见类是较有意义的。由于其类别服从一个幂律分布,其中有很多类对于整个数据集来说是非常稀疏的。就这点而言,包含这59类的子集常被选作真实类别来对该数据集进行研究,其他类别一律重标为背景。

     

    PASCAL 部分数据集PASCAL Part[29] (http://www.stat.ucla.edu/∼xianjie.chen/pascal part dataset/pascal part.html):对于PASCAL-VOC 2010识别竞赛的扩展,超越了这次竞赛的任务要求而为图像中的每个物体的部分提供了一个像素级别的分割标注(或者当物体没有连续的部分的时候,至少是提供了一个轮廓的标注)。原来的PASCAL-VOC中的类被保留,但被细分了,如自行车被细分为后轮、链轮、前轮、手把、前灯、鞍座等。本数据集包含了PASCAL VOC的所有训练图像、验证图像以及9637张测试图像的标签。

     

    语义边界数据集SBD[30] (http://home.bharathh.info/home/sbd):是PASCAL数据集的扩展,提供VOC中未标注图像的语义分割标注。提供PASCAL VOC 2011 数据集中11355张数据集的标注,这些标注除了有每个物体的边界信息外,还有类别级别及实例级别的信息。由于这些图像是从完整的PASCAL VOC竞赛中得到的,而不仅仅是其中的分割数据集,故训练集与验证集的划分是不同的。实际上,SBD有着其独特的训练集与验证集的划分方式,即训练集8498张,验证集2857张。由于其训练数据的增多,深度学习实践中常常用SBD数据集来取代PASCAL VOC数据集。

     

    微软常见物体环境数据集Microsoft COCO [31]:(http://mscoco.org/) 是另一个大规模的图像识别、分割、标注数据集。它可以用于多种竞赛,与本领域最相关的是检测部分,因为其一部分是致力于解决分割问题的。该竞赛包含了超过80个类别,提供了超过82783张训练图片,40504张验证图片,以及超过80000张测试图片。特别地,其测试集分为4个不同的子集各20000张:test-dev是用于额外的验证及调试,test-standard是默认的测试数据,用来与其他最优的方法进行对比,test-challenge是竞赛专用,提交到评估服务器上得出评估结果,test-reserve用于避免竞赛过程中的过拟合现象(当一个方法有嫌疑提交过多次或者有嫌疑使用测试数据训练时,其在该部分子集上的测试结果将会被拿来作比较)。由于其规模巨大,目前已非常常用,对领域发展很重要。实际上,该竞赛的结果每年都会在ECCV的研讨会上与ImageNet数据集的结果一起公布。

     

    图像与注释合成数据集SYNTHIA[32] (http://synthia-dataset.net/)是一个大规模的虚拟城市的真实感渲染图数据集,带有语义分割信息,是为了在自动驾驶或城市场景规划等研究领域中的场景理解而提出的。提供了11个类别物体(分别为空、天空、建筑、道路、人行道、栅栏、植被、杆、车、信号标志、行人、骑自行车的人)细粒度的像素级别的标注。包含从渲染的视频流中提取出的13407张训练图像,该数据集也以其多变性而著称,包括场景(城镇、城市、高速公路等)、物体、季节、天气等。

     

    城市风光数据集 [33] (https://www.cityscapes-dataset.com/)是一个大规模的关注于城市街道场景理解的数据集,提供了8种30个类别的语义级别、实例级别以及密集像素标注(包括平坦表面、人、车辆、建筑、物体、自然、天空、空)。该数据集包括约5000张精细标注的图片,20000张粗略标注的图片。数据是从50个城市中持续数月采集而来,涵盖不同的时间以及好的天气情况。开始起以视频形式存储,因此该数据集按照以下特点手动选出视频的帧:大量的动态物体,变化的场景布局以及变化的背景。

     

    CamVid数据集 [55,34] (http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/)是一个道路、驾驶场景理解数据集,开始是五个视频序列,来自一个安装在汽车仪表盘上的960x720分辨率的摄相机。这些序列中采样出了701个帧(其中4个序列在1fps处,1个序列在15fps处),这些静态图被手工标注上32个类别:空、建筑、墙、树、植被、栅栏、人行道、停车场、柱或杆、锥形交通标志、桥、标志、各种文本、信号灯、天空、……(还有很多)。值得注意的是,Sturgess等人[35]将数据集按照367-100-233的比例分为训练集、验证集、测试集,这种分法使用了部分类标签:建筑、树、天空、车辆、信号、道路、行人、栅栏、杆、人行道、骑行者。

     

    KITTI [56] 是用于移动机器人及自动驾驶研究的最受欢迎的数据集之一,包含了由多种形式的传感器得出的数小时的交通场景数据,包括高分辨率RGB、灰度立体摄像机以及三维激光扫描器。尽管很受欢迎,该数据集本身并没有包含真实语义分割标注,但是,众多的研究者手工地为该数据集的部分数据添加标注以满足其问题的需求。Alvarez等人[36,37]为道路检测竞赛中的323张图片生成了真实标注,包含三个类别:道路、垂直面和天空。Zhang等人[39]标注了252张图片,其中140张训练、112张测试,其选自追踪竞赛中的RGB和Velodyne扫描数据,共十个类。Ros等人[38]在视觉测距数据集中标注了170个训练图片和46个测试图片,共11个类。

     

    YouTube物体数据集 [57] 是从YouTube上采集的视频数据集,包含有PASCAL VOC中的10个类。该数据集不包含像素级别的标注,但是Jain等人[42]手动的标注了其126个序列的子集。其在这些序列中每10个帧选取一张图片生成器语义标签,总共10167张标注的帧,每帧480x360的分辨率。

     

    Adobe肖像分割数据集 [26] (http://xiaoyongshen.me/webpage portrait/index.html) 包含从Flickr中收集的800x600的肖像照片,主要是来自手机前置摄像头。该数据集包含1500张训练图片和300张预留的测试图片,这些图片均完全被二值化标注为人或背景。图片被半自动化的标注:首先在每幅图片上运行一个人脸检测器,将图片变为600x800的分辨率,然后,使用Photoshop快速选择工具将人脸手工标注。这个数据集意义重大,因为其专门适用于人脸前景的分割问题。

     

    上下文语料数据集(MINC[43] 是用于对块进行分类以及对整个场景进行分割的数据集。该数据集提供了23个类的分割标注(文中有详细的各个类别的名称),包含7061张标注了的分割图片作为训练集,5000张的测试集和2500张的验证集。这些图片均来自OpenSurfaces数据集[58],同时使用其他来源如Flickr或Houzz进行增强。因此,该数据集中的图像的分辨率是变化的,平均来看,图片的分辨率一般是800x500或500x800。

     

    密集标注的视频分割数据集(DAVIS[44,45](http://davischallenge.org/index.html):该竞赛的目标是视频中的物体的分割,这个数据集由50个高清晰度的序列组成,选出4219帧用于训练,2023张用于验证。序列中的帧的分辨率是变化的,但是均被降采样为480p的。给出了四个不同类别的像素级别的标注,分别是人、动物、车辆、物体。该数据集的另一个特点是每个序列均有至少一个目标前景物体。另外,该数据集特意地较少不同的大动作物体的数量。对于那些确实有多个前景物体的场景,该数据集为每个物体提供了单独的真实标注,以此来支持实例分割。

     

    斯坦福背景数据集[40] (http://dags.stanford.edu/data/iccv09Data.tar.gz)包含了从现有公开数据集中采集的户外场景图片,包括LabelMe, MSRC, PASCAL VOC 和Geometric Context。该数据集有715张图片(320x240分辨率),至少包含一个前景物体,且有图像的水平位置信息。该数据集被以像素级别标注(水平位置、像素语义分类、像素几何分类以及图像区域),用来评估场景语义理解方法。

     

    SiftFlow [41]:包含2688张完全标注的图像,是LabelMe数据集[59]的子集。多数图像基于8种不同的户外场景,包括街道、高山、田地、沙滩、建筑等。图像是256x256的,分别属于33个语义类别。未标注的或者标为其他语义类别的像素被认为是空。

     

     

    3.2  2.5维数据集

     

    随着廉价的扫描器的到来,带有深度信息的数据集开始出现并被广泛使用。本章,我们回顾最知名的2.5维数据集,其中包含了深度信息。

     

    NYUDv2数据集[46](http://cs.nyu.edu/∼silberman/projects/indoor scene seg sup.html)包含1449张由微软Kinect设备捕获的室内的RGB-D图像。其给出密集的像素级别的标注(类别级别和实力级别的均有),训练集795张与测试集654张均有40个室内物体的类[60],该数据集由于其刻画室内场景而格外重要,使得它可以用于某种家庭机器人的训练任务。但是,它相对于其他数据集规模较小,限制了其在深度网络中的应用。

     

    SUN3D数据集[47](http://sun3d.cs.princeton.edu/):与NYUDv2数据集相似,该数据集包含了一个大规模的RGB-D视频数据集,包含8个标注了的序列。每一帧均包含场景中物体的语义分割信息以及摄像机位态信息。该数据集还在扩充中,将会包含415个序列,在41座建筑中的254个空间中获取。另外,某些地方将会在一天中的多个时段被重复拍摄。

     

    SUNRGBD数据集[48](http://rgbd.cs.princeton.edu/)由四个RGB-D传感器得来,包含10000张RGB-D图像,尺寸与PASCAL VOC一致。该数据集包含了NYU depth v2 [46], Berkeley B3DO [61], 以及SUN3D [47]数据集中的图像,整个数据集均为密集标注,包括多边形、带方向的边界框以及三维空间,适合于场景理解任务。

     

    物体分割数据集(OSD[62](http://www.acin.tuwien.ac.at/?id=289)该数据集用来处理未知物体的分割问题,甚至是在部分遮挡的情况下进行处理。该数据集有111个实例,提供了深度信息与颜色信息,每张图均进行了像素级别的标注,以此来评估物体分割方法。但是,该数据集并没有区分各个类,使其退化为一个二值化的数据集,包含物体与非物体两个类。

     

    RGB-D物体数据集[49] (http://rgbd-dataset.cs.washington.edu/)该数据集由视频序列构成,有300个常见的室内物体,分为51个类,使用WordNet hypernym-hyponym关系进行分类。该数据集使用Kinect型三维摄像机进行摄制,640x480RGB图像,深度信息30赫兹。对每一帧,数据集提供了RGB-D及深度信息,这其中包含了物体、位置及像素级别的标注。另外,每个物体放在旋转的桌面上以得出360度的视频序列。对于验证过程,其提供了22个标注的自然室内场景的包含物体的视频序列。

     

     

    3.3  3维数据集

     

    纯粹的三维数据集是稀缺的,通常可以提供CAD网格或者其他的体元表示如点云等。为分割问题获取三维数据集是困难的,因此很少有深度学习方法可以处理这种数据。也因此,三维数据集目前还不是很受欢迎。尽管如此,我们还是介绍目前出现的相关数据集来解决现有的问题。

    ShapeNet部分数据集[50](http://cs.stanford.edu/ericyi/project page/part annotation/)是ShapeNet[63]数据集的子集,关注于细粒度的三维物体分割。包含取自元数据及16个类的31693个网格,每个形状类被标注为二到五个部分,整个数据集共有50个物体部分,也就是说,物体的每个部分比如飞机的机翼、机身、机尾、发动机等都被标注了。真实标注按照被网格分割开的点呈现。

     

    斯坦福2D-3D-S数据集[51](http://buildingparser.stanford.edu)是一个多模态、大规模室内空间数据集,是斯坦福三维语义分析工作[64]的扩展。提供了多个模态:二维RGB,2.5维添加深度信息的图片、三维网格和点云,均提供分割标注信息。该数据集有70496张高分辨率的RGB图像(1080x1080分辨率),以及其对应的深度图谱、表面法线、网格以及点云,军事带有像素级别及点级别的语义标注信息。这些数据取自6个室内区域,分别来自三个不同的教育与办公建筑。共有271个房间,大约7亿个点,被标以13个类。

     

    三维网格分割基准数据集[52](http://segeval.cs.princeton.edu/)该基准数据集有380个网格,被分为19个类。每个网格手动的被分割为不同的功能区域,主要目标是提供对于人们如何分配网格功能的一个概率分布。

     

    悉尼城市物体数据集[53](http://www.acfr.usyd.edu.au/papers/SydneyUrbanObjectsDataset.shtml)该数据集包含多个常见的城市道路物体,由Velodyne HDK-64E LIDAR扫描得到,共有631个独立扫描的点云,由车辆、行人、标志、树木等类别组成。有趣的是,除了正常的扫描之外,还提供了全景360度的扫描标注。

     

    大规模点云分类基准数据集[54](http://www.semantic3d.net/)该基准数据集提供手工标注的三维点云,面向自然与城市场景。该数据集在形成点云时保留了细节与密度等信息,训练集和测试集各包含15个大规模的点云,其规模达到超过十亿个标注点的级别。

     

     

     

    方法

     

    深度学习技术在各种高层视觉任务上取得了巨大的成功,尤其是监督方法如卷积神经网络CNN用于图像分类或物体检测 [14,15,16],这激励着研究者们探索这些方法的像素级别标注能力,如语义分割能力。这些深度学习技术区别于传统方法的关键优势在于其强大的针对当前问题学习合适的特征表示的能力,例如,对于一个特定数据集的像素级标注问题,其使用一种端对端的方法而不是手工设计的特征,而手工设计特征需要领域专门知识、耗时耗力而且有时太过精细化以致于只能在某个特定的场景下使用。

     

     

    图 7 [65]中的全卷积神经网络示意图。将全连接层替换为卷积层,便可将用于分类的CNN网络转化为生成空间热区的网络。加入反卷积层来实现上采样,使得网络可以进行密集推理并学到每个像素点的标签。

     

    最近,最成功用于语义分割的深度学习技术均来自同一个工作,即全卷积网络FCN [65],该方法的出色之处在于,其利用了现存的CNN网络作为其模块之一来产生层次化的特征。作者将现存的知名的分类模型包括AlexNet、VGG-16、GoogLeNet和ResNet等转化为全卷积模型:将其全连接层均替换为卷积层,输出空间映射而不是分类分数。这些映射由小步幅卷积上采样(又称反卷积)得到,来产生密集的像素级别的标签。该工作被视为里程碑式的进步,因为它阐释了CNN如何可以在语义分割问题上被端对端的训练,而且高效的学习了如何基于任意大小的输入来为语义分割问题产生像素级别的标签预测。本方法在标准数据集如PASCAL VOC分割准确率上相对于传统方法取得了极大的进步,且同样高效。由于上述及更多显著的贡献,FCN成为了深度学习技术应用于语义分割问题的基石,其处理过程如图7所示。

    表 2  基于深度学习的语义分割方法总结

    图 8 所提及方法的形象化展示

     

    尽管FCN模型强大而普适,它任然有着多个缺点从而限制其对于某些问题的应用:其固有的空间不变性导致其没有考虑到有用的全局上下文信息,其并没有默认考虑对实例的辨识,其效率在高分辨率场景下还远达不到实时操作的能力,并且其不完全适合非结构性数据如3D点云,或者非结构化模型。这些问题我们将在本节进行综述,同时给出目前最优的解决这些问题的办法。表2给出了这个综述的总结,展示了所有的提及的方法(按照本节中出现的先后排序)、他们所基于的架构、主要的贡献、以及基于其任务目标的分级:准确率、效率、训练难度、序列数据处理、多模式输入以及3D数据处理能力等。每个目标分为3个等级,依赖于对应工作对该目标的专注程度,叉号则代表该目标问题并没有被该工作考虑进来。另外,图8对提及方法的关系进行了形象化的描述。

     

    4.1 解码器变体

     

    除了FCN之外,还有其他的变体来将原用于分类的网络转化为适合分割的形式。有争议的说,基于FCN的架构更加受欢迎,也更成功,但是其他替代的架构也同样值得注意。一般来说,这些网络均选用一种分类网络如VGG-16,然后去掉其全连接层。分割网络的这个部分通常被称之为编码器,产生低分辨率的图像表示或者特征映射。而问题在于学习如何解码或者将这些低分辨率的图像为分割问题映射到像素级别的预测上去。这部分被称为解码器,一般是这种架构的不同方法的区别所在。

     

     

    图 9 SegNet架构示意图。一个编码器加一个解码器,然后是一个softmax分类器用于像素级别的分类,图来自[66]。

     

    SegNet [66] 是理解这种区别的很明显的例子(见图9)。解码器部分由一系列的上采样及卷积层组成,最终接上一个softmax分类器来预测像素级别的标签,以此作为输出,可以达到与输入图像相同的分辨率。解码器部分的每个上采样层对应于编码器中的一个最大池化层,解码器中的这些层用索引自编码器阶段的对应的特征映射来进行最大池化,从而对目前的特征映射进行上采样。这些上采样得来的映射接下来将由一系列的可训练的滤波器集合来进行卷积,从而产生密集的特征映射。当特征映射被修复为与原输入相同分辨率的时候,其将被输入softmax分类器中得到最终的分割结果。

     

     

    图 10 SegNet(左)与FCN(右)解码器的对比。SegNets用对应的编码器部分最大池化来进行上采样,而FCN学习出反卷积滤波器来进行上采样(其中加入编码器中对应的特征映射)。图取自[66].

     

    而另一方面,基于FCN的架构利用了可学习的反卷积滤波器来对特征映射进行上采样,然后,上采样得到的特征映射将按照元素优先的方式加入到编码器部分卷积层得到的对应的特征映射中。图10展示了两种方法的对比。

     

    4.2 整合上下文知识

     

    语义分割需要对多种空间尺度的信息予以整合,也需要对局部与全局信息进行平衡。一方面,细粒度的或者局部的信息对于提高像素级别的标注的正确率来说是关键的;另一方面,整合图像全局的上下文信息对于解决局部模糊性问题来说也是重要的。

     

    一般的CNN模型对于处理这种平衡不是很擅长。池化层可以使网络取得某种程度的空间不变性并保持同样的计算效率,却丢失了全局的上下文信息。即便是纯的CNN网络,即没有池化曾的CNN,也同样受限,因为其神经元的感受野只能随着层数线性增长。

     

    可以采用很多方法来使CNN对全局信息敏感:用条件随机场(CRF)作为后处理过程来调优结果,多尺度聚合,或者甚至是将对上下文的建模延缓到另一种深度模型中,如RNN。

     

    4.2.1  条件随机场

     

    如前所述,CNN结构内在的空间转化不变性限制了其应用到分割问题上的准确率(尤其是其在空间位置上的准确性)。调优分割架构的输出并强化其捕捉细粒度信息的一个通用的办法就是引入条件随机场(CRF)作为其后处理模块。CRF促成了底层图像信息(如像素间的相互关系[92,93])与产生像素级别的类别标签的多类别推理输出的结合,这种结合对于捕捉长期依赖性质尤其重要,这也是关注于局部细节的CNN所未能考虑到的。

     

    DeepLab模型[68,69]使用了全连接的两两之间的CRF模型[94,95]作为其流程中的一个独立的后处理步骤,以此对分割结果进行调优。该模型将每个像素建模为某区域内的一个节点,无论两个像素距离多远,其两两之间的关系都会被衡量,因此,本模型也被称为密集或全连接因子图。使用此模型后,无论短期的还是长期的像素相互关系都被考虑进来,使得系统可以考虑到分割过程中需要的细节信息,而由于CNN的空间不变性,这些信息是CNN结构所未能考虑的。尽管全连接模型通常是低效的,该模型由于可以用概率推理来近似,所以也可以达到相对地高效。图11展示了这种基于CRF的后处理过程对DeepLab模型产生的得分和信念映射产生的影响。

    图 11 DeepLab中展示的CRF调优每次迭代带来的影响。第一行是得分映射(softmax之前的层的输出),第二行是信念映射(softmax的输出)。

     

    Wild网络[43]中的材质识别使用了多种CNN模型用来识别MINC数据集中的块。这些CNN模型被以滑动窗口的方式使用,用来分类这些块,他们的权重值被转移到FCN的组成网络中,而FCN通过添加对应的上采样层来整合这些网络。多个输出取平均便得到了一个平均的映射。最后,与DeepLab中相同的CRF(只不过是离散化优化的)被用来预测与调优每个像素点处的材质。

     

    应用CRF来调优FCN网络的分割结果的另一个显著的工作便是Zheng等人提出的CRFasRNN模型[70]。该工作主要的贡献便是将密集CRF重写为带有成对势能的形式,作为网络的组成部分之一。通过展开均值场推理的各个步骤,并将其视为RNN结构,该工作成功地将CRF与RNN整合在一起成为一个完整的端对端的网络。这篇文章的工作说明了将CRF重写为RNN模型来构造出深度网络的一部分,与Pinheiro等人[81]的工作行成了对比,而该工作使用RNN来对大规模的空间依赖性进行建模。

     

    4.2.2 扩张的(dilated)卷积

     

    扩张卷积,又称`a-trous卷积,是对考虑Kronecker的卷积核[96]的扩展,而这种卷积核可以指数级地扩大感受野而不丢失分辨率。换句话说,扩张卷积是常规的利用上采样滤波器的方法。扩张率 控制着上采样因子,如图12所示,堆叠的以l为扩张率的扩张卷积使得感受野呈现指数级的增长,而滤波器的参数保持线性增长。这意味着扩张卷积可以在任意分辨率图片上高效地提取密集特征。另外,值得注意的是一般的卷积只是扩张率为1时的特殊情况。

    图 12  [71]所展示的不同扩张率的扩张卷积滤波器。(a)中扩张率为1,每个单元有3*3的感受野;(b)中扩张率为2,每个单元有7*7的感受野;(c)中扩张率为3,每个单元有15*15的感受野。

     

    实际上,这与做正常的卷积之前扩张卷积核是等同的,这意味着根据扩张率扩充其尺寸,为空元素位置补零,换句话说,当扩张率大于1时,滤波器参数将与非近邻元素相配对。图13展示了这种扩张的滤波器。

     

    图 13  滤波器元素根据扩张率与输入元素进行配对

    使用扩张卷积的最重要的工作便是Yu等人[71]提出的多尺度上下文聚合模型、上文提及的DeepLab模型(其升级版本)[69]、以及实时处理网络ENet[72]。所有这些将越来越大的各种扩张率结合,使得模型具有更大的感受野,同时不增添额外的消耗,也不会过度地对特征映射进行下采样。这些工作同时具有相同的趋势:扩张卷积与紧密多尺度上下文聚合紧密耦合,这我们将在后面章节中解释。

     

    4.2.3 多尺度预测

     

    整合上下文知识的另一种可能的做法便是使用多尺度预测。CNN中几乎每个单独的参数都会影响到得到的特征映射的大小,换句话说,非常相似的架构也会对输入图像的像素数量产生较大的影响,而这关系到每个特征映射。这意味着滤波器将会潜在地检测特定尺度的特征(大致上有着特定的程度)。另外,网络的参数一般都与要解决的问题息息相关,也使得模型向不同尺度的扩展变得更难。一种可能的解决方案便是使用多尺度的网络,这种网络一般都是选用多个处理不同尺度的网络,最后将他们的预测结果结合,产生一个单一的输出。

    Raj等人[73] 提出了全卷积VGG-16的一种多尺度版本,有着两个路径,一个是在原始分辨率上处理输入,使用的是一个浅层的卷积网络,再一个就是在两倍分辨率上处理,使用全卷积VGG-16和一个额外的卷积层。第二个路径的结果经过上采样后与第一个路径的结果相结合,这个串联起来的结果再经过一系列的卷积层,得到最终的输出。这样,这个网络便对尺度变换更加鲁棒了。

    Roy等人[75]采取了另外的方法解决这个问题,他们选用了包含4个多尺度CNN的网络,而这4个网络有着相同的架构,取自Eigen等人[74]。其中之一致力于为当前场景找出语义标签。这个网络(整体上)以一个从粗糙到精细的尺度序列来逐步的提取特征(如图14)。

    图 14  [74]中提出的多尺度CNN架构,利用一个尺度序列预测深度、法向来逐步将输出调优,并且对一个RGB的输入执行语义分割。

     

    另一个重要的工作是Bian等人[76]提出的网络,这个网络包含n个FCN,可以处理不同尺度的问题。该网络提取的特征将融合在一起(先使用合适的填充方法进行必要的上采样),然后通过一个额外的卷积层之后得到最终的分割结果。这个工作的主要贡献便是这个两步的学习过程,首先,独立的训练每个网络,然后,这些网络将结合,最后一层将被微调。这种多尺度的模型可以高效地添加任意数量的训练好的网络进来。

     

    4.2.4 特征融合

     

    再分割问题中,向全卷积神经网络架构中加入上下文信息的另一种方式便是进行特征融合。特种融合技术将一个全局特征(由某网络中较前面的层提取得到)与一个相对局部的特征映射(后边的层提取得)相结合。常见的架构如原始FCN网络利用跳跃连接的方式进行延迟特征融合,也是通过将不用层产生的特征映射相结合(图15)

    图 15 类似跳跃连接的架构,对特征映射进行延迟融合,其类似于在每个层上做出独立的预测后再对结果进行融合。图来自[84]。(注:每个层均有“分割结果”,最后融合之)

     

    另一种方法便是提前融合,这一方法来自ParseNet[77]中的上下文模块。全局特征被反池化为与局部特征相同的尺寸,然后,将这两种特征进行串联后得到一个合并的特征,输入到下一层或者直接用于分类器的学习。如图16所示。

     

    图 16  ParseNet中的上下文模块示意图。较前面的层产生的全局特征与其下一层产生的特征相结合,以此来添加上下文的信息。图来自[77]。

    SharpMask[84] 这个工作继续发展了这种特征融合的想法,其引入了一种先进的调优模块来将前面层产生的特征合并到后面的层,这个模块使用的是一种自上而下的架构。由于其重点关注实例分割方面,所以这个工作我们将在后面章节介绍。

     

    4.2.5 循环神经网络RNN

     

    我们注意到,CNN网络在非一维数据如图像等的处理上取得了成功,但是,这些网络依赖于手工设计的核,将网络限制于局部上下文中。而得益于其拓扑结构,循环神经网络成功地应用到了对长期或短期序列的建模上。这样,通过将像素级别的以及局部的信息联系起来,RNN可以成功地建模全局上下文信息并改善语义分割结果。但是,一个重要的问题便是,图片中缺乏自然的序列结构,而标准的RNN架构关注的恰恰是一维的输入。

    图 17 ReSeg网络示意图。VGG-16的卷积层以第一层中的蓝色和黄色层展示,余下的架构基于微调目的的ReNet,图取自[78]。

     

    基于面向分类的ReNet模型,Visin等人[19]提出了ReSeg模型[78]用于语义分割,如图17所示。在本方法中,输入图像在第一层VGG-16层中被处理,特征映射结果送入一个或更多的ReNet层中来进行微调。最终,特征映射的尺寸被调整,使用的是基于反卷积的上采样层。在本方法中,门循环单元(GRU)被用来平衡占用空间与计算复杂度。一般的RNN在建模长期依赖关系时表现不好,主要是因为梯度消失问题的存在。由此产生的长短期记忆网络(LSTM)[97] 和GRU [98]是该领域目前最好的两种方法,可以避免以上问题。

    受ReNet架构的启发,有人为场景标注问题提出了一种新型的长短期记忆上下文融合模型(LSTM-CF)[99]。该方法使用了两种不同的数据源:RGB信息和深度信息。基于RGB的部分依赖于DeepLab架构[29]的变体,串联了三种不同尺度的特征来丰富特征表达(由[100]处获得启发)。全局信息在两个部分(深度信息部分与光学信息部分)都是竖直的,最终这两种竖直的上下文信息在水平方向上被融合。

    我们注意到,对图像全局上下文信息的建模与二维循环方法很有关系,只需在输入图像上按照水平和竖直方向分别将网络展开。基于相同的想法,Byeon等人[80]提出了简单的二维的基于LSTM的架构,其中的输入图像被分割为无重叠的窗口,然后将其送入四个独立的LSTM记忆单元。该工作突出贡献是其计算复杂度较低、运行与单个CPU以及其模型的简单性。

    另一种捕获全局信息的方法依赖于更大的输入窗口的使用,这样就可以建模更大范围内的上下文信息。但是,这也降低了图像的分辨率,而且引入了其他类似于窗口重叠等的问题。然而,Pinheiro等人[81] 引入了循环卷积神经网络(rCNN)来使用不同的窗口大小循环地训练,这相当于考虑了之前层中的预测信息。通过这种方法,预测出的标签将自动地平滑,从而使网络表现更好。

    无向循环图(UCG)同样被用来建模图像上下文信息从而用于语义分割[82]。但是,RNN并不直接适用于UCG,为了解决这个问题,无向循环图被分解为了多个有向图(DAG)。在本方法中,图像在三个不同的层中被处理,分别是:CNN处理得到图像的特征映射,DAG-RNN对图像的上下文依赖信息进行建模,反卷积层将特征映射上采样。这个工作说明了RNN如何可以与图相结合,被用来建模长期范围内的上下文依赖,并超过已有的最优方法。

     

    4.3 实例分割

     

    实例分割被认为是语义分割的下一步,与此同时其相对于其他底层像素级别分割技术来说是最具挑战性的。该问题的主要目标是将同一类的不同物体分割为各个实例,这个处理过程的自动化操作并不直观,因此,实例的数量并不是预先知道的,对得到的预测的评估方法也不像语义分割一样达到像素级别。所以,这个问题至今仍有部分未被解决,但是考虑到其潜在的应用,目前领域研究者对此保有兴趣。实例标注为我们分析遮挡情况提供了额外的信息,还可以数出属于同一类的物体的数量,从而可以为执行抓取任务的机器人检测出特定的物体。还有更多的其他应用。

    基于此目的,Hariharan等人[10]提出了一种同时检测和分割(SDS)的方法来提高现有方法的表现。这个方法首先使用了

    一种自下而上的层次化图像分割方法,称之为多尺度可结合组(MCG)[101],以此得到建议的分割区域。对于每个区域,使用适合的区域CNN(R-CNN)[102]版本来提取特征,其是由MCG方法中给出的边界框微调而来,而不是由选择性的搜索以及前景区域得出。然后,对每个建议的区域使用线性支持向量机(SVM)在CNN顶层特征上进行分类。最后,为了进行调优,非最大抑制(NMS)方法被应用到了先前的区域建议上。

    接下来,Pinheiro等人[83]提出了深度遮盖(DeepMask)模型,这是一种对物体给出提议的方法,基于单个的卷积网络。这个模型对于一个输入的分块预测出一个分割的覆盖区域,并给出这个块中包含物体的概率。这两个任务同时被一个单个的网络所学习和计算,他们共享多数的层,除了最后一层实现特定任务的层。

    上述作者基于DeepMask架构(并由于其有效性将其作为模型的起点)又提出了一种全新的模型,应用了一种自上而下的调优策略[84]解决物体实例分割问题,并在准确率和速度等方面取得了更好的表现。该过程的目标是高效的将底层特征与更后边的层中产生的高层语义信息相结合,这个过程包含了堆叠在一起的不同的调优模块(每个模块后都跟着池化层),目的在于通过生成一个新的上采样物体编码来转化池化的影响。图18展示了SharpMask中的调优模块。

    图 18  SharpMask中的自上而下逐步调优的结构,这种调优是通过将底层特征与上层中编码的高层特征想融合,来实现空间上丰富信息融合的目的。图来自[83]。

     

    另一种方法由Zagoruyko等人[85]提出,使用快速R-CNN作为起点,使用DeepMask的物体提议而不是选择性搜索。这种结合多种方法的系统成为多路分类器,提高了COCO数据集上的表现,对于快速R-CNN做出了三处修改:使用整合的损失项改善了定位能力,使用中心区域提供上下文信息,以及最终跳过连接来为网络给出多尺度的特征。该系统相对于快速R-CNN取得了66%的提升。

    可以看出,多数提到的方法依赖于现有的物体检测方法,这限制了模型的表现。即使这样,实例分割过程依然有很多问题未被解决,上述方法仅仅是这个有挑战性的方向的一小部分。

     

    4.4 RGB-D数据(带有深度)

     

    我们注意到,相当数量的语义分割的工作都是使用的照片式的数据,但是,廉价的RGB-D传感器促进了结构化信息的使用,这种传感器提供了有用的来自深度信息的几何线索。一些关注于RGB-D场景分割的工作已经在细粒度标注准确率上取得了进步,使用了深度信息而不仅仅是照片式的数据。利用深度信息进行分割更具挑战,由于不可预测的场景光照变化伴随着复杂遮挡导致的不完整的物体表示。但是,很多工作已经可以成功地使用深度信息提高准确率。

    带有深度信息的图片并不能直接应用到专门处理照片式数据的模型中。深度数据需要被编码为每个像素点上的三个通道,就好像是RGB图像一样。有许多不同的技术,比如水平-高度-角度(HHA)[11]方法,这个方法被用于将深度信息编码为以下三个通道:水平方向的差距,距离“地面”的高度,以及局部表面法向与推知的重力方向的夹角。这样,我们便可以向为RGB数据设计的模型中输入深度信息,并通过从结构化信息中学习新的特征来提高模型的性能。一些方法如[99]便是基于这种编码技术的。

    相关工作中还有一些工作,如同使用RGB-D数据的方法一样,利用一种多视角的方法来提高目前的单视角的工作的性能。

    Zeng等人[103]提出了一种使用多视角RGB-D数据和深度学习技术的物体分割方法。多视角捕获的RGB-D数据被送入FCN网络中,得到每个图像每个像素点分别作为40类的概率。分割标签由阈值截断,该阈值为各个视角下平均概率的三倍。另外,本工作训练多个网络(AlexNet [14] 和VGG-16 [15])来提取特征,然后来评估使用深度信息的优势。本工作发现,加入深度信息并没有为分割效果带来任何的提高,而这可能是深度信息的噪声导致的。这个工作是在2016年亚马逊挑选竞赛(Amazon Picking Challenge)上被提出的,是自RGB图像数据独立地输入FCN网络以来,对多视角深度学习系统的一个主要的贡献。

    Ma等人[104]提出了一个全新的物体类别分割方法,使用的也是多视角深度学习技术。多个视角是由运动的RGB-D摄像机拍摄的,在训练阶段,使用RGB-D SLAM技术获取摄像机轨迹,然后将RGB-D图像扭曲成与真实标注数据相同尺度以保证训练中的多视角的连续性。该方法基于FuseNet[105],其在语义分割过程中结合了RGB与深度图像,通过加入多尺度的损失最小化技术改善了原有工作的表现。

     

    4.5 三维数据

     

    三维几何数据如点云或多边形网格数据等是一种非常实用的数据表示形式,原因在于其提供的附加的维度使得算法可以考虑更加丰富的空间信息,而这显然对分割很有帮助。但是,绝大多数成功的深度学习分割技术,尤其是基于CNN的,开始并不是被设计为解决上面提到的非结构化或者不规则的输入的。为了在卷积网络中促成参数共享以及其他优化形式,多数工作借助于三维立体网格或者映射来将非结构化或者不规则点云或网格转化为普通表示形式,然后再将其输入网络中。例如,Huang等人[86](图19)选取了一个点云,通过一个密集的立体网格对其进行分析,生成了一系列的占位体元,将其作为三维CNN的输入并为每个体元产生一个标签,最后,算法将标签映射回点云。虽然该方法已被成功地应用,其仍有不足之处如难以量化、丢失空间信息以及不必要的大规模表示等。因此,众多研究者致力于构造出一种可以直接处理非结构化三维点集或网格的深度模型。

     

    图 19 Huang等人[86]提出的基于3DCNN的点云语义标注系统。点云经过一个密集的体元化处理过程,CNN将处理得到的每一个体元,然后将结果映射回原来的点云。图片来自[86]。

     

    PointNet[87]是一个先驱性的工作,提出了一种深度神经网络来将原始的点云作为输入,给出了一个同时进行分类和分割的联合的架构。图20展示了这种可以处理无序三维点集的双模块的网络。

     

    图 20  PointNet联合结构,用于分类和分割,图来自[87]。

     

    我们可以看出,PointNet是一种与众不同的深度网络架构,因为其基于全连接层而不是卷积层。该模型分为两部分,分别负责分类和分割。分类子网络以点云为输入,采用一系列变换以及多层感知机(MLP)来生成特征,然后使用最大池化来生成全局特征以描述原输入的点云。另外的MLP将对这些全局特征进行分类,然后为每一个类得出分数。分割子网络将全局特征与分类网络生成的每个点的特征串联起来,然后应用另外的两个MLP来生成特征,并计算出每个点属于每一类的得分。

     

    4.6 视频序列

    我们观察到,单幅图像的分割已经取得了较大的进展,但是,当处理图像序列时,许多系统简单地使用逐帧处理的方法,这种方法比较奏效,也通常可以得到不错的结果,但是,这样处理是机器耗时的,因此通常不可行。另外,这种方法完全忽略了短期连续性以及一致性信息,而这些信息极可能会提高系统准确率并减少运行时间。

    可争辩地,这方面最具标志性的工作便是Shelhamer等人[88]提出的时钟FCN网络。该网络改编自FCN,使用视频中的短期线索来减少推理时间,同时保证正确率。这种时钟的方法依赖于以下想法:特征速度,即网络中短期的特征变化率,其在各层中经过某帧时是变化的,因此来自浅层的特征变化的比来自深层的特征要快。基于此假设,各层可以被分为不同的阶段,于是可以按照其深度指定不同的更新率来进行处理。这样,由于其语义上的稳定性,深度特征可以在各帧被保持,也就节省了推理时间。图21展示了这种时钟FCN的结构。

     

    图 21 三阶段的时钟FCN模型,以及其对应的时钟速率。图来自[88]。

     

    值得注意的是,作者提出了两种更新速率的策略:固定的和自适应的。固定的策略直接为每个阶段设置一个常数时间来重新计算特征。自适应策略则使用数据驱动的方法来设置时钟,例如,时钟依赖于运动或语义改变的数量。图22展示了这种自适应策略的例子。

     

    图 22 Shelhamer等人[88]提出的自适应的时钟方法。提取出的特征在静止的帧将会被保留,而在动态的帧时将会被重新计算。图来自[88]。

     

    Zhang等人[106]采用了一种不同的方式,使用了3DCNN这种原本被设计来学习三维体数据特征的方法,以此来从多通道输入如视频片段中学出层次化的时空联合特征。与此同时,该工作将输入片段过分割为超体元,然后利用这些超体元图并将学得的特征嵌入其中,最终将在超体元图上应用graph-cut[107]来得到分割结果。

    另一个重要的方法采用了三维卷积的思想,是由Tran等人[89]提出的一种深度的端对端的、体元对体元的预测系统。该方法将自己提出的三维卷积(C3D)网络应用于先前的工作[108]中,在最后添加了反卷积层以将其扩展为面向语义分割的算法。该系统将输入的视频片段分为包含16个帧的小片段,对每个片段单独进行预测。其主要的贡献在于其使用的三维卷积技术。这种卷积技术使用了三维的滤波器,适应了从多通道数据中学出的时空联合特征,图23展示了应用到多通道输入数据上的二维和三维卷积的不同之处,证明了视频分割情况下三维卷积核的有用性。

     

    图 23  应用于一系列的帧的时候,二维和三维卷积的不同。(a)中,二维卷积在各个帧(多通道)的各个深度使用的是相同的权重,产生的是一个单一的图像。(b)三维卷积使用的是三维的滤波器,卷积后产生的是三维体元,因此保留了帧序列的时间信息。

     

     

    讨论

     

    前面的章节我们定性地回顾了现有的方法,也就是说,我们没有考虑任何定量的结果。在本章,我们从数学的角度讨论这些方法。首先,我们将描述最常用的评价指标,这些指标在以下三方面度量语义分割系统的表现:运行时间、占用内存、准确率。然后,我们将收集这些方法在最具代表性的数据集上运行的结果(以本文中所述的指标度量)。接着,我们将总结这些结果。最终,我们列举未来研究可能的方向,以及我们认为的该领域的重点之处。

     

    5.1 评价指标

     

    对于一个分割系统来说,要对该领域产生重要的影响,必须经过严格的评估。另外,评估过程中必须使用标准的众所周知的评价指标,这样对于现有方法来说才是公平的。进一步的,必须对方法的各个方面进行评估,然后才能断言该系统的有效性,这些方面包括运行时间、占用内存、准确率等。由于对目标或上下文的依赖性,某些指标可能会更加重要,也就是说,在一个实时处理的应用中,可能会为了运行速度而牺牲准确率。但是,为了科学的严谨性,提供该方法的所有可能的评价指标度量是极其重要的。

     

    5.1.1 运行时间

     

    但是,考虑到可重复性以及对后续研究者的帮助,有必要在提供运行时间的同时给出系统运行的硬件信息,以及基准方法的配置。如果合理地做到了这些,后续的研究者们将可以判断出这个方法是否对其真实应用实用,并且可以使用相同的环境进行公平的对比。

     

    5.1.2 占用存储空间

     

    内存占用是分割问题中的另一个重要的考量。虽然不及运行时间那样受限,因为扩充容量一般是可行的,其仍然作为系统的一个限制因素。在某些场景下,例如机器人平台上的板载芯片,内存并不会像高性能服务器中一样充裕。即使是普遍用来加速深度网络的高端的显卡(GPU)也不会搭载大容量的存储空间。基于这些考虑,以及与在时间问题上相似的对于实际应用的考虑,详细记录网络所占用的最大及平均存储空间是极其有用的。

     

    5.1.3 准确率

     

    已经提出了许多用于评估语义分割问题准确率的评价指标,这些指标通常是像素级准确率及IoU的变体。我们报告了语义分割方面最常用的评价指标,用来度量逐个像素标注类的方法的表现。为便于解释,我们给出下述标号的意思:我们假设共有k+1类,(从L0到Lk,包括一个空类或者是背景),pij是本属于第i类却被分到第j类的像素数量。也就是说,pii代表的是分类正确的正例数量,其他几个p值类似。

     

    像素准确率(PA:这是最简单的指标,仅仅计算正确分类的像素数量与所有像素数量的比值。

    像素准确率平均值(MPA:对PA的轻微改进版本,正确分类像素的比例是按类计算的,最终由类总数取平均。

     

    平均交并比(MIoU):这是用于分割问题的标准评价指标,其计算的是两个集合的交集与其并集的重合比例,在本问题中,其计算的便是真实分割与系统预测的分割之间的交并比。这个比例可以被重新定义为真实正例(交集)的数量除以总数量(包括真实正例、错误负例、以及错误正例(并集))。IoU也是按类计算最后取平均。

     

    频率加权交并比(FWIoU):是对MIoU的改进,对每个类别按照重要性进行加权,重要性来自于其出现的频率。

     

    对于上述的所有指标,MIoU是最常用的一个,因为它最具代表性,且非常简单。许多竞赛以及研究者使用该指标来报告其结果。

     

    5.2 结果

     

    如前所述,第四章根据各自的任务给出了各个方法的功能描述,现在,我们收集了这些方法对应论文中报告的所有的量化的结果。这些结果按照其输入数据集的不同分为三个部分:二维RGB数据、2.5维RGB-D数据以及三维体数据或视频序列数据。

    我们选用了最常用的数据集,值得注意的是,这些论文在报告结果是并不统一。虽然多数的方法试图以标准数据集评估其方法,并尽量提供充足的信息来保证其结果可以重现,以及尽量使用最常用的评价指标来评价,但很多其他方法并没有这样做。这也使得公平地对比这些方法变得很困难。

    另外,我们发现很少有作者提供除准确率之外的其他评价信息。尽管其他指标也是重要的,多数论文并没有提供其运行时间或者占用内存的信息。有时候这些信息有,但是必要的程序再现性信息又没有给出,所以,无法得知这些方法的配置信息。

     

    5.2.1 RGB图像

     

    对于二维图像这一类,我们选取了7个数据集:PASCAL VOC 2012、PASCAL上下文、PASCAL人物、CamVid、CityScapes、斯坦福背景以及SiftFlow数据集。这些数据集涵盖了多种情况和优化目标。

    首先是,值得争议的最终的数据集,也是绝大多数方法都会使用的PASCAL VOC 2012数据集。表3给出了提供该数据集上结果的方法在其测试集上的准确率。这个结果集展现了一个清晰的上升趋势(从第一个提出的方法SegNet以及原始FCN开始),直到最复杂的模型如CRFasRNN以及目前最优的DeepLab(IoU为79.70)。

     

    表 3 PASCAL VOC 2012 上的表现结果

     

    除了最常见的VOC数据集,我们还收集了在上下文数据集上各方法的准确率,表4给出了结果统计,DeepLab依然是最高(IoU为45.70)。

     

    表 4  PASCAL上下文数据集上的表现结果

     

    另外,我们考虑了PASCAL人物部分,结果见表5。在本数据集上仅有DeepLab进行了实验,结果IoU是64.94。

     

    表 5  PASCAL人物部分数据集的表现结果

     

    上面考虑了通用目标的数据集如PASCAL VOC,接下来我们收集了两种最重要的城市驾驶数据集上的结果。表6给出了CamVid数据集上的方法的结果,一种基于RNN的方法即DAG-RNN取得了最优的IoU为91.60。

     

    表 6  CamVid数据集上的表现结果

     

    表7给出了更具挑战性且目前更常用的数据集及CityScape数据集上的结果。其表现出的趋势与PASCAL VOC上的相似,DeepLab以IoU70.40领跑。

     

    表 7  CityScape数据集上的结果

     

    表8给出了多种循环网络在斯坦福背景数据集上的结果,rCNN取得了最好的结果,其最大IoU为80.20。

     

    表 8 斯坦福背景数据集上的结果

     

    最后,其它常见数据集如SiftFlow等的结果在表9中展示。这个数据集同样被循环方法所霸占,尤其是DAG-RNN取得了最好的IoU85.30。

     

    表 9 SiftFlow上的结果

     

    5.2.2  2.5维数据

     

    对于2.5为数据这一分类,也就是数据中不仅包含RGB三个通道,还包含深度信息,我们选择了三个数据集进行分析,分别是SUN-RGB-D、NYUDv2、SUN3D。表10、11、12分别给出了这三个数据集上的结果。

     

    表 10 SUN-RGB-D上的结果

     

     

    表 11 NYUDv2上的结果

     

    表 12  SUN3D上的结果

     

    5.2.3 三维数据

     

    选用了两个三维数据集:ShapeNet Part和Stanford-2D-3D-S。表13和表14分别展示了其结果。

     

    表 13  ShapeNet Part数据集上的结果

     

    表 14 Stanford-2D-3D-S数据集上的结果

     

    5.2.4 序列数据

     

    最后一个分类便是视频或序列数据数据集。我们选取了两个适合于序列分割的数据集:CityScapes和YouTube-Objects。表15和表16分别展示了结果。

     

    表 15 CityScapes数据集上的结果

     

    表 16 Youtube-Objects数据集上的结果

     

     

    5.3 总结

     

    根据这些结果,我们可以得出许多结论。最重要的结论与可重现性有关。正如我们所观察到的一样,许多方法报告了非标准数据集上的结果,或者有些方法根本没有进行测试,这使其不可能参与对比。另外,有些方法没有描述其实验的配置,或者没有提供可执行的代码,于是这也使得重现起来非常困难。各个方法都应在标准数据集上评估其结果,尽可能全地描述其训练过程,同时公开其模型与参数。

    另一个发现便是,很多方法缺少对运行时间与占用内存的评价。几乎没有论文报告这两种信息,这些也都面临着无法重现的问题。多数方法关注准确率而忽视了时间与空间效率,这导致了其在分析这些问题上的空缺。但是,但其被应用时,这些问题是很重要的。实际上,多数算法将被应用于植入型设备上,如自动驾驶汽车、无人机、机器人等,这些应用都受限于计算消耗以及内存空间。

    考虑到方法各自的结果,我们认为DeepLab是最可靠的方法,其在几乎每个RGB图像数据集上都远远超过了其他方法。2.5维和多模态数据集上,循环的网络如LSTM-CF起到了主导作用。三维数据的分割问题仍有很长的路要走,PointNet为解决无序点云的分割问题开辟了道路。最后,处理视频序列同样作为一个待开发区域,至今并没有明确的方向,但是,时钟卷积神经网络凭借其效率和准确率还是成为了最可靠的方法。三维卷积是值得关注的,由于其强大的功能及对多通道输入数据的可扩展性,且三维卷积可以同时捕获时间空间信息。

     

    5.4 未来研究方向

     

    基于以上回顾过的代表了目前最高水平的方法,我们给出了一系列的未来研究的可能的方向。

    1)三维数据集:充分利用三维数据的一些方法已经开始出现,但是,即使是最新的方案,仍然缺乏对于最重要的构成成分之一即数据的考虑。目前急需一个大规模三维语义分割数据集,但这相对于其低维部分来说是较难创建的。虽然已经有了一些不错的工作,仍然需要更多、更好、更富变化的数据集的出现。值得注意的是,真实世界的三维数据是极其重要的,因为目前几乎所有的工作都是使用的合成数据集。三维数据重要性的一个证明便是,2018年ILSVRC将会创建三维数据。

    2)序列数据集:三维数据集上大规模数据集缺乏的问题同样影响到了视频序列分割问题。目前仅有少数几个数据集是基于序列的,这些数据集对于利用时间序列信息的方法的发展很有利。从本质上将二维及三维高质量数据联系起来必将引领新的研究方向。

    3)使用图卷积网络(GCN)对点云进行分割:如之前所述,处理三维数据如点云等目前尚未解决,由于点云内在的无序性及非结构性,传统的架构如CNN等不能直接予以应用,除非使用某种离散化手段使其结构化。一个靠谱的研究方向便致力于将点云处理为图,然后在其上应用卷积[109,110,111]。这种做法的好处便是在不量化数据的基础上保留了每个维度上的空间信息。

    4)上下文知识:虽然FCN是语义分割领域中的一种坚实的方法,但是FCN网络缺乏对于上下文等特征的建模,而这些信息有可能会提高准确率。将CRF重写为RNN来创造一种端对端的解决方法看起来是一个靠谱的方法,可以提高真实生活场景下的性能。多尺度及特征融合方法也取得了较大的进展。总之,这些方法已经取得了不小的进步,但是仍然有许多问题亟待解决。

    5)实时分割:在很多应用场景下,准确率是重要的,但是,能够处理达到常见的摄像机帧率(至少25帧每秒)的输入速度也是很关键的。目前多数的方法远远达不到这个帧率,比如,FCN-8处理一张低分辨率的PASCAL VOC数据集中的图像需要100ms,同时,CRFasRNN需要500ms。因此,接下来几年,我们期待会有一系列的工作关注于实时处理的限定,这些工作将必须在准确率与运行时间之间寻求一个平衡。

    6)存储空间:某些平台受限于其存储空间。分割网络一般需要较大的存储空间,从而可以同时进行推理与训练。为了适应各种设备,网络必须要简单。虽然这可以通过降低复杂性(一般会牺牲准确率)来简单地实现,但是还是可以采取另外的办法。剪枝是一种靠谱的研究方向,可以用来简化网络,使得网络在保留多数信息的同时变得轻量化,也因此同时保留了原网络的准确率。

    7)序列数据的时间一致性:一些方法解决了视频或序列分割的问题,但是他们有些未利用时间序列信息来提高准确率或效率。然而,没有一种方法解决了一致性的问题。对于一个应用在视频流上的分割系统来说,一致性信息是重要的,不仅可以逐帧地处理数据,还可以对整个片段的处理保持一致,而不需要通过平滑为序列预测出的像素级别的标签而产生人工的信息。

    8)多视角整合:在最近提出的分割网络上应用多视角信息目前仅仅限于RGB-D摄像机相关的场景,尤其是致力于单一物体分割的情况。

     

    总结

     

    就我们所知,本文是第一篇对利用深度学习技术的语义分割技术的综述。对比其他综述文章,本文致力于深度学习这一正在崛起的研究领域,涵盖了最先进的相关工作。我们对语义分割进行了公式化定义,同时为读者提供了必要的深度学习应用于语义分割任务的背景知识信息。我们涵盖了相关工作中的方法和数据集,提供了对于28个数据集和27个方法的综述。我们详细介绍了数据集的情况,阐述了这些数据集的目的和特点,这样,研究者便可以轻松地挑选出最适合他们问题的数据集。方法按照两个方面进行综述:其贡献和原始结果即准确率。我们还以表格的形式提供了数据集和方法的总结,按照多种指标对其进行了分类。最后,我们讨论了这些结果,提供了对未来工作方向的看法以及该领域一些开放问题的讨论。总之,语义分割问题已经被很多不错的方法所解决,但是仍然存在着开放的问题,这些问题一旦解决将会对真实场景的应用产生较大的帮助。另外,深度学习技术被证明了对于解决语义分割问题的强大性,因此,我们期待接下来几年各种创新的不断涌现。

     

     

     

    展开全文
  • 语义分割

    千次阅读 2017-12-31 11:17:58
    图像语义分割中存在3种挑战:(1)特征分辨率减少,(2)不同尺度下的物体的存在状况,(3)由于深度卷积神经网络的不变性造成的定位精度减少。第一个挑战是由 基于分类的卷积神经网络包含重复最大池化和降采样...
  • 语义分割的发展前景和概述

    千次阅读 2018-04-03 16:23:27
    收藏用~原文出自:http://blog.geohey.com/ji-suan-ji-shi-jue-zhi-yu-yi-fen-ge/计算机视觉之语义分割2017年10月11日人工智能被认为是第四次工业革命,google,facebook等全球顶尖、最有影响力的技术公司都将目光...
  • 语义分割概念及应用介绍

    千次阅读 2018-10-08 15:22:17
    比如自动驾驶汽车已经逐渐成为可能,但在整个深度学习过程,需要算法识别和学习作为原始数据提供的图像,在这一过程中,应用到了语义分割技术。下面让我们来看看语义分割的需求是如何演变的。 早期,计算机视觉的...
  • 语义分割总结

    千次阅读 2018-04-20 19:11:48
    目前看过的论文有FCN,U-net,还有几个经典网络没有看,看论文速度有待提高,赶紧还债,下面是我对几个语义分割网络的简单理解,后期会补充。另,建议关注一个类似知乎的国外精英网站:Qure) 参考来源 :A 2017 ...
  • 计算机视觉 - 语义分割 (semantic segmentation)

    万次阅读 多人点赞 2018-03-19 11:39:43
    转载自:http://blog.geohey.com/ji-suan-ji-shi-jue-zhi-yu-yi-fen-ge/计算机视觉之语义分割2017年10月11日人工智能被认为是第四次工业革命,google,facebook等全球顶尖、最有影响力的技术公司都将目光转向AI,...
  • 语义分割最新指南2019版

    万次阅读 2019-10-10 02:42:08
    之前出现的深度学习语义分割指南2017版(A 2017 Guide to Semantic Segmentation with Deep Learning ),作者总结了当年各个具有代表性的语义分割算法与相关贡献。今年Namespace Africa 数据科学家Derrick Mwiti 对...
  • 语义分割与实例分割的区别

    万次阅读 2017-04-26 14:37:00
    (1)像素级别的语义分割 (2)实例分割这个有意思,什么叫实例分割呢?它与语义分割有什么区别与联系呢? 顾名思义,像素级别的语义分割,对图像中的每个像素都划分出对应的类别,即实现像素级别的分类; 而类的...
  • 语义分割和实例分割概念

    千次阅读 2018-10-18 11:05:04
    有些概念容易混淆,整理一下,备注记忆。 一、概念区分 1. 图像分类(image classification) ...3.语义分割(semantic segmentation) 识别图像中存在的内容以及位置(通过查找属于它的所有像素...
  • 计算机视觉的任务很多,有图像分类、目标检测、语义分割、实例分割和全景分割等,那它们的区别是什么呢? 1、Image Classification(图像分类) 图像分类(下图左)就是对图像判断出所属的分类,比如在学习分类中...
  • 基于卷积神经网络的图像语义分割

    万次阅读 2018-02-14 20:41:25
    论文地址基于卷积神经网络的图像语义分割浙江大学硕士论文图像分割:就是把感兴趣的内容从图像上分割出来,但是一般会对这个目标加上一定的语义信息,即语义标签,把加上语义的图像分割称为图像语义分割。...
  • 语义分割、实例分割和全景分割的区别

    千次阅读 多人点赞 2019-05-14 20:02:11
    这里重点说下语义分割、实力分割和全景分割的区别。 1 、semantic segmentation(语义分割) 通常意义上的目标分割指的就是语义分割,图像语义分割,简而言之就是对一张图片上的所有像素点进行分类 语义分割(下...
  • 一图足以说明:
  • CRF图像语义分割

    千次阅读 2018-03-10 20:05:12
    对于CRF图像分割,有一个python模块github。该模块来源于论文Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials 条件随机场图像分割原理: P(x/y)参考 github代码...
  • 在计算机视觉中,图像分割是个非常重要且基础的...图像分割中的一些常见的术语有:superpixels(超像素)、Semantic Segmentation(语义分割)、Instance Segmentation(实例分割)、Panoptic Segmentation(全景...
  • CV之IS:计算机视觉中图像分割(语义分割)最diao炸(完)天(整)的思维导图 导读:此语义导图为某大牛精心整理,感谢无私分享。 目录 语义分割思维导图(完整) 相关文章CV之IS:计算机视觉之图像分割(Image...
1 2 3 4 5 ... 20
收藏数 58,286
精华内容 23,314
关键字:

语义分割