lartpang / Machine-Deep-Learning

:wave: ML/DL学习笔记(基础+论文)
262 stars 58 forks source link

笔记-SegNet #27

Closed lartpang closed 5 years ago

lartpang commented 5 years ago

我们提出了一种新颖实用的深度完全卷积神经网络架构,用于语义像素分割器SegNet。该核心可训练分割引擎包括编码器网络,相应的解码器网络,后面是像素分类层。

SegNet的新颖之处在于解码器对其较低分辨率输入特征图进行上采样的方式。具体地,解码器使用在相应编码器的最大池化步骤中计算的池化索引来执行非线性上采样。这消除了学习上采样的需要。上采样的特征图是稀疏的,然后与可训练的滤波器进行对比以产生密集的特征图。我们将我们提出的架构与广泛采用的FCN以及众所周知的DeepLab-LargeFOV,DeconvNet架构进行比较。这种比较揭示了实现良好分割性能所涉及的内存与准确性之间的权衡.

SegNet主要受到场景理解应用的推动。因此,它被设计为在推理期间在存储器和计算时间方面都是有效的。它的可训练参数数量也明显小于其他竞争结构,并且可以使用随机梯度下降进行端到端训练

我们还在道路场景和SUN RGB-D室内场景分割任务上执行了SegNet和其他架构的受控基准。这些定量评估表明,与其他架构相比,SegNet提供了具有竞争性推理时间和最有效推理内存的良好性能。

语义分割具有广泛的应用,从场景理解,推断对象之间的支持关系到自动驾驶。依赖于低级视觉线索的早期方法已经被流行的机器学习算法迅速取代。特别是深度学习最近在手写数字识别,语音,分类整个图像和检测图像中的对象方面取得了巨大成功[5]。现在人们对语义像素标签有着浓厚的兴趣[7] [8],[9],[2],[4],[10],[11],[12],[13],[3] ,[14],[15],[16]。然而,这些最近的方法中的一些尝试直接采用设计用于类别预测的像素标记的深度架构[7]。结果虽然非常令人鼓舞,但看起来很粗糙[3]。这主要是因为最大池化和子采样降低了特征图分辨率。我们设计SegNet的动机源于这种将低分辨率特征映射到像素分类的输入分辨率的需求。此映射必须生成对精确边界定位有用的特征。

我们的结构SegNet旨在成为逐像素语义分割的高效架构。它主要受到道路场景理解应用的推动,这些应用需要能够模拟外观(道路,建筑物),形状(汽车,行人)并理解不同类别(例如道路和人行道)之间的空间关系(背景)。在典型的道路场景中,大多数像素属于大类,例如道路,建筑物,因此网络必须产生平滑的分割。引擎还必须具有基于其形状描绘对象的能力,尽管它们的尺寸小。因此,重要的是在提取的图像表示中保留边界信息

从计算的角度来看,网络在推理期间在存储器和计算时间方面都是有效的。使用诸如随机梯度下降(SGD)[17]之类的有效权重更新技术来端对端训练以联合优化网络中的所有权重的能力是另外的益处,因为它更容易重复。SegNet的设计源于满足这些标准的需要。

SegNet中的编码器网络在拓扑上与VGG16 [1]中的卷积层相同。我们删除了VGG16的完全连接层,这使得SegNet编码器网络比许多其他最新架构更小,更容易训练[2]。

SegNet的关键组件是解码器网络,其由对应于每个编码器的解码器层次结构组成。其中,适当的解码器使用从相应编码器接收的最大池索引来执行其输入特征映射的非线性上采样

这个想法的灵感来自为无监督特征学习而设计的架构[19]。在解码过程中重用最大池索引具有几个实际优点; (i)它改进了边界描述,(ii)它减少了能够进行端到端训练的参数数量,以及(iii)这种形式的上采样可以合并到任何编码器 - 解码器架构中,例如[2]只有一个很少修改。

本文的主要贡献之一是我们对SegNet解码技术和广泛使用的全卷积网络(FCN)的分析[2]。这是为了传达设计分割架构所涉及的实际权衡。最近的用于分段的深层体系结构具有相同的编码器网络,即VGG16,但在解码器网络,训练和推理的形式方面不同。另一个共同特征是它们具有大约数亿的可训练参数,因此在执行端到端训练时遇到困难[4]。培训这些网络的难度导致了多阶段培训[2],将网络附加到预先培训的架构,如FCN [10],使用支持辅助工具,如区域推荐推理[4],分离的不相交训练和分割网络[18]以及使用额外的训练数据进行预训练[11] [20]或进行全面训练[10]。此外,性能提升后处理技术[3]也很受欢迎。尽管所有这些因素都提高了在具有挑战性的基准测试中的性能[21],但遗憾的是,他们的定量结果难以解开实现良好性能所必需的关键设计因素。因此,我们分析了其中一些方法[2]中使用的解码过程,并揭示了它们的优缺点。

我们评估了SegNet在两个场景分割任务中的性能,CamVid道路场景分割[22]和SUN RGB-D室内场景分割[23]。 Pascal VOC12 [21]多年来一直是细分的基准挑战。但是,此任务的大部分都有一个或两个前景类,它们由高度变化的背景所包围。这隐含地倾向于用于检测的技术,如最近关于解耦分类 - 分割网络[18]的工作所示,其中分类网络可以用大量弱标记数据训练并且独立分割网络性能得到改善。 [3]的方法还使用分类网络的特征图和独立的CRF后处理技术来执行分割。通过使用其他推理辅助工具(如区域提案[4],[24])也可以提高性能。因此,它与场景理解不同,其中想法是利用对象和其他空间上下文的共现来执行鲁棒分割。为了展示SegNet的功效,我们将道路场景分割的实时在线演示呈现为自动驾驶的11个类别(参见图1中的链接)。来自Google的随机采样道路场景图像和来自SUN RGB-D数据集[23]的室内测试场景产生的一些示例测试结果如图1所示。

image

在本文的其余部分安排如下。在第2节中,我们回顾了最近的相关文献我们在第3节中描述了SegNet架构及其分析。在第4节中,我们评估了SegNet在室外和室内场景数据集上的性能。接下来是关于我们的方法的一般性讨论,并在第5节中指出未来的工作。我们在第6节中总结。

lartpang commented 5 years ago

在具有挑战性的数据集的推动下,语义像素分割是一个活跃的研究课题[22]。在深度网络到来之前,表现最佳的方法主要依靠手工设计的功能来独立分类像素。通常,将贴剂送入分级器,例如分级器。 Random Forest [27]或Boosting [29]预测中心像素的类概率。基于外观[27]或SfM和外观[28]的特征已经被探索用于CamVid道路场景理解测试[22]。然后,通过使用成对或更高阶的CRF [29]来平滑来自分类器的这些每像素噪声预测(通常称为一元项)以提高准确度。最近的方法旨在通过尝试预测贴片中所有像素的标签而不是仅中心像素来生成高质量的一元。这改善了基于随机森林的统一的结果[31],但是薄的结构化类别被分类很差。从CamVid视频计算的密集深度图也被用作使用随机森林[32]进行分类的输入。另一种方法认为使用流行的手工设计特征和时空超像素化的组合来获得更高的准确度[33]。 CamVid测试[30]中表现最佳的技术通过将对象检测输出与CRF框架中的分类器预测相结合来解决标签频率之间的不平衡问题。所有这些技术的结果表明需要改进的分类特征。

自纽约大学数据集发布以来,室内RGBD逐像素语义分割也越来越受欢迎[25]。该数据集显示了深度通道对改善分割的有用性。他们的方法使用RGB-SIFT,depth-SIFT和像素位置等特征作为神经网络分类器的输入来预测像素一元。然后使用CRF平滑嘈杂的一元。使用包括LBP和区域分割在内的更丰富的特征集进行了改进,以获得更高的准确度[34],然后是CRF。在最近的工作[25]中,使用RGB和基于深度的线索的组合一起推断了类分割和支持关系。另一种方法侧重于实时联合重建和语义分割,其中随机森林被用作分类器[35]。古普塔等人。 [36]在执行类别分割之前使用边界检测和分层分组。所有这些方法中的共同属性是使用手工设计的特征来分类RGB或RGBD图像。

用于对象分类的深度卷积神经网络的成功最近导致研究人员利用其特征学习能力来进行分段等结构化预测问题。还尝试将设计用于对象分类的网络应用于分割,特别是通过复制块中最深的层特征以匹配图像尺寸[7]。然而,由此产生的分类是块状的[38]。另一种使用递归神经网络的方法[40]合并了几种低分辨率预测,以创建输入图像分辨率预测。这些技术已经比手工设计的功能有所改进[7]但是它们描绘边界的能力很差。

特别为分割而设计的较新的深层体系结构[2]通过学习解码或将低分辨率图像表示映射到像素预测来提升了现有技术水平。在所有这些架构中产生这些低分辨率表示的编码器网络是VGG16分类网络[1],其具有13个卷积层和3个完全连接的层。该编码器网络权重通常在大型ImageNet对象分类数据集上进行预训练[41]。解码器网络在这些架构之间变化,并且是负责为每个像素产生多维特征以进行分类的部分。

完全卷积网络(FCN)架构[2]中的每个解码器学习对其输入特征图进行上采样,并将它们与相应的编码器特征图组合以产生到下一个解码器的输入。它是一种在编码器网络(134M)中具有大量可训练参数但是非常小的解码器网络(0.5M)的架构。该网络的总体规模使得难以在相关任务上进行端到端的训练。因此,作者使用阶段性培训过程。这里,解码器网络中的每个解码器逐渐添加到现有的训练网络中。网络增长直到观察不到性能进一步提高。在三个解码器之后停止这种增长,因此忽略高分辨率特征图肯定会导致边缘信息的丢失[4]。除了训练相关问题之外,在解码器中重用编码器特征映射的需要使得在测试时间内存储器密集。我们更详细地研究这个网络,因为它是其他最新架构的核心[11]。

通过将FCN与递归神经网络(RNN)相结合[10]并在大型数据集上对它们进行微调,可以进一步提高FCN的预测性能[21],[42]。 RNN层模仿CRF的清晰边界描绘能力,同时利用FCN的特征表示能力。它们显示出比FCN-8显着改进,但也表明当使用更多训练数据训练FCN-8时,这种差异会减少。 CRF-RNN的主要优势在于它与FCN-8等架构共同培训时得以体现。联合训练有助于这一事实也体现在其他最近的研究结果中[43],[44]。有趣的是,反卷积网络[4]的表现明显优于FCN,尽管代价是更复杂的训练和推理。然而,这提出了一个问题,即当核心前馈分段引擎变得更好时,CRF-RNN的感知优势是否会降低。在任何情况下,CRF-RNN网络都可以附加到任何深度分段架构,包括SegNet。

多尺度的深层架构也在追求[13]。它们有两种形式,(i)使用几个尺度的输入图像和相应的深度特征提取网络,以及(ii)组合来自单个深层结构的不同层的特征图[45] [11]。常见的想法是使用在多个尺度上提取的特征来提供局部和全局上下文[46],并且早期编码层的使用特征图保留更多高频细节,从而产生更清晰的类边界。由于其参数大小,这些架构中的一些很难训练[13]。因此,采用多阶段训练过程以及数据增强。对于特征提取的多个卷积路径,推断也是昂贵的。其他人[44]将CRF附加到他们的多规模网络并联合训练他们。但是,这些在测试时不是前馈,需要优化以确定MAP标签。

最近提出的一些用于分割的深层架构在推理时间中并不是前馈[4],[3],[18]。它们需要通过CRF [44],[43]进行MAP推理,或者需要诸如区域提议[4]之类的辅助推理。我们认为使用CRF获得的感知性能提升是由于其核心前馈分段引擎缺乏良好的解码技术。另一方面,SegNet使用解码器来获得用于精确像素分类的特征。

最近提出的反卷积网络[4]及其半监督变体解耦网络[18]使用编码器特征图(池化索引)的最大位置来在解码器网络中执行非线性上采样。这些架构的作者独立于SegNet(首次提交给CVPR 2015 [12]),提出了解码器网络中的解码思想。但是,它们的编码器网络由VGG-16网络的完全连接层组成,该网络包含整个网络的大约90%的参数。这使得他们的网络培训非常困难,因此需要额外的辅助工具,例如使用区域提案来实现培训。此外,在推断期间使用这些提议并且这显着增加了推断时间。从基准测试的角度来看,这也使得在没有其他辅助工具的情况下评估其架构(编码器 - 解码器网络)的性能变得困难。在这项工作中,我们丢弃了VGG16编码器网络的完全连接层,这使我们能够使用SGD优化使用相关的训练集来训练网络。另一种最近的方法[3]显示了在不牺牲性能,减少内存消耗和改善推理时间的情况下显着减少参数数量的好处。

我们的工作受到Ranzato等人提出的无监督特征学习架构的启发。 [19]。密钥学习模块是编码器 - 解码器网络。编码器由具有滤波器组的卷积,逐元素tanh非线性,最大池和子采样组成,以获得特征映射。对于每个样本,存储池期间计算的最大位置的索引并将其传递给解码器。解码器通过使用存储的合并索引对特征图进行上采样。它使用可训练的解码器滤波器组来卷积该上采样的映射以重建输入图像。该架构用于无人监督的分类预训练。有点类似的解码技术用于可视化训练的卷积网络[47]以进行分类。 Ranzato等人的建筑。主要关注使用小输入补丁的分层特征学习。这由Kavukcuoglu等扩展。人。 [48]接受完整图像尺寸作为输入以学习分层编码器。然而,这两种方法都没有尝试将深编码器 - 解码器网络用于无监督的特征训练,因为它们在每次编码器训练之后丢弃了解码器。这里,SegNet与这些架构不同,因为深度编码器 - 解码器网络被联合训练以用于监督学习任务,因此解码器在测试时间中是网络的组成部分。

使用深度网络进行像素预测的其他应用是图像超分辨率[49]和来自单个图像的深度图预测[50]。 [50]中的作者讨论了从低分辨率特征图学习上采样的必要性,这是本文的中心主题。

lartpang commented 5 years ago

一片介绍条件随机场的文章。https://www.groundai.com/project/an-introduction-to-conditional-random-fields/

lartpang commented 5 years ago

Recurrent Convolutional Neural Networks for Scene Parsing https://arxiv.org/abs/1306.2795

lartpang commented 5 years ago

SegNet具有编码器网络和相应的解码器网络,接着是最终的按像素分类层。该架构如图3所示。编码器网络由13个卷积层组成,这些卷积层对应于VGG16网络[1]中用于对象分类的前13个卷积层。因此,我们可以根据大型数据集分类训练的权重来初始化训练过程[41]。我们还可以丢弃完全连接的层,以便在最深的编码器输出处保留更高分辨率的特征图。与其他最新架构[2],[4]相比,这也显着减少了SegNet编码器网络中的参数数量(从134M到14.7M)(参见表5)。每个编码器层具有相应的解码器层,因此解码器网络具有13层。最终的解码器输出被馈送到多类soft-max分类器,以独立地为每个像素产生类概率。

编码器网络中的每个编码器与滤波器组执行卷积以产生一组特征映射。然后对它们进行批量标准化[51],[52])。然后应用元素整流 - 线性非线性(ReLU)max(0,x)。接下来,最大池与2×2窗口和步幅执行2(非重叠窗口)并且将得到的输出子因子2进行子采样。最大池用于在输入图像中的小空间移位上实现平移不变性。子采样导致特征图中的每个像素的大输入图像上下文(空间窗口)。虽然最大池和子采样的若干层可以相应地实现更强的分类的平移不变性,但是特征图的空间分辨率会丢失。越来越有损(边界细节)的图像表示对于边界描绘至关重要的分割是不利的。因此,有必要在执行子采样之前在编码器特征图中捕获和存储边界信息。如果在推理期间的存储器不受约束,则可以存储所有编码器特征图(在子采样之后)。在实际应用中通常不是这种情况,因此我们提出了一种更有效的方法来存储这些信息。它涉及仅存储最大池化索引,即,为每个编码器特征映射存储每个池化窗口中的最大特征值的位置。原则上,这可以使用2比特用于每个2×2池窗口,因此与以浮点精度存储特征图相比,存储更有效。正如我们稍后在本文中所展示的那样,这种较低的存储器存储会导致精度的轻微损失,但仍适用于实际应用。

解码器网络中的适当解码器使用来自相应编码器特征映射的存储的最大池索引对其输入特征映射进行上采样。此步骤生成稀疏要素图。这种SegNet解码技术如图3所示。然后,这些特征图与可训练的解码器滤波器组进行卷积,以生成密集的特征映射。然后将批量标准化步骤应用于这些图中的每一个。注意,对应于第一编码器(最接近输入图像)的解码器产生多通道特征图,尽管其编码器输入具有3个通道(RGB)。这与网络中的其他解码器不同,后者产生具有与其编码器输入相同数量的大小和通道的特征映射。最终解码器输出端的高维特征表示被馈送到可训练的软最大分类器。该soft-max独立地对每个像素进行分类。 soft-max分类器的输出是概率的K通道图像,其中K是类的数量。预测的分割对应于每个像素处具有最大概率的类。

我们在这里补充说,另外两个架构,DeconvNet [53]和U-Net [16]与SegNet共享一个类似的架构,但有一些差异。 DeconvNet具有更大的参数化,需要更多的计算资源,并且更难以端到端训练(表5),主要是由于使用完全连接的层(尽管采用卷积方式)我们报告了几次与DeconvNet的比较。 论文第4节。

与SegNet相比,U-Net [16](针对医学成像社区提出)不重用池化指数,而是将整个特征图(以更多内存为代价)传输到相应的解码器并将它们连接到上采样(通过 解卷积)解码器特征映射。 与VGG网络架构一样,U-Net中没有conv5和max-pool 5块。 另一方面,SegNet使用来自VGG网的所有预先训练的卷积层权重作为预训练权重。

lartpang commented 5 years ago

解码器变体 许多分段架构[2]共享相同的编码器网络,并且它们仅以其解码器网络的形式变化。其中我们选择将SegNet解码技术与广泛使用的全卷积网络(FCN)解码技术进行比较[2]。

为了分析SegNet并将其性能与FCN(解码器变体)进行比较,我们使用较小版本的SegNet,称为SegNet-Basic 1,它有4个编码器和4个解码器。 SegNet-Basic中的所有编码器执行最大池和子采样,并且相应的解码器使用接收的最大池索引对其输入进行上采样。在编码器和解码器网络中的每个卷积层之后使用批量归一化。在卷积之后没有使用偏差,并且在解码器网络中不存在ReLU非线性。此外,选择在所有编码器和解码器层上的7×7的恒定内核大小以提供用于平滑标记的宽上下文,即,最深层特征图(第4层)中的像素可以追溯到上下文窗口中的上下文窗口。输入图像为106×106像素。这种小尺寸的SegNet-Basic允许我们探索许多不同的变体(解码器)并在可以轻松的时间内训练它们。类似地,我们创建了FCN-Basic,这是我们分析的FCN的可比版本,它与SegNet-Basic共享相同的编码器网络,但使用了所有解码器中使用的FCN解码技术(见图3)。

图3左侧是SegNet(也是SegNet-Basic)使用的解码技术,其中在上采样步骤中不涉及学习。然而,上采样的映射与可训练的多声道解码器滤波器进行卷积以使其稀疏输入致密化。每个解码器滤波器具有与上采样特征映射的数量相同的通道数。较小的变体是解码器滤波器是单声道的变体,即它们仅卷绕它们相应的上采样特征映射。此变体(SegNet-Basic-SingleChannelDecoder)显着减少了可训练参数和推理时间。

图3右侧是FCN(也是FCN-Basic)解码技术。 FCN模型的重要设计元素是编码器特征映射的降维步骤。这压缩了编码器特征图,然后在相应的解码器中使用。编码器特征图(例如64个通道)的尺寸减小是通过将它们与1×1×64×K可训练滤波器卷积来执行的,其中K是类的数量。压缩的K通道最终编码器层特征图是解码器网络的输入。在该网络的解码器中,使用固定或可训练的多信道上采样内核通过逆卷积来执行上采样。我们将内核大小设置为8×8。这种上采样方式也称为反卷积。注意,相比之下,SegNet使用可训练解码器滤波器的多通道卷积在上采样到致密化特征图之后执行。 FCN中的上采样特征映射具有K个通道。然后将其逐个元素地添加到相应的分辨率编码器特征图以产生输出解码器特征图。使用双线性插值权重[2]初始化上采样内核。

FCN解码器模型需要在推理期间存储编码器特征图。这对嵌入式应用来说可能是内存密集型的例如在32位浮点精度下以180×240分辨率存储第一层FCN-Basic的64个特征映射需要11MB。使用降维到需要的11个特征图可以减小这个 ≈1.9MB存储空间。另一方面,SegNet对于池化索引需要几乎可忽略不计的存储成本(如果使用2×2×2池化窗口存储,则为17MB)。我们还可以创建FCN-Basic模型的变体,该模型丢弃编码器特征映射添加步骤,并且仅学习上采样内核(FCN-Basic-NoAddition)。

除了上述变体之外,我们还使用固定的双线性插值权重来研究上采样,因此无需学习上采样(双线性插值)。在另一个极端,我们可以在每一层添加64个编码器特征映射到SegNet解码器的相应输出特征映射,以创建更加内存密集的SegNet变体(SegNet-Basic-EncoderAddition)。这里使用两个上采样的合并索引,然后是卷积步骤以使其稀疏输入密集化。然后将其逐个元素地添加到相应的编码器特征图以产生解码器输出。

另一个和更多内存密集型FCN-Basic变体(FCN-Basic-NoDimReduction)是没有为编码器特征映射执行降维的地方。这意味着与FCN-Basic不同,最终编码器特征映射在将其传递到解码器网络之前不会被压缩为K个通道。因此,每个解码器末端的信道数与相应的编码器相同(即64)。

我们还尝试了其他通用变体,其中特征映射只需通过复制[7]进行上采样,或者使用固定(和稀疏)索引数组进行上采样。与上述变体相比,这些表现非常差。在编码器网络中没有最大池和子采样的变体(解码器是冗余的)消耗更多的存储器,需要更长的时间来收敛并且执行不良。最后,请注意,为了鼓励复制我们的结果,我们发布了所有变体2的Caffe实现。

lartpang commented 5 years ago

训练 我们使用CamVid道路场景数据集来对解码器变体的性能进行基准测试。该数据集很小,包括367个训练和233个测试RGB图像(白天和黄昏场景),分辨率为360×480。挑战是划分11个类别,如道路,建筑,汽车,行人,标志,杆子,人行道等。我们对RGB输入执行局部对比度标准化[54]。

使用He等人描述的技术初始化编码器和解码器权重。 [55]。为了训练所有变量,我们使用随机梯度下降(SGD),固定学习率为0.1,动量为0.9 [17],使用我们的Caffe实现SegNet-Basic [56]。我们训练变种直到训练损失收敛。在每个纪元之前,对训练集进行混洗,然后挑选每个小批量(12个图像),从而确保每个图像在时期中仅使用一次。我们选择在验证数据集上执行最高的模型。

我们使用交叉熵损失[2]作为训练网络的目标函数。将损失归结为小批量中的所有像素。当训练集中每个类别的像素数量存在较大变化时(例如,道路,天空和建筑物像素在CamVid数据集中占主导地位),则需要根据真实类别对损失进行不同的加权。这被称为阶级平衡。我们使用中值频率平衡[13],其中分配给损失函数中的类的权重是在整个训练集上计算的类频率的中值除以类频率的比率。这意味着训练集中较大的类具有小于1的权重,并且最小类的权重最高。我们还尝试了不使用类平衡或等效使用固有频率平衡来训练不同的变体。