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

常见应用

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

  • 医学图像诊断:机器可以增强放射医生进行的分析,大大减少了运行诊断测试所需的时间;下图是胸部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. vim(vi)下的三种模式及其相关命令

    vim(vi)下的三种模式1.命令行模式 2.末行模式 3.插入模式 三种模式的联系及其相互转换 在我们输入vi命令进入编写程序的页面后,我们看到的是命令行模式,在我们输入“a”.“i”.“o”.“O ...

  2. BZOJ2208连通数

    还是挺简单的tarjan. 判断时可能重复,直接bitset搞定. 首先tarjan缩点,每个scc的内部肯定能互相到达,更一下,而且一个scc里的各个点的贡献肯定是一样的,topsort,更新答案就 ...

  3. Selenium2+python自动化-使用JS脚本处理网页滚动条

    内容来自:https://www.cnblogs.com/yoyoketang/p/6128655.html JS相关知识:http://www.w3school.com.cn/js/index.as ...

  4. WebSocket-nodejs实现

    一.环境配置 1.下载安装nodejs      https://nodejs.org/en/download/ 2.安装完成后打开cmd命令,执行node --version,看看是否安装成功,如果 ...

  5. python pymysql 连接 mysql数据库进行操作

    1.数据库的连接操作 import pymysql conn = pymysql.connect(host=', db='oldboydb') # host表示ip地址,user表示用户名,passw ...

  6. 阶段3 3.SpringMVC·_03.SpringMVC常用注解_1 RequestParam注解

    新建param.jsp页面.里面一个a标签. 新建Controller 输出字符串 重新部署 传参数 接收这个username并输出 把username换成name 接收不到. 使用RequestPa ...

  7. 前端之路(二)之JavaScript:菜鸟教程学习:http://www.runoob.com/js/js-intro.html

    JavaScript 语句和 JavaScript 变量都对大小写敏感. 键值对通常写法为 name : value (键与值以冒号分割). 键值对在 JavaScript 对象通常称为 对象属性. ...

  8. Xcode真机报错clang: error: linker command failed with exit code 1 (use -v to see invocation)

    出现这种错误,如下图所示,搜索bitcode,置为NO即可.

  9. java:nginx(java代码操作ftp服务器)

    1.检查是否安装了vsftpd [root@linux01 ~]# rpm -qa|grep vsftpd 2.安装vsftpd [root@linux01 ~]# yum -y install vs ...

  10. PTA --- 天梯赛 L1-028 判断素数

    L1-028 判断素数 (10 point(s))   本题的目标很简单,就是判断一个给定的正整数是否素数. 输入格式: 输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于2​31​ ...