enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)

[论文笔记] 图像语义分割——ENet(ICLR 2017)

bluestyle • 2019 年 05 月 03 日

介绍

Motivation:

移动应用上的实时像素级语义分割是一个重要的问题,然而该任务上的深度神经网络方法往往都有需要大量浮点数运算、运行时间长的缺点。为了解决这个问题,本论文提出了ENet(Efficient Neural Network),它比现有模型运行速度快得多,参数量少得多,同时具有相似甚至更好的精度。

enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)_第1张图片

网络结构

网络结构如下表所示:

enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)_第2张图片

enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)_第3张图片

我们采用了ResNet的一种视角,将每个block描述为一个主分支和一个含有扩展卷积层的分支。如图(2b)所示,每个block由3个卷积层组成:一个1×1卷积降低维度,一个主卷积层,和一个1×1扩张。我们在卷积层之间放置BN和PReLU。与ResNet论文相似,我们将这些block称为瓶颈模块(bottleneck module)。如果瓶颈模块是进行下采样,就在主分支上加一个最大池化层,同时将副分支上的第一个1×1卷积替换为步长为2的2×2卷积。$\text{conv}$ 要么是一个标准卷积,要么是一个空洞卷积,要么是一个转置卷积,有时我们将其替换为不对称卷积,例如一系列的5×1卷积和1×5卷积。对于 $\text{regularizer}$,我们在bottleneck2.0之前使用 $p=0.01$ 的空间Dropout,之后使用 $p=0.1$ 的空间Dropout。

初始化阶段(initial stage)包括一个bottleneck block;阶段1包括5个bottleneck block;阶段2与阶段3结构相同,除了阶段3不在开始对输入进行下采样(省略第0个bottleneck)。Stage 1~3构成了encoder,Stage 4~5构成了decoder。

我们不在任何卷积层中使用偏置项以降低计算开销,因为cuDNN对卷积运算和偏置项的相加使用分离的kernel。这个选择对精度没有任何影响。在decoder中,我们用max unpooling替代max pooling。在最后一个上采样模块中,我们不使用池化索引,因为初始模块操作的是3通道图像,而最后的输出是 $C$ 通道特征图。为了模型的性能,我们决定只在模型的最后放置一个裸露的转置卷积层,从而控制decoder的运行时间。

设计细节

特征图分辨率 对语义分割来说,下采样图像主要有两个弊端:第一,特征图分辨率的降低会造成空间信息的丢失,如边缘形状等;第二,像素级的分割要求模型的输出具有与输入图像相同的分辨率,这意味着强烈的下采样需要同样强烈的上采样,提高了模型大小和计算成本。FCN通过与encoder特征图相加解决了第一个问题,而SegNet则通过存储池化索引并用来在decoder中进行稀疏上采样。我们跟随SegNet的方法,因为它能减少内存开销。

强烈的下采样当然会对精度有损害,但我们尽可能努力限制这种损害。然而,下采样有一个巨大的优点,那就是卷积层的滤波器(filters)在对经过下采样的图像进行操作时有更大的感受野(receptive field),从而能聚集更多的上下文信息。这一点对于类似于区分路上的骑车者和行人这样的任务十分重要。最后,我们发现使用空洞卷积对这个目的更佳。

提早下采样 为了实现高性能的实时操作,一个重要的直觉是处理大的图像开销很高。这听起来很显然,但许多流行的结构都没有注意到这一点,从而导致运算代价很高。

ENet的前两个block明显地降低了输入大小,只使用较小的特征图。这背后的思想是,图像上的视觉信息在空间上是存在冗余的,因此可以被压缩为一个更高效的表示。同时,我们的直觉认为网络的初始模块不应该直接对像素分类做出贡献,而是作为一个有效的特征提取器,只对输入进行预处理从而便于后续网络部分处理。这个想法在实验中表现良好:将特征图的数量从16提升到32后,并没有提高Cityscape数据集上的精度。

Decoder大小 SegNet是一个非常对称的结构,它的decoder可以视为encoder的镜像。然而,我们的结构由一个大的encoder和一个小的decoder组成。这背后的想法是,encoder的工作方式应该与原本的用于图像分类的网络结构相似,即操作更小分辨率的数据,提供给信息处理和过滤;而decoder的功能是对encoder的输出进行上采样,只对细节进行微调(fine-tuning)。

非线性操作 一篇最近的论文宣称在卷积之前使用ReLU和BN层很有益处,然而我们将其应用到ENet时却发现对精度有害,移除初始层中的大多数ReLU反而会提高性能。这是一个出人意料的发现,因此我们分析了原因。

我们将网络中所有的ReLU替换为PReLU,它对每个特征图使用一个额外的参数,从而能自动学习出ReLU的negative slope。我们的期望是对于映射关系更接近恒等映射(identity)的层,PReLU的权重值接近1,而对于映射关系更接近ReLU的层,PReLU的权重值更接近0。

enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)_第4张图片

如上图所示,初始层的权重变化较大,且向正值偏移;而在后面encoder部分中,表现出一种循环的模式。所有主分支中的层表现的就像标准的ReLU,而瓶颈模块中的权重都是负值,也就是说,函数对负值进行取反并放缩。我们分析恒等映射在网络中表现不佳的原因可能是它限制了网络深度。学习出这种损失函数的原因可能是原始的ResNet有数百层,而我们的网络层数较少,因此需要快速过滤信息。值得注意的是,decoder的权重都是较大的正值,学习到的映射接近于恒等映射,这验证了我们的想法:decoder只用来对上采样后的输出进行微调。

保持信息的维度变化 就像之前陈述的,下采样应该尽早进行,但是猛烈的维度缩减也会阻碍信息流。在《Rethinking the inception architecture for computer vision》这篇论文中已经给出了一个解决该问题的方法。有人认为,VGG结构中使用的,在pooling后紧跟一个扩展信道数的卷积层的做法会导致表示瓶颈(representational bottleneck);另一方面,它提高了特征图的深度,计算代价很昂贵。因此,我们采用了《Rethinking the inception architecture for computer vision》这篇论文中的观点,将pooling操作与步长为2的卷积操作并行执行,连接起来作为feature map。这种技术使推理速度提高了大约10倍。

除此之外我们发现,在进行下采样时,卷积分支中的第一个1×1卷积是以步长为2进行的,这导致输入的75%被丢弃。将卷积核提升到2×2可以解决这个问题,虽然提高了计算成本,但在ENet中可以接受。

因子分解的滤波器 据研究,卷积核的权重有一定的冗余,每个n×n的卷积可以被分解为两个紧跟着的较小卷积:一个n×1滤波器和一个1×n滤波器。这个想法同样是《Rethinking the inception architecture for computer vision》这篇论文提出的,我们使用了该论文的命名传统,将这种卷积称为非对称卷积(asymmetric convolution)。我们在网络中使用了$n=5$的非对称卷积,其开销等价于一个3×3卷积。这有利于丰富function的变化性并增大接收域。

空洞卷积 广阔的接收域对网络十分重要,为了避免过度下采样特征图,我们决定使用空洞卷积来改进模型。在操作较小分辨率的几个stage中,我们使用空洞卷积替换了瓶颈模块中的主卷积层,这大大提高了精度而没带来额外的开销。我们将空洞卷积插入到其他瓶颈模块中(标准卷积和非对称卷积)得到了最高的精度,而不是将它们排成一个序列。

正则化 大多数分割数据集都很小(数量级为$10^3$),因此神经网络会很快过拟合。我们将空间丢弃层(Spatial Dropout)放在卷积分支末尾,加和操作之前,实验证明它表现良好。

结果

性能分析

推理时间:

enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)_第5张图片

硬件需求:

enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)_第6张图片

Benchmarks

Cityscapes数据集:

enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)_第7张图片

CamVid数据集:

enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)_第8张图片

SUN RGB-D数据集:

d4df15292c5896028c1c44daef66b66e.png

参考文献

你可能感兴趣的:(enet分割)