语义图像分割的目标在于标记图片中每一个像素,并将每一个像素与其表示的类别对应起来。因为会预测图像中的每一个像素,所以一般将这样的任务称为密集预测。(相对地,实例分割模型是另一种不同的模型,该模型可以区分同一类的不同目标)

常见应用

  • 自动驾驶汽车:我们需要为汽车增加必要的感知,以了解他们所处的环境,以便自动驾驶的汽车可以安全行驶;下图为自动驾驶过程中实时分割道路场景;

  • 医学图像诊断:机器可以增强放射医生进行的分析,大大减少了运行诊断测试所需的时间;下图是胸部X光片的分割,心脏(红色),肺部(绿色以及锁骨(蓝色);

任务表征

目标是要用 RGB 图(高 x 宽 x3)或灰度图(高 x 宽 x1)为输入,并输出一个分割图,在分割图中每个像素都包括一个用整数表示的类别标签(高 x 宽 x1)。

注意:为了视觉上的理解简单起见,我标记的是分辨率比较低的预测图。事实上,分割标签的分辨率是和原始输入图的分辨率相对应的)

与我们处理标准分类值的方法相似,我们通过独热编码类别标签的方法创建目标——本质上讲是要为每一个可能的类创建一个输出通道。

然后我们可以利用每一个像素位深向量的 argmax 函数将预测值分解为分割映射(如上图所示)

也可以通过将目标重叠在输入图像上来对目标进行观察

建立网络架构

针对这项任务简单地构建神经网络架构的方法是简单地堆叠大量卷积层(用same填充保留维度)后输出最终的分割映射。通过特征图的接连转换,直接从输入图像学到了相对应的分割映射;然而,在整个网络中要保留完整分辨率的计算成本是很高的。

回顾深度卷积网络,前期的卷积层更倾向于学习低级概念,而后期的卷积层则会产生更高级(且专一)的特征图。为了保持表达性,一般而言,当我们到达更深层的网络时,需要增加特征图(通道)的数量。

对图像分类任务而言,这不一定会造成什么问题,因为对这个任务而言,只需要关注图像里面有什么(而不是目标类别对象的位置)。因此,我们可以通过池化或逐步卷积(即压缩空间分辨率)定期对特征图进行下采样以缓和计算压力。

常用的图像分割模型的方法遵循编码器/解码器结构,在这个结构中,我们对输入的空间分辨率下采样,产生分辨率更低的特征图,通过学习这些特征图可以更高效地分辨类别,还可以将这些特征表征上采样至完整分辨率的分割图。

上采样方法(反卷积/后卷积/转置卷积)

可以用很多不一样的方法对特征图的分辨率上采样。池化操作通过汇总局部区域的单个值(平均池化或最大池化)下采样分辨率,「上池化」操作通过将单个值分配给更高的分辨率对分辨率进行上采样。

迄今为止,转置卷积(transpose convolutions)是最常用的方法,因为转置卷积允许我们开发学习过的上采样。

与转置卷积相反,经典的卷积运算会将卷积核权重与当前值进行点积,并为相应输出位置产生单个值。转置卷积会先从低分辨率的特征映射中得到单个值,再用该值与卷积核中所有权重相乘,然后将这些加权值映射到输出特征图中。

通过转置运算进行上采样的 1D 的例子

对在输出特征映射图中产生重叠(如下图所示是步长为 2 的 3x3 卷积核)的卷积核尺寸而言,重叠值是简单的叠加。不幸的是,这会在输出中产生棋盘效应(棋盘状伪影),所以最好保证卷积核不会产生重叠。

输入是蓝色格子,输出是绿色格子。

全卷积网络

Long等人在2014年末介绍了使用「全卷积」网络对图像分割的任务进行端到端、像素到像素的训练方法 (https://arxiv.org/abs/1411.4038)。这篇论文的作者提出将现有的、经过充分研究的图像分类网络(如 AlexNet)作为网络的编码模块,用转置卷积层作为解码模块,将粗略的特征图上采样至全分辨率的分割图。

如下图所示,完整的网络是根据像素层面的交叉熵损失训练的。

但因为编码模块将输入的分辨率降低了 32 倍,所以解码模块难以产生精细的分割图(如下图所示)。

文章作者是这样说明这一问题的:语义分割面临的主要是语义和位置之间的紧张关系:全局信息解决语义问题,而局部信息解决位置问题……将精细层和粗略层结合,使模型做出不违背全局结构的局部预测。

添加跳过连接

作者通过缓慢地对编码表征进行上采样以解决这个问题,在前期层中加入「跳过连接」,并汇总这两个特征图。

这些来自网络较前期层的跳过连接(在下采样操作之前)应该提供必要的细节,以准确重建分割图边界的形状。事实上,的确可以用添加的这些跳过连接恢复更精细的细节。

Ronneberger 等人通过扩展网络解码模块的容量改进「全卷积」结构 (https://arxiv.org/abs/1505.04597)。更具体地讲,他们提出了「由捕获内容的收缩路径和(对称的)精确定位的扩张路径组成」的 U-Net 架构。这个更简单的架构已经很常用了,而且适用于大量分割问题。

注意:由于使用了 valid 填充,原始架构会导致分辨率下降。但也有人选择使用 same 填充,这些填充值是从边界处图像映射中获取的。

Long 等人(FCN 论文)认为数据的扩增不会导致模型性能的明显提升,Ronneberger 等人(U-Net 论文)相信对模型学习而言数据扩增是关键概念。看来,数据扩增的有用程度也许与问题领域有关。

高级的U-Net变体

标准的U-Net模型由架构中每个「块」的一系列卷积运算组成。一般的卷积网络架构存在大量更高级的「块」,这些「块」可以替换堆栈卷积层。

Drozdzal 等人替换了基本的堆叠卷积块以支持残差块(https://arxiv.org/abs/1608.04117)。这种残差块在标准U-Net结构中存在的长程跳过连接(在编码模块和解码模块相对应的特征图之间)中引入了短程跳过连接。他们认为短程跳过连接在训练时可以更快地收敛,而且可以训练更深层的网络。

Jegou 等人对此进行了扩展,在遵循 U-Net 结构的情况下,提出使用密集块(https://arxiv.org/abs/1611.09326)。他们认为「DenseNets 的特征使它们非常适合语义分割,因为它们可以自然地产生跳过连接和多级监督。」这些密集块很有用,因为它们在前面的层传递低级特征,直接与更高层的更高级特征并行,从而实现高效的特征重用。


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

FC-DenseNet103 模型在 CamVid 数据集上得到了最好的结果(2017 年 10 月)

扩张卷积(空洞卷积)

对特征映射进行下采样的一个好处是在给定常量卷积核尺寸的情况下扩展了感受野(对于输入)。由于大尺寸卷积核的参数效率较低(3.1 节所讨论),所以这种方法比增加卷积核尺寸更加合理。然而,这种扩展的代价是降低了空间分辨率。

扩张卷积提供了另一种在保留完整空间维度的同时还能获得广泛视野的方法。如下图所示,扩张卷积根据指定的扩张率(dilation rate)用值将空间间隔开。


还有一些架构将最后几个池化层替换为具有连续增大扩张率的扩张卷积,这样可以在防止空间细节的丢失的同时保持相同的感受野。然而,要用扩张卷积完全替换池化层,计算成本还是很高。

损失加权方案

由于密集预测的本质,在衡量损失加权时有很大的灵活性。Long 等人(FCN 论文)提出对于每个输出通道的加权损失都是为了抵消数据集中的类别不平衡。

与此同时,Ronneberger 等人(U-Net 论文)提出了一种针对每个像素的损失加权的方案,这种方案使得在分割对象的边界处有更高的权重。这个损失加权方案帮助他们的 U-Net 模型在生物医学图像中分割出细胞,从而可以在分割图中轻易地识别单个细胞。

基于FCN的图像语义分割的更多相关文章

  1. 笔记:基于DCNN的图像语义分割综述

    写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...

  2. 笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)

    图像语义分割的意思就是机器自动分割并识别出图像中的内容,我的理解是抠图- 之前在Faster R-CNN中借用了RPN(region proposal network)选择候选框,但是仅仅是候选框,那 ...

  3. 使用Keras基于RCNN类模型的卫星/遥感地图图像语义分割

    遥感数据集 1. UC Merced Land-Use Data Set 图像像素大小为256*256,总包含21类场景图像,每一类有100张,共2100张. http://weegee.vision ...

  4. 【Keras】基于SegNet和U-Net的遥感图像语义分割

    上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰"天空之眼".这两周数据挖掘课期末project我们组选的课题也是遥感图像的语义分割,所以刚好又把前段时间做的成果重新 ...

  5. 使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割

    前言 今天我们一起来看一下如何使用LabVIEW实现语义分割. 一.什么是语义分割 图像语义分割(semantic segmentation),从字面意思上理解就是让计算机根据图像的语义来进行分割,例 ...

  6. FCN与U-Net语义分割算法

    FCN与U-Net语义分割算法 图像语义分割(Semantic Segmentation)是图像处理和是机器视觉技术中关于图像理解的重要一环,也是 AI 领域中一个重要的分支.语义分割即是对图像中每一 ...

  7. 图像语义分割出的json文件和原图,用plt绘制图像mask

    1.弱监督 由于公司最近准备开个新项目,用深度学习训练个能够自动标注的模型,但模型要求的训练集比较麻烦,,要先用ffmpeg从视频中截取一段视频,在用opencv抽帧得到图片,所以本人只能先用语义分割 ...

  8. CRF图像语义分割

    看了Ladicky的文章Associative Hierarchical CRFs for Object Class Image Segmentation,下载他主页的代码,文章是清楚了,但代码的RE ...

  9. 推荐一些用CRF做图像语义分割的资源

    原文地址:http://blog.sina.com.cn/s/blog_5309cefc01014nri.html 首先是code,以前找了很多,但发现比较好用的有: 1. Matlab版的UGM:h ...

随机推荐

  1. highcharts柱状图、饼状图

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. Java 实现 2的次幂表示

    问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 ...

  3. beta week 2/2 Scrum立会报告+燃尽图 05

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9957 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名: ...

  4. javascript 取小数点后几位四种方法

    javascript 取小数点后几位方法总结 Javascript取float型小数点后两位,例22.123456取成22.12,如何做? 1.通过substring截取. function getn ...

  5. Omnigraffle

    OmniGraffle 7 Mac 注册码 账号:Appked 密码:MFWG-GHEB-HYTW-CGHT-CSXU-QCNC-SXU https://blog.csdn.net/ChibiMaru ...

  6. docker Swarm mode集群

    基本概念 Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具. 使用 Swarm 集群之前需要了解以下几个概念. 节点 运行 Docker 的主机可以主动 ...

  7. Scope 'request' is not active for the current thread

    Unable to instantiate Action, getUserAction, defined for 'getUser' in namespace '/'Error creating be ...

  8. Access denied for user XX

    解决方法:将pom.xml中的mysql-connector-java降低版本(直接去maven仓库复制:https://mvnrepository.com/),比如: <!-- https:/ ...

  9. azure sql database CPU troubleshooting

    描述 最新我们一个稳定运行快一年的项目突然出现CPU方面的性能问题,该项目使用的azure sql database  P2 500DTU,运维同事监控到CPU使用非常高,客户反馈系统运行也比较卡.看 ...

  10. 实验一part1.1 1.2

    #include<stdio.h> int main() { printf("201983270526\n"); printf("Hello Mars!&qu ...