美文网首页嵌牛IT观察
深度学习之图像分割(上)

深度学习之图像分割(上)

作者: optongbuding | 来源:发表于2020-11-27 18:16 被阅读0次

    学号:20021210654

    姓名:潘文欣

    原文链接:https://blog.csdn.net/qq_36492210/article/details/89875708?utm_source=app

    【嵌牛导读】本文介绍基于深度学习的图像分割,介绍各种相关网络。

    【嵌牛正文】

    图像分割按分割目的划分:

    普通分割:

    将不同分属不同物体的像素区域分开。

    如前景与后景分割开,狗的区域与猫的区域与背景分割开。

    语义分割:

    在普通分割的基础上,分类出每一块区域的语义(即这块区域是什么物体)。

    如把画面中的所有物体都指出它们各自的类别。

    实例分割:

    在语义分割的基础上,给每个物体编号。

    如这个是该画面中的狗A,那个是画面中的狗B。

    论文推荐:

    图像的语义分割(Semantic Segmentation)是计算机视觉中非常重要的任务。它的目标是为图像中的每个像素分类。如果能够快速准去地做图像分割,很多问题将会迎刃而解。因此,它的应用领域就包括但不限于:自动驾驶、图像美化、三维重建等等。

    语义分割是一个非常困难的问题,尤其是在深度学习之前。深度学习使得图像分割的准确率提高了很多,下面我们就总结一下近年来最具有代表性的方法和论文。

    Fully Convolutional Networks (FCN)

    我们介绍的第一篇论文是Fully Convolutional Networks for Semantic Segmentation,简称FCN。这篇论文是第一篇成功使用深度学习做图像语义分割的论文。论文的主要贡献有两点:

    1.  提出了全卷积网络。将全连接网络替换成了卷积网络,使得网络可以接受任意大小的图片,并输出和原图一样大小的分割图。只有这样,才能为每个像素做分类。

    2.  使用了反卷积层(Deconvolution)。分类神经网络的特征图一般只有原图的几分之一大小。想要映射回原图大小必须对特征图进行上采样,这就是反卷积层的作用。虽然名字叫反卷积层,但其实它并不是卷积的逆操作,更合适的名字叫做转置卷积(Transposed Convolution),作用是从小的特征图卷出大的特征图。

    这是神经网络做语义分割的开山之作,需彻底理解。

    DeepLab

    DeepLab有v1 v2 v3,第一篇名字叫做DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs。这一系列论文引入了以下几点比较重要的方法:

    第一个是带洞卷积,英文名叫做Dilated Convolution,或者Atrous Convolution。带洞卷积实际上就是普通的卷积核中间插入了几个洞,如下图。

    它的运算量跟普通卷积保持一样,好处是它的“视野更大了”,比如普通3x3卷积的结果的视野是3x3,插入一个洞之后的视野是5x5。视野变大的作用是,在特征图缩小到同样倍数的情况下可以掌握更多图像的全局信息,这在语义分割中很重要。

    Pyramid Scene Parsing Network

    Pyramid Scene Parsing Network的核心贡献是Global Pyramid Pooling,翻译成中文叫做全局金字塔池化。它将特征图缩放到几个不同的尺寸,使得特征具有更好地全局和多尺度信息,这一点在准确率提升上上非常有用。

    其实不光是语义分割,金字塔多尺度特征对于各类视觉问题都是挺有用的。

    Mask R-CNN

    Mask R-CNN是大神何凯明的力作,将Object Detection与Semantic Segmentation合在了一起做。它的贡献主要是以下几点。

    第一,神经网络有了多个分支输出。Mask R-CNN使用类似Faster R-CNN的框架,Faster R-CNN的输出是物体的bounding box和类别,而Mask R-CNN则多了一个分支,用来预测物体的语义分割图。也就是说神经网络同时学习两项任务,可以互相促进。

    第二,在语义分割中使用Binary Mask。原来的语义分割预测类别需要使用0 1 2 3 4等数字代表各个类别。在Mask R-CNN中,检测分支会预测类别。这时候分割只需要用0 1预测这个物体的形状面具就行了。

    第三,Mask R-CNN提出了RoiAlign用来替换Faster R-CNN中的RoiPooling。RoiPooling的思想是将输入图像中任意一块区域对应到神经网络特征图中的对应区域。RoiPooling使用了化整的近似来寻找对应区域,导致对应关系与实际情况有偏移。这个偏移在分类任务中可以容忍,但对于精细度更高的分割则影响较大。

    为了解决这个问题,RoiAlign不再使用化整操作,而是使用线性插值来寻找更精准的对应区域。效果就是可以得到更好地对应。实验也证明了效果不错。下面展示了与之前方法的对比,下面的图是Mask R-CNN,可以看出精细了很多。

    U-Net

    U-Net是原作者参加ISBI Challenge提出的一种分割网络,能够适应很小的训练集(大约30张图)。U-Net与FCN都是很小的分割网络,既没有使用空洞卷积,也没有后接CRF,结构简单。

    整个U-Net网络结构如上图,类似于一个大大的U字母:首先进行Conv+Pooling下采样;然后Deconv反卷积进行上采样,crop之前的低层feature map,进行融合;然后再次上采样。重复这个过程,直到获得输出388x388x2的feature map,最后经过softmax获得output segment map。总体来说与FCN思路非常类似。

    为何要提起U-Net?是因为U-Net采用了与FCN完全不同的特征融合方式:拼接!

     U-Net concat特征融合方式

    与FCN逐点相加不同,U-Net采用将特征在channel维度拼接在一起,形成更“厚”的特征。所以:

    语义分割网络在特征融合时也有2种办法:

    FCN式的逐点相加,对应caffe的EltwiseLayer层,对应tensorflow的tf.add()

    U-Net式的channel维度拼接融合,对应caffe的ConcatLayer层,对应tensorflow的tf.concat()

    综述介绍

    图像语义分割,简单而言就是给定一张图片,对图片上的每一个像素点分类

    从图像上来看,就是我们需要将实际的场景图分割成下面的分割图:

    不同颜色代表不同类别。经过阅读“大量”论文和查看PASCAL VOC Challenge performance evaluation server,发现图像语义分割从深度学习引入这个任务(FCN)到现在而言,一个通用的框架已经大概确定了。即:

    FCN-全卷积网络

    CRF-条件随机场

    MRF-马尔科夫随机场

    前端使用FCN进行特征粗提取,后端使用CRF/MRF优化前端的输出,最后得到分割图。

    前端

    为什么需要FCN?

    我们分类使用的网络通常会在最后连接几层全连接层,它会将原来二维的矩阵(图片)压扁成一维的,从而丢失了空间信息,最后训练输出一个标量,这就是我们的分类标签。

    而图像语义分割的输出需要是个分割图,且不论尺寸大小,但是至少是二维的。所以,我们需要丢弃全连接层,换上全卷积层,而这就是全卷积网络了。

    前端结构

    FCN

    此处的FCN特指Fully Convolutional Networks for Semantic Segmentation论文中提出的结构,而非广义的全卷积网络。

    作者的FCN主要使用了三种技术:

    卷积化(Convolutional)      上采样(Upsample)      跳跃结构(Skip Layer)

    卷积化

    卷积化即是将普通的分类网络,比如VGG16,ResNet50/101等网络丢弃全连接层,换上对应的卷积层即可。

    上采样

    此处的上采样即是反卷积(Deconvolution)。当然关于这个名字不同框架不同,Caffe和Kera里叫Deconvolution,而tensorflow里叫conv_transpose。CS231n这门课中说,叫conv_transpose更为合适。

    众所诸知,普通的池化(为什么这儿是普通的池化请看后文)会缩小图片的尺寸,比如VGG16 五次池化后图片被缩小了32倍。为了得到和原图等大的分割图,我们需要上采样/反卷积。

    反卷积和卷积类似,都是相乘相加的运算。只不过后者是多对一,前者是一对多。而反卷积的前向和后向传播,只用颠倒卷积的前后向传播即可。所以无论优化还是后向传播算法都是没有问题。图解如下:

    但是,虽然文中说是可学习的反卷积,但是作者实际代码并没有让它学习,可能正是因为这个一对多的逻辑关系。

    跳跃结构

    (这个奇怪的名字是我翻译的,好像一般叫忽略连接结构)这个结构的作用就在于优化结果,因为如果将全卷积之后的结果直接上采样得到的结果是很粗糙的,所以作者将不同池化层的结果进行上采样之后来优化输出。具体结构如下:

    而不同上采样结构得到的结果对比如下:

    当然,你也可以将pool1, pool2的输出再上采样输出。不过,作者说了这样得到的结果提升并不大。

    这是第一种结构,也是深度学习应用于图像语义分割的开山之作,所以得了CVPR2015的最佳论文。但是,还是有一些处理比较粗糙的地方,具体和后面对比就知道了。

    相关文章

      网友评论

        本文标题:深度学习之图像分割(上)

        本文链接:https://www.haomeiwen.com/subject/nzwtwktx.html