计算机视觉 语义分割 论文笔记

<A Review on Deep Learning Techniques Applied to Semantic Segmentation>

  • 1. 综述

语义分割semantic segmentation 是计算机视觉中一个重要的部分。长远来看,它为完整的场景理解铺平了道路。语义分割并不是一个单独的门类,这是从粗糙分类到精细分类的自然一步。
演化的步骤是这样的:
1. 首先我们做的是输入一张图,输出这张图上有没有特定的物体,即预测哪些物体是属于这个图像的,或者给出一个可能性排序。

2. 接下来我们发展为:给出物体的定位与检测。定位体现在我们可以标注出物体的中心点,或者用框框出来。然而这里的检测还是检测出一个类别,并不能细分出类别里的事例。可以理解为能识别java里的class 而不是instance 的感觉。这样的话我们对于图中的每一个像素都能归类到一个类别。

3. 在之前的基础上,我们可以进一步细化,我们可以把图中的每个像素不光标注出它属于什么类别class,而是标注出属于哪个事例instance



所以上图c,d 这种问题就被归结为:
我们定义一个集合 L{l0,l1,...lk}
集合L代表一共有k+1个不同的instance标签,通常我们认为l0就是背景background
定义集合X = {x1, x1, ... xn}
集合X代表图中所有像素一共n个像素点。
输出就是预测每个像素点所对应的label值

这也就是像素级别的预测

    1. Alex Net
    2. VGG
    3. GoogLeNet
    4. ResNet
    5. ReNet
  • 2.2 迁移学习
因为从头训练一个深度神经网络通常不太可行,原因有二:训练需要足够的数据量;模型训练到收敛需要不少的时间。通常我们拿一个预训练好的模型,然后用自己的数据集训练,微调Fine-tuning一些权重。在Fine-tuning的时候,选取哪一层开始很关键,一般会选择比较较高的层,因为底层会保留比较通用的特征;并且learning rate 也不适合选的过大,毕竟我们只是微调。


  • 2.3 数据预处理和数据增强
数据增强指从已有数据中得到新的样本,通过平移、旋转、扭曲、缩放、颜色空间转换、裁剪等实现,从而构建更大的数据集,也能防止过拟合,同时可以正则化训练模型。


  • 3. 数据集和竞赛

略去不讲


  • 4. 方法

深度学习在计算机视觉上取得了不错的成绩,比如说监督学习的卷积神经网络CNN在图像分类和物体检测(都是非像素级别的识别)上的不凡表现。 于是,研究者们开始探索在像素级别上的应用,比如语义分割。
最近,语义分割上最成功的就属FCN。
<[65] Fully convolutional networks for semantic segmentation>
FCN的做法是:使用传统的CNN网络作为其中一个模块,来产生层次化的特征。
于是研究者们就把在分类任务上表现不错的几大网络: AlexNet, VGG, GoogLeNet, ResNet的全连接层转化成了卷积层;这样他们最后的输出就不再是几个类别的得分,而是整个空间分布(spatial maps)
这些maps是sampled using fractionally strided convolutions (also named deconvolutions [90][91]) 得到
<[90] Adaptive deconvolutional networks for mid and high level feature learning>
<[91] Visualizing and understanding convolutional networks>


Fig.7 Fully Convolutional Network figure by Long et al. [65]. Transforming a classification-purposed CNN to produce spatial heatmaps by replacing fully connected layers with convolutional ones. Including a deconvolution layer for upsampling allows dense inference and learning for perpixel labeling

虽然FCN表现不错,但是仍然存在着一些问题:对上下文语境的理解不够,对于高分辨率的图像效率不足,不完全适合非结构性数据(比如3-D点云),以及非结构模型。
作者总结了一些基于深度学习的语义分割网络模型,他们的架构,贡献,对任务考虑的点



    • 4.1 解码器变体 Decoder Varient
我们用的网络模型结构是Encoder-Decoder模型。在这样的模型里面,对于解码器的选择往往决定了模型之间的差异(http://blog.csdn.net/u014595019/article/details/52826423)
对于Decoder,除了FCN以外还有别的选择。SegNet就是一个很明显的例子。在SegNet中,解码器的上采样upsampling部分,用的是最大池化来来做的,如图10所示,在downsampling的时候先记录下那时候的选取的点的坐标,然后在upsampling 的时候还原到对应位置。这个可以参考上一篇博客的第一部分对于upsampling的内容,图10里面表示SegNet的就是bed of nails的upsampling. 在最后当我们得到与原图相同分辨率的时候接上一个softmax层来进行像素级别的预测。

对比图10中的右半部分,FCN在upsampling的时候的做法就和SegNet不同。在FCN中使用的是可以学习的deconvolution filter,或者叫做transposed conv filter. 具体做法看这里吧...
个人理解:根据图10 右边的内容,abcd这个小矩阵是经过了encoder之后的内容,y的那个矩阵是encoder里面某一个downsampler层的内容,我们根据x矩阵和y矩阵的运算来对x矩阵里面的值进行调参。从而最后得到学习完毕的x矩阵。这里的upsampling值指的是从abcd到最后x矩阵的过程。
原文:On the other hand, FCN-based architectures make use of learnable deconvolution filters to upsample feature maps. After that, the upsampled feature maps are added elementwise to the corresponding feature map generated by the convolution layer in the encoder part. Figure 10 shows a comparison of both approaches.


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

但是一般的(Vanilla)CNN模型不是很擅长处理这种平衡,他们通常更偏向于局部信息。池化层让网络得到某种程度的空间不变性,并且保持同样的计算效率,但是这里会丢掉全局的上下文信息。 即使纯粹的CNN,没有池化层的,也由于神经元的感受野只随层数线性增长而受限。

可以采取很多方法来让CNN感受全局上下文:用条件随机场(CRF)作为后处理过程来调优结果;空洞卷积(扩张卷积)(dilated convolutions);多尺度聚合;或者甚至把上下文建模放在另一种深度模型,比如RNNs


      • 4.2.1 Conditional Random Fields 条件随机场
      • 4.2.2 Dilated Convolutions 空洞卷积
      • 4.2.3 Multi-scale Prediction 多尺度预测
      • 4.2.4 Feature Fusion特征融合
      • 4.2.5 Recurrent Neural Networks 递归神经网络

    • 4.3 Instance Segmentation 实例分割

实例分割被认为是语义分割的下一步,也是在其他所有低层像素分割技术里面,最具有挑战性的问题。实例分割的在于:标示出同一个类别(class)分出的不同实例(instance)。这里要自动化实现它没什么直接的办法,因为实例的数量是一开始不知道的,而且对于预测结果的评估也不是像语义分割那样是像素级别的。所以这个问题至今有部分没有被解决,但是考虑到潜在的适用场景,还是很多研究者对它感兴趣。实例标注给一些遮挡的情况提供了额外信息,也可以为同一个类别的元素数量计数,也可以检测出特定的物体给机器人抓取,这可以用在很多场景中。

基于这个目的,Hariharan 等人提出了一个同时检测和分割(SDS)的方法来给现有的工作提高性能。(Simultaneous detection and segmentation)他们首先使用一个层次化的自下而上层次化图像分割和物体候选生成过程,称为多尺度可结合组Multi-scale COmbinatorial Grouping (MCG) 来得到建议的分割区域。对每个区域,用合适的Region-CNN来提取特征,这里的参数是通过MCG方法中给出的边界微调出来的,而不是选择性的搜索以及前景区域得出。然后对于每个建议的区域使用线性支持向量机(SVM)在CNN顶层特征进行分类。最后,为了调优的目的,非最大抑制Non-Maximum Suppression 被用在之前的建议上。
//这段没看懂,todo: https://arxiv.org/pdf/1407.1808.pdf

接下来,Pinheiro 等人提出了DeepMask模型,这是一种对物体给出建议的方法, 基于单个的卷积网络。这个模型对于一个输入patch预测一个语意mask,并且给出这个patch包含一个物体的可能性。这两个任务是被同一个网络同时学习的,这两个任务共享网络中很多层,出了最后几个针对不同任务的层。

Pinheiro又基于DeepMask架构,提出了一种新的模型解决物体实例分割问题,他用了一种自上而下的调优策略解决物体实例分割问题,并且有更好的准确度和速度。这里的目的是高效的整合底层信息和高层的语意信息。这个过程包含了不同的堆叠在一起的调优模块(每个池化层前都有一个),目的在于通过生成一个新的上采样物体编码来转化池化层的影响。如下图所示。

另外一条路,基于Fast R-CNN,使用DeepMask 物体建议,而不是选择性搜索的模型由Zagoruyko等人提出。这种合并的系统被称作MultiPath classifier,它提高了COCO数据集上的表现,并且在Fast R-CNN上做出了三处修改: 用一个integral loss提高定位,通过foveal regions来提供上下文信息,最后跳过连接来为网络提供多尺度特征。这个网络在Fast R-CNN基础上提高了66%
todo:A multipath network for object detection

可以看出,上述的大多数方法都依赖于已有的物体检测,他们限制了模型的性能。即使如此,实例分割仍然是个没有解决的研究课题,并且上面提到的也只是有挑战性的研究的一小部分。



Comments

Popular posts from this blog

Malware Report: iauzzy.exe

Malware Report: withme.exe

根因分析之iDice 文章复现