Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于深度学习的图像语义分割算法综述

基于深度学习的图像语义分割算法综述

作者头像
机器学习算法工程师
发布于 2018-07-26 07:36:08
发布于 2018-07-26 07:36:08
2K0
举报

作者: 叶 虎

编辑:赵一帆

前 言

本文翻译自An overview of semantic image segmentation,原作者保留版权。

这篇文章讲述卷积神经网络图像语义分割(semantic image segmentation)的应用。图像分割这项计算机视觉任务需要判定一张图片中特定区域的所属类别。

这个图像里有什么?它在图像中哪个位置?

更具体地说,图像语义分割的目标是将图像的每个像素所属类别进行标注。因为我们是预测图像中的每个像素,这个任务通常被称为密集预测(dense prediction)。

需要注意的一点是我们不对同一类的实例进行分离; 我们只关心每个像素的类别。 换句话说,如果输入图像中有两个相同类别的对象,则分割图本身并不一定将它们区分为单独的对象。 存在另外一类不同的模型,称为实例分割(instance segmentation)模型,其将分离同一类的各个对象。

分割模型广泛应用在各领域中,包括:

  • 自动驾驶(Autonomous vehicles)
    • 汽车需要安装必要的感知系统以了解它们的环境,这样自动驾驶汽车才能够安全地驶入现有的道路。
  • 影像诊断(Medical image diagnostics)
    • 机器在分析能力上比放射科医生更强,而且可以大大减少诊断所需时间。分割后的胸部X片,其中红色是心脏,绿色是肺,蓝色是锁骨。

章节目录

  • 任务描述
  • 架构设计
    • 上采样(upsampling)方法
    • 全卷积网络(Fully convolutional networks)
    • 添加短路连接(Adding skip connections)
    • 高级的U-Net变体(Advanced U-Net variants)
    • 空洞卷积(Dilated/atrous convolutions)
  • 损失函数
  • 常用数据集以及图像分割大赛
    • 数据集
    • 以往的Kaggle竞赛
  • 延伸阅读

01

任务描述

简单来说,我们的目标是输入一个RGB彩色图片 height X width X 3 或者一个灰度图 height X width X 1,然后输出一个包含各个像素类别标签的分割图height X width X 1。

注意:为了清晰起见,这里给出的是一个低分辨率的预测图。在现实中,分割标签的分辨率应该与原始输入的分辨率是一致的。

与我们处理标准分类值的方式类似,我们的预测目标可以采用one-hot编码,即为每一个可能的类创建一个输出通道。通过取每个像素点在各个channel的argmax可以得到最终的预测分割图(如上图所示)。

我们可以将分割图叠加到原始图像上可以检验分割效果。当我们将预测结果叠加到单个channel时,称这为一个mask,它可以给出一张图像中某个特定类的所在区域。

02

架构设

对于图像语义分割任务,构建神经网络架构的一种简单方法是简单地堆叠多个卷积层(使用same padding以维持维度大小)并输出最终的分割图。 这通过特征映射的连续变换直接学习从输入图像到其对应分割的映射关系;但是,在整个网络中保持图像原始分辨率的计算成本非常高。

缺点:在整个网络中维持图像原始维度计算成本很高(来源:cs231n)

回想一下,对于深度卷积网络,前面的层倾向于学习低级特征,而后面的层学习更高级的特征映射。为了保持表现力,我们通常需要在网络更深时增加特征图(channels)的数量。

这不一定对图像分类的任务造成问题,因为对于该任务,我们只关心图像中包含的物体(而不是它所在的位置)。 因此,我们可以通过通过池化或跨步卷积(即压缩空间分辨率)周期性地对特征图进行下采样来减轻计算负载。然而,对于图像分割,我们希望我们的模型最后给出全分辨率的语义预测。

用于图像分割模型的一种流行方法是遵循编码器/解码器(encoder/decoder)结构,其中我们先对输入进行下采样(downsample),得到较低分辨率的特征映射,其学习到了如何高效地区分各个类,然后对这些特征进行上采样(upsample)以得到一个全分辨率分割图。

上采样(upsampling)方法

可以采用不同的方法来上采样以提高特征图的分辨率。 pooling操作聚合一个局部区域(平均或最大池化)来下采样,相对应地,unpooling操作通过将单个值分配到更高的分辨率来上采样。

然而目前为止最流行的方法是转置卷积(transpose convolutions),因为它是通过学习得到的上采样方法。

而典型的卷积运算将视野中所有值求点积并在相应位置输出单个值,而转置卷积恰恰相反。对于转置卷积,低分辨率特征图中某个值,乘以卷积核中的权重值,将这些加权值映射到输出特征图。

某些卷积核可能在输出特征图中产生重叠(例如的卷积, 如下图所示),此时重叠值就简单地加在一起。 不好的是,这往往会在输出中形成棋盘效应(不均匀重叠,可以参考Deconvolution and Checkerboard Artifacts),这是不希望被看到的,因此最好确保选择的卷积核不会导致重叠。

全卷积网络(Fully convolutional networks)

2014年底,Long等人介绍了使用“全卷积”网络解决像素级图像分割任务,其实现了端到端的训练。 该论文的作者采用已有的较优图像分类网络(例如AlexNet)作为网络的编码器模块,并增加了带有转置卷积层的解码器模块,以便对粗粒度的特征图进行上采样以得到全分辨率分割图。

整个网络如下所示,它采用像素级交叉熵损失函数进行训练。

然而,由于编码器模块将输入的分辨率降低了32倍,所以解码器模块很难得到细粒度的分割(如下所示)。

作者对这种困境做出了如下评论:

语义分割面临语义和位置之间的内在矛盾:全局信息解决的是“是什么”问题,而局部信息解决的是“在哪里”的问题……结合细粒度层和粗粒度层使模型能在全局信息下做出局部预测。

添加短路连接(Adding skip connections)

作者对编码的特征缓慢上采样(分阶段)来解决上面的问题,并添加了从前面层的短路连接,最后对这样的两个特征图求和。

这些从网络中较早层的短路连接(在下采样操作之前)应该包含必要的细节,这样可以重建准确的分割边界。 因而,我们可以通过加上这些短路连接来恢复更精密的细节。

Ronneberger等人通过扩大网络解码器模块的容量来改进“全卷积”架构。更具体地说,他们提出了U-Net架构,它包括一个可以捕获上下文信息的收缩路径(contracting path)和一个能够实现精确定位的与收缩路径对称的扩展路径。这种更简单的架构已经变得非常流行,并且已经对一系列分割问题有效。

注意:由于使用了valid填充,原始网络会出现分辨率降低。然而,一些人会选择使用same填充来保证分辨率不变。

而Long等人(FCN论文)指出数据增强(随机镜像,或者通过将图像平移32像素来随机抖动)并没有导致性能的显着提升。Ronneberger等人(U-Net论文)却发现数据增强(对训练样本作随机的弹性变形)是训练成功的关键之一。似乎数据增强的有效性(和类型)取决于问题所在的领域。

高级的U-Net变体(Advanced U-Net variants)

标准U-Net模型的block中由一系列卷积层组成。有一些更高级的block可以替代这些堆栈卷积层。

Drozdzal等人(The Importance of Skip Connections in Biomedical Image Segmentation)采用了残差块(residual blocks)。除了标准U-Net结构中已有的长短路连接(在编码器和解码器模块的相应特征图之间),该残差块在块内引入短路连接。他们发现这种短路连接使得训练过程收敛更快,并可以训练更深层的网络模型。

更进一步,Jegou等人(Pattern Recognition The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation)采用了密集连接块(DenseNet网络单元),仍然使用U-Net架构,他们指出DenseNet的特点对语义分割很有效,因为它自然地引入短路连接,并实现了多尺度监督。这些密集块有效之处在于它们不仅包含从最近层得到的高级特征,还包含了从前面层传递的低级特征,这实现了高效的特征重用。

该架构的一个非常重要点是上采样路径在密集块的输入和输出之间没有短路连接。作者指出,由于上采样路径会增加特征图的空间分辨率,因此特征数量的线性增长对内存要求太高。因此,只有密集块的输出在解码器模块中被传递。

空洞卷积(Dilated/atrous convolutions)

对特征图进行下采样的一个好处是,在给定卷积核情况下,它会增加后续卷积的感受野(相对于输入)。由于大卷积核的参数效率低(在Rethinking the Inception Architecture for Computer Vision 的3.1节中讨论),这种方法比增加卷积核大小更好。 然而,这是以降低空间分辨率为代价的。

空洞卷积为获得宽感受野提供了另一种方法,其可以保持完整的空间维度。如下图所示,用于空洞卷积的值是在某个指定的扩张率(dilation rate)下间隔开的。

一些架构(Multi-Scale Context Aggregation by Dilated Convolutions)使用使用一系列扩张率连续增长的空洞卷积层来替换一些pooling层,以实现在不损失空间细节的同时获得相同的感受野。然而,完全使用空洞卷积替换掉pooling层依然会导致较大的计算成本(见DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs)。

03

损失函数

用于图像分割任务的最常用的损失函数是像素级的交叉熵损失(pixel-wise cross entropy loss)。 该损失单独地检查每个像素点,将类预测(深度方向的像素矢量)与one-hot编码的目标矢量进行比较。

因为交叉熵损失函数单独评估每个像素矢量的分类预测,然后对所有像素求平均值,所以我们基本上假定同等地对待图像中每个像素点。 如果各种类在图像分布不平衡时,这可能会是一个问题,因为训练过程将受最多的类所支配。Long等人(FCN论文)为每个输出通道的损失使用了权重,以抵消数据集中类不平衡问题。

同时,Ronneberger等人(U-Net论文)为每个像素的损失设置权重,使得分割对象的边界处具有更高的权重。该损失加权方案使得U-Net模型以不连续的方式分割生物医学图像中的细胞,这样可以在二元分割图中容易地分离出单个细胞

用于图像分割任务另一种流行的损失函数是基于Dice系数的损失,其本质上是衡量两个样本之间的重叠度。该度量值在0~1之间,其中Dice系数为1表示完全重叠。Dice系数最初针对二进制数据而提出的,计算公式如下:

因为我们的目标mask是二进制的,所以我们首先将预测结果中在目标mask中为0的像素清零。对于剩余的像素,我们基本上是在惩罚低置信度的预测值;该表达式的值越高(在分子中),Dice系数越高。

对于|A|和|B|,一些研究者(The Importance of Skip Connections in Biomedical Image Segmentation)简单地求和,另外一些研究者(V-Net: Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation)倾向于采用平方和。我并没知道在一系列任务中哪种方式更好,所以你可以两种方式都尝试,然后选择结果最好的那个

你可能会问想知道,为什么Dice系数的分子中有2,这是因为我们的分母重复计算了两集合之间的共同元素。 由于损失函数要最小化,我们将简单地使用1-Dice作为损失函数。这种损失函数被称为soft Dice损失,因为我们直接使用预测概率而不是先设定阈值并将它们转换为二进制mask。

对于神经网络的输出,分子关注的是预测和目标mask之间的共同激活值,而分母与每个mask中的激活量相关。 这产生一种根据目标mask的大小来归一化损失的效果,使得soft mask损失不会难以从图像中分布较少的类中学习。

注意soft Dice是对于每个类是单独计算的,然后平均各个类的结果作为最终的评分。例子如下图所示。

04

常用数据集以及图像分割大赛

下面,我列出了一些常用数据集,研究人员使用这些数据集来训练新模型和并作为现有技术的基准。 你还可以看一下之前的Kaggle比赛,并了解获胜方的解决方案是如何在特定任务赢得比赛的。

数据集

  1. [PASCAL VOC 2012 Segmentation Competition](http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html)
  2. [COCO 2018 Stuff Segmentation](http://cocodataset.org/#stuff-2018)
  3. [Task BDD100K: A Large-scale Diverse Driving Video Database](http://bair.berkeley.edu/blog/2018/05/30/bdd/)
  4. [Cambridge-driving Labeled Video Database (CamVid)](http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/)
  5. [Cityscapes Dataset](https://www.cityscapes-dataset.com/)
  6. [Mapillary Vistas Dataset](https://www.mapillary.com/dataset/vistas)
  7. [ApolloScape Scene Parsing](http://apolloscape.auto/scene.html)

以往的Kaggle竞赛

  1. [2018 Data Science Bowl](https://www.kaggle.com/c/data-science-bowl-2018) ([first place solution](https://www.kaggle.com/c/data-science-bowl-2018/discussion/54741))
  2. [Carvana Image Masking Challenge](https://www.kaggle.com/c/carvana-image-masking-challenge) ([first place solution](https://arxiv.org/abs/1801.05746))
  3. [Dstl Satellite Imagery Feature Detection](https://www.kaggle.com/c/dstl-satellite-imagery-feature-detection) ([third place solution](https://arxiv.org/abs/1706.06169))

05

延伸阅读

论文

  1. [Fully Convolutional Networks for Semantic Segmentation](https://arxiv.org/abs/1605.06211)
  2. [U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597)
  3. [The Importance of Skip Connections in Biomedical Image Segmentation](https://arxiv.org/abs/1608.04117)
  4. [The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation](https://arxiv.org/abs/1611.09326)
  5. [Multi-Scale Context Aggregation by Dilated Convolutions](https://arxiv.org/abs/1511.07122)
  6. [DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs](https://arxiv.org/abs/1606.00915)
  7. [Rethinking Atrous Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1706.05587)
  8. [Evaluation of Deep Learning Strategies for Nucleus Segmentation in Fluorescence Images](https://www.biorxiv.org/content/early/2018/05/31/335216)

课程

  1. [Stanford CS231n: Detection and Segmentation](https://youtu.be/nDPWywWRIRo) ([Lecture Slides](http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf))

博客

  1. [Mat Kelcey's (Twitter Famous) Bee Detector](http://matpalm.com/blog/counting_bees/)
  2. [Semantic Image Segmentation with DeepLab in TensorFlow](https://ai.googleblog.com/2018/03/semantic-image-segmentation-with.html)
  3. [Going beyond the bounding box with semantic segmentation](https://thegradient.pub/semantic-segmentation/)
  4. [U-Net Case Study: Data Science Bowl 2018](https://medium.com/@keremturgutlu/semantic-segmentation-u-net-part-1-d8d6f6005066)
  5. [Lyft Perception Challenge: 4th place solution](https://nikolasent.github.io/proj/comp2.html)

图片标注工具

  1. [labelme: Image Polygonal Annotation with Python](https://github.com/wkentaro/labelme)

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习算法工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
语义分割综述
语义分割 (Semantic segmentation) 是指将图像中的每个像素链接到类标签的过程。这些标签可能包括人、车、花、家具等。
计算机视觉
2021/10/11
1.3K0
深度学习时代下的语义分割综述
http://www.tensorinfinity.com/paper_168.html
SIGAI学习与实践平台
2019/06/13
2K0
2019年的语义分割指南
原标题 | A 2019 Guide to Semantic Segmentation
AI科技评论
2019/08/08
9250
2019年的语义分割指南
2020入坑图像分割,我该从哪儿入手?
顾名思义,图像分割就是指将图像分割成多个部分。在这个过程中,图像的每个像素点都和目标的种类相关联。图像分割方法主要可分为两种类型:语义分割和实例分割。语义分割会使用相同的类标签标注同一类目标(下图左),而在实例分割中,相似的目标也会使用不同标签进行标注(下图右)。
机器之心
2020/06/02
6030
【深度学习】图像语义分割
语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支,其目标是精确理解图像场景与内容。语义分割是在像素级别上的分类,属于同一类的像素都要被归为一类,因此语义分割是从像素级别来理解图像的。如下如所示的照片,属于人的像素部分划分成一类,属于摩托车的像素划分成一类,背景像素划分为一类。
杨丝儿
2022/03/20
8.1K0
【深度学习】图像语义分割
图像分割中的深度学习:U-Net 体系结构
原标题 | Deep Learning for Image Segmentation: U-Net Architecture
AI研习社
2019/10/08
1.4K0
图像分割中的深度学习:U-Net 体系结构
9102年了,语义分割的入坑指南和最新进展都是什么样的
我们可以认为语义分割是像素级别的图像分类。例如,在一幅有很多辆车的图像中,分割模型将会把所有的物体(车)标记为车辆。但是,另一种被称为实例分割的模型能够将出现在图像中的独立物体标记为独立的实例。这种分割在被用在统计物体数量的应用中是很有用的(例如,统计商城中的客流量)。
机器之心
2019/08/06
6350
9102年了,语义分割的入坑指南和最新进展都是什么样的
资源 | 从全连接层到大型卷积核:深度学习语义分割全指南
选自qure.ai 机器之心编译 参与:路雪、蒋思源 语义分割一直是计算机视觉中十分重要的领域,随着深度学习的流行,语义分割任务也得到了大量的进步。本文首先阐释何为语义分割,然后再从论文出发概述多种
机器之心
2018/05/09
1.6K0
资源 | 从全连接层到大型卷积核:深度学习语义分割全指南
基于深度学习的语义分割综述
Paper链接:https://arxiv.org/abs/2001.05566
计算机视觉
2020/12/03
1.3K0
基于深度学习的语义分割综述
语义分割中的深度学习方法全解:从FCN、SegNet到各版本DeepLab
王小新 编译自 Qure.ai Blog 量子位 出品 | 公众号 QbitAI 图像语义分割就是机器自动从图像中分割出对象区域,并识别其中的内容。 量子位今天推荐的这篇文章,回顾了深度学习在图像语义
量子位
2018/03/28
2K0
语义分割中的深度学习方法全解:从FCN、SegNet到各版本DeepLab
图像分割中的深度学习:U-Net 体系结构
原标题 | Deep Learning for Image Segmentation: U-Net Architecture
昱良
2019/10/13
4.6K0
深度学习与CV教程(14) | 图像分割 (FCN,SegNet,U-Net,PSPNet,DeepLab,RefineNet)
本系列为 斯坦福CS231n 《深度学习与计算机视觉(Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频可以在 这里 查看。更多资料获取方式见文末。
ShowMeAI
2022/06/11
1.6K0
深度学习与CV教程(14) | 图像分割 (FCN,SegNet,U-Net,PSPNet,DeepLab,RefineNet)
那些一键抠图的软件是怎么做到的?这些语义分割方法了解一下
在深度学习时代到来之前,大量的图像处理技术被用来将图像分割成一些感兴趣的区域(ROI)。下面列出了一些常用的方法。 灰度分割 这是最简单的语义分割形式,它包括将一个区硬编码的规则或某个区域必须满足的特定的标签属性赋予这个区域。可以根据像素的属性(如灰度值)来构建这样的规则。「分裂-合并」算法就是一种用到了灰度分割技术的方法。该算法递归地将图像划分成若干子区域,直到可以为划分出的子区域分配一个标签,然后通过合并将相邻的带有相同标签的子区域融合起来。 该方法存在的问题是,规则必须是硬编码的。此外,仅使用灰度信息来表示复杂的类(比如人)是极其困难的。因此,需要特征提取和优化技术来恰当地学习这些复杂类所需的表征形式。
机器之心
2019/04/29
7890
那些一键抠图的软件是怎么做到的?这些语义分割方法了解一下
干货 | 一文概览主要语义分割网络,FCN、UNet、SegNet、DeepLab 等等等等应有尽有[通俗易懂]
原文地址:https://meetshah1995.github.io/semantic-segmentation/deep-learning/pytorch/visdom/2017/06/01/semantic-segmentation-over-the-years.html
全栈程序员站长
2022/09/25
4.1K0
干货 | 一文概览主要语义分割网络,FCN、UNet、SegNet、DeepLab 等等等等应有尽有[通俗易懂]
图像语义分割综述
论文:Fully Convolutional Networks for Semantic Segmentation 2015CVPR
languageX
2019/12/01
1.4K0
图像语义分割综述
深度学习图像分割:网络结构设计一览
来源:极市平台本文共5400字,建议阅读15分钟在利用CNNs进行图像语义分割时,有一些针对网络结构的创新点,主要包括了新神经架构和新组件或层的设计。文章的后半部分则对医学图像分割领域中网络结构设计的应用进行了梳理。 本文总结了利用CNNs进行图像语义分割时,针对网络结构的创新,这些创新点主要包括新神经架构的设计(不同深度、宽度、连接和拓扑结构)和新组件或层的设计。前者是利用已有的组件组装复杂的大型网络,后者是更偏向于设计底层组件。首先介绍一些经典的语义分割网络及其创新点,然后介绍网络结构设计在医学图像分割
数据派THU
2022/03/04
6270
语义分割的基本构造_语义分割综述
语义分割(全像素语义分割)作为经典的计算机视觉问题(图像分类,物体识别检测,语义分割)。其涉及将一些原始数据(例如:平面图像)作为输入并将它们转换为具有突出显示的感兴趣区域的掩膜,其中图像中的每个像素根据其所属的对象被分配类别ID。早起的计算机视觉问题只发现边缘(线条和曲线)或渐变元素,但它们从完全按照人类感知的方式提供像素级别的图像理解。语义分割将属于同一目标的图像部分聚集在一起解决这个问题,从而扩展了其应用领域。值得注意的是,与其他的基于图像的任务相比,语义分割是完全不同且先进的。
全栈程序员站长
2022/09/25
9530
语义分割的基本构造_语义分割综述
图像分割 2020 最新进展
url : https://towardsdatascience.com/image-segmentation-in-2020-756b77fa88fc
LiveVideoStack
2020/10/23
1.1K0
图像分割 2020 最新进展
图像分割二十年,Mask R-CNN 影响力仅排第十?
图像分割(image segmentation)技术是计算机视觉领域的重要研究方向,近些年,图像分割技术迅猛发展,在多个视觉研究领域都有着广泛的应用。本文盘点了近20年来影响力最大的 10 篇论文。
AI科技评论
2020/10/27
1.5K0
图像分割二十年,Mask R-CNN 影响力仅排第十?
图像分割技术介绍
图像分割(image segmentation)技术是计算机视觉领域的个重要的研究方向,是图像语义理解的重要一环。图像分割是指将图像分成若干具有相似性质的区域的过程,从数学角度来看,图像分割是将图像划分成互不相交的区域的过程。近些年来随着深度学习技术的逐步深入,图像分割技术有了突飞猛进的发展,该技术相关的场景物体分割、人体前背景分割、人脸人体Parsing、三维重建等技术已经在无人驾驶、增强现实、安防监控等行业都得到广泛的应用。
SIGAI学习与实践平台
2018/11/13
1.1K0
图像分割技术介绍
推荐阅读
相关推荐
语义分割综述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档