使用卷积神经网络做语义分割

本文为 AI 研习社编译的技术博客,原标题 :

Semantic Segmentation using CNN’s

翻译 | shunshun 校对 | Lamaric 整理 | 志豪

https://medium.com/@aiclubiiitb/semantic-segmentation-using-cnns-357fbcfa1bc

我们将在一系列博客文章中讨论使用CNN的语义分割。在这篇博文中,我们将讨论FCN,DeConvolution Network,SegNet结构。

在深入研究如何使用 CNN 进行语义分割的细节之前,让我们理解“语义分割”的概念。

语义分割

“分割”是图像分成几个“连贯”部分,但没有任何尝试理解这些部分代表什么。最著名的作品之一(但绝对不是第一部)是Shi and Malik “Normalized Cuts and Image Segmentation” PAMI 2000。

另一方面,“语义分割”试图将图像划分为语义上有意义的部分,并将每个部分分类为预定类之一。你还可以通过对每个像素(而不是整个图像/片段)进行分类来实现相同的目标。在这种情况下,你正在进行按像素分类,这会导致相同的最终结果,但路径略有不同。

所以,我想你可以说“语义分割”,“场景标记”和“逐像素分类”基本上都试图达到同样的目标:从语义上理解图像中每个像素的作用。你可以采用多条路径来达到目标,这些路径会导致术语中的细微差别。

以下是最近在语义分割领域的工作,该结构称为Mask-RCNN。它试图同时完成3个视觉任务:目标分类,目标检测和分割。

图像来自 https://arxiv.org/abs/1703.06870

如何使用CNN进行语义分割

在语义分割中,我们为每个像素标记一个类。像素通过卷积编码。从这些编码中,可以找到特定于该类的局部特征。

通过这些编码,我们构建了一个结合了这些类特定特征的解码器网络。我们尝试根据一组固定的预定类重建图像。最终的分类标签是图像的掩码,对应于每个类。

掩码看起来像这样:

这些掩码是图像的真值标签。掩码由属于特定类的所有像素组成。第一组图像包含马的掩码。第二组由狗类组成。如果存在带有狗和马的图像,则将有两个掩模作为分割网络的输出。一个二进制掩码用于狗类输出,另一个用于马类。对于维度为h*w的图像,用于k类的识别任务的输出掩码将是h*w*k阵列。每个尺寸为h*w的K个掩码。

典型的分割网络结构

典型的分割网络结构由编码器-解码器网络组成。编码器通过卷积产生更高级别的特征,解码器使用类掩码解释这些更高级别的特征。编码是通过使用预训练网络的常规编码机制,解码器权重是在训练分割网络期间学习。

编码器通过池化层逐渐减小空间维度,解码器逐渐恢复对象细节和空间维度。

重要的是要理解卷积网络中的语义分割是如何发生的。作为一个概念,语义分割试图找出图像的有意义部分。人们可以谈论属于一个类的像素如何与另一个类的像素相关联。考虑CNN的第一层编码。卷积的基本操作将图像编码为更高级别的表示,其中将图像表示为诸如边缘或梯度之类的部分的组合。例如边缘等这些特征不是唯一的,但实际上带有它们的邻域的上下文。在上采样和解码时,这些特征在类关联方面被解码,在反向传播期间由每像素映射引导。

FCN(全卷积网络)

用深度学习进行分割任务的首批尝试之一是FCN,全卷积网络。顾名思义,网络的体系结构仅包含卷积层,而不包含FC层。

FCN结构:https://arxiv.org/abs/1411.4038

FCN使用AlexNet作为编码器,编码器上采样32倍作为解码器。在训练期间,仅训练解码器权重,因为编码器是预训练的AlexNet。

这里的主要概念是转置卷积(或称反卷积),全卷积层和跳连接。较低的卷积层可能有助于捕获输入图像中更细粒度的细节。

我们来详细讨论 Transpose 卷积。

转置卷积

转置卷积通常也称为向后卷积或分数卷积。在正常卷积中,例如3*3的内核乘以3*3像素值,求和得到一个值。这里一个像素乘以3*3权重并投影到3*3输出维度。类似地,每个像素与内核相乘并投影到输出空间。如果输出对像素重叠,则结果总结如下图所示。

FCN采用了同样的方法。转置卷积层,上采样因子为32。

这种上采样是导致细节丢失的操作。因此,作者提出了一种通过使用跳连接来进行更好预测的方法。

FCN,FCN-16和FCN-8的变体在特征提取期间使用maxpool层的输出,通过将它们与conv7的合适的上采样融合。融合是简单的加法连接。

随着我们编码更多空间信息,FCN-8,FCN-16的预测变得更好。上下文由跳过连接提供。

图片来自https://arxiv.org/abs/1411.4038

损失函数

使用的损失函数是交叉熵损失

以下是1-D交叉熵损失。

但 Image 是2-D或3-D 矩阵。如何使用交叉熵损失?

这就是捕获。为简单起见,我们将图像作为二维数组。

y(实际)和ŷ(预测)矩阵是2-D,因此损失将在总和中具有h*w项。

反卷积网络

很快,研究人员开始尝试分割网络。 2015年,Noh等人想出了将解码提升到新水平的反卷积网络。

该体系结构如下所示:

图像来自https://arxiv.org/abs/1505.04366

编码器是使用VGG权重初始化的VGG网络,而解码器遵循与VGG网络相同的网络架构,但是从头开始学习。

因此,上采样学习了 13 层( unpooling + conv )层。(+ FC层)

在这里,新概念是我们解耦上采样和卷积。我们使用unpooling来增加感受野大小,而我们在unpooling后使用卷积层。

因此,Unpooling以下列方式工作:

图像来自https://arxiv.org/abs/1505.04366

如果我们在从4*4输入进行卷积后得到2*2的池化图,我们使用Unpooling过滤器将其投影到4*4输出上。在这样做的同时,他们利用开关变量捕获最高激活发生的位置,以指导解码,关于在卷积过程中学习边缘,梯度或任何高级特征。这有助于很好地保留边缘/边界信息。与此相关的额外成本是每个池层中的切换变量。基本上,2*2窗口的2bit信息。

Deconvolution Network发布于ICCV 2015。

SEGNET

下一个有名的结构是SegNet。

图像来自https://arxiv.org/abs/1511.00561

图像来自https://arxiv.org/abs/1511.00561

他们的比较是以FCN为基准。这里的主要改进是删除FC层。然而,除了将计算成本降低了一些之外,这似乎运作良好。

从SegNet论文中检索到的不同架构的结果示例如下:

图像来自https://arxiv.org/abs/1511.00561

在下一篇文章中,我们将介绍DeepLab ResNet v2,UNet,它是用于医学图像的标准结构。

参考文献

FCN:https://arxiv.org/abs/1411.4038

DeConvolution Network:https://arxiv.org/abs/1505.04366

SegNet:https://arxiv.org/abs/1511.00561

本文作者:

Chandana Kotta:https://www.linkedin.com/in/chandana-k-b43871a7/

想要继续查看该篇文章更多代码、链接和参考文献?

戳链接:

http://www.gair.link/page/TextTranslation/1079

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180929A1JTOB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券