深度学习论文翻译--Fully Convolutional Networks for Semantic Segmentation

本文翻译论文为深度学习经典模型之一:FCN

论文链接https://arxiv.org/pdf/1411.4038.pdf

摘要:卷积网络是非常优秀的视觉模型,可以产生不同层次的特征。本文结果表明,像素到像素、端到端的卷积网络超过经典的语义分割基准。我们主要的贡献在于建立全卷积网络(fully convolutional networks):输入任意尺寸的图像,可以得到相应大小的输出分类图像,学习和预测的效率很高。我们定义并详细叙述全卷积网络,以及在空间密集预测的应用,并且建立与之前经典的卷积网络模型的联系。我们修改当前经典网络(AlexNet,VGG,GoogLeNet),使其使用适应全卷积网络,并且通过微调的方式使其学习的特征迁移到分割任务。然后我们定义了新的结构,将来自深层、粗糙的语义信息和来自浅层、精细的表征信息结合,产生准确,细致的分割。在PASCAL VOC,NYUDv2,SIFT Flow数据集上,我们的网络产生优秀的分割结果,平均IU为62.2%。

1、Introduction

卷积网络使得图像识别任务的产生巨大进步,不仅改善图像分类任务,而且在结构化输出的局部任务上也有较大的进展。它们包括预测包围盒的目标检测,局部关键点预测,以及局部对应关系。

接下来,我们自然要考虑从细到粗、针对每一个像素点的预测任务。之前很多方法使用卷积网络进行语义分割的研究,它们将封闭的对象或者区域标注为一类,文中也阐明了其不足之处。

我们使用FCN训练了一个端到端、像素到像素的语义分割模型,超出当前最高准确度。据我们所知,我们是第一个训练端到端的全卷积网络:可以进行像素级预测,以及通过有监督的预训练方式。基于预训练网络的全卷积网络可以预测任意大小的输入。通过密集的前向和反向传播,训练和预测都是处理整张图像。借助上采样层,网络的可以进行像素级预测,并且可以在网络中学习上采样层参数。

这种方法是绝对有效的,并且消除了在其它算法中并发问题。图像块(Patchwise)训练是最基本、常见的方法,但是没有全卷积网络效率高。我们没有使用预处理和后处理(包括超像素,候选框,随机场的后处理以及局部分类器)。我们的全卷积网络通过重新定义当前经典的分类模型以及微调已经学习的特征(使用训练好的AlexNet,VGG的权重),进而产生密集预测。作为对比,之前的卷积网络使用浅层卷积网络,没有使用有监督的预训练网络。

语义分割面临语义和位置上的内在矛盾:全局信息表示这是什么,而局部信息表示这是哪里。在一个从局部到全局的金字塔结构中,不同层次的深层特征一起定义了位置和语义特征。我们定义了一个新的跳跃结构(skip):结合深层粗糙的语义信息和浅层精细的表征信息。

下一章节,我们回顾下深度分类网络,FCNs,以及最近用于语义分割的卷积网络。接下来的章节解释了FCN的设计结构,以及密集预测的平衡点,介绍了FCN网络中上采样(upsampling)和多层合并,并且描述了我们的实验框架。最后,证明了FCNs的优异性。

2、Related work

本文的工作室建立在深度分类网络以及迁移学习的成功的基础上。迁移学习首先在不同的识别任务中得以证明,然后再检测,实例以及语义分割等混合分类等领域。我们重新定义模型结构,微调(finetune)分类网络,得以直接密集的进行语义分割。在这个框架下,我们我们统计了FCNs以及之前的模型,它们即是历史的,也是最近的工作。

Fully convolutional networks 据我们所知,首先将卷积网络扩展到任意大小的输入的思想出现在Matan[25],将LeNet扩展为识别数字字符串。由于它们网络限制输入一维的字符串,Matan使用Viterbi 编码来获得预期的输出。Wolf and Platt将网络扩展为2维图,用于表达检测框的四个角。他们的工作都是使用全卷积网络进行学习,最终用于检测任务。Ning[27]定义了一个用于粗糙的C.elegans tissues多类分割网络,使用的是全卷积。

全卷积计算也是被广泛研究和应用的多层神经网络。Sermanet的滑动窗口检测,Pinheir and Collobert的语义分割,以及Eigen的图像恢复。全卷积网络被训练的很少,但是Tompson训练了一个端到端的姿态估计模型,但是它并没有对该方法进行详细的说明和分析。

He[17]丢弃了分类网络的非卷积部分,然后建立一个特征提取器。他联合候选和空间金字塔池化,得到局部,固定特征长度的分类器。而且,快且有效,但是这种混合模型不是端到端的学习。

Dense Prediction with Convnets 最近很多工作都将卷积网络应用于稠密预测问题,比如Ning[27]语义分割,Farabet[8],Pinheiro and Collobert;Ciresan 提出用于显微镜的边界预测,Gamin and Lempitsky提出混合网络用于自然图像,以及Eigen的图像恢复与深度估计。他们方法的共同特点:

  • 模型的容量很小,感受域也很小;
  • 基于图像块的训练模式;
  • 借助后处理,比如Superpixel Projection,random filed regularization,filtering,or local classification;
  • 密集预测任务中:输入的转换以及输出的重叠;
  • 多尺度金字塔预处理;
  • 非线性饱和;
  • 模型集成;

然而,我们的方法没有这些限制。但是我们仍在3.4研究基于块的训练(patchwise training),3.2中我们会冲FCNs的角度介绍“shift and stitch”密集输出概念。3.3中,我们将讨论网络内的上采样。

不像已经存在的方法,我们适应并修改了现有的深度卷积网络,使用现有的分类网络进行有监督的预训练(pre-training),微调全卷积网络,使得能够更容易的,更有效的处理整张输入图片和标签。

Hariharran and Gupta 也尝试使用现有的深度分类网络进行语义分割,但是使用的是混合候选分类模型。他们的方法是微调现有的R-CNN网络,通过采样边界包围盒或者候选区域来进行目标检测,语义分割和实例分割。这些方法都不是端到端的。

上面的方法在PASCAL VOC 分割和NYUDv2分割上获得最好的结果,所以我们直接与他们比较,实验结果在Section5。

3、Fully Convolutional Networks

卷积层的数据都是三维数组结构,大小为H x W x D,H和W是卷积核的空间维度,D是特征或者通道的维度。第一层是输入图像,大小为H x W x D,D为颜色通道。网络深层与输入图像层相对应的位置连接,称之为感知域。

卷积网络建立在平移不变性的基础理论之上(translation invariance)。卷积网络的基本模块为(convolution,pooling,activation functions),处理输入图像的局部区域,仅仅依赖于相对的空间坐标系。令是某一层局部位置(i, j)的数据向量,是后面一层的数据向量,那么计算公式如下:

k是卷积核的大小,s是滑动距离,或者是下采样因子,决定了层的类型:卷积对应的是矩阵相乘或者平均池化,空间最大值对应最大池化(max pooling),激活函数对应的是元素的非线性,以及其它类型的层。

这个函数形式可以进行分解,卷积核大小和滑动(stride)遵循如下变换形式:

一般的深度网络可以表达一般的非线性函数,仅仅包含这种类型层的网络可以计算非线性滤波器,我们称之为深度滤波器或者全卷积网络。FCN自然的可以操作任意大小的输入,输出为相应大小的结果。

一个由FCN组成的实值损失函数定义了一个任务。如果损失函数对最后一层进行求和,,它的梯度是所有空间模块梯度的和。那么可以用SGD优化算法对一个batch的输入进行优化,得到相应的权重值。当最后一层的感知域重叠度很高(而不是块与块相互独立),那么前向传播和反向传播会被高效的计算。

下面我们将会解释如何将卷积分类网络修改为全卷积网络,并且输出粗糙的特征图。对于像素级预测,我们需要将这些粗糙的输出与像素建立联系。Section3.2将介绍OverFeat引入的技巧(用于得到像素级的输出)。我们将扩展其方法为等效的网络修改。为了不影响效率,我们提出反卷积层进行上采样(Section3.3)。3.4中, 我们介绍基于块采样的训练,4.3可以证明我们对于整张图的训练更加有效。

3.1、Adapting Classifiers for Dense Prediction

通常的识别网络,包括LeNet,AlexNet,以及后面更加优秀的网络结构,都是输入固定大小的图像,得到非空间结构的输出。但是,这些网络的全连接层也可以看做是覆盖整个图像区域的卷积核。因此,可以将其转化为全卷积网络,那么可以输入任意大小的图像,输出分类特征图。Figure.2给出了这种转换的结果:

更进一步,输出的特征图等效于原网络在特定输入块上的预测结果,那么计算代价被很多重叠的图像块分摊。比如,AlexNet预测一张图需要1.2ms(输入227x227,输出为分类分数),全卷积网络预测10x10的大小的图像(输入500x500)需要22ms,与基本的方法相比,快了5倍。

全卷积网络输出空间特征图,使得非常适合进行语义分割任务。并且标签的制作是基于每一个输出块,前向和反向传播都是很直接的,并且还同时享有卷积的高效计算。

相应的反向传播,AlexNet需要2.4ms,全卷积需要37ms(10x10map),与前向的计算时间基本一致,见Figure.1:

我们将分类网络重新定义为全卷积网络,可以对任意尺寸的输入产生输出特征图,通常输出的维度是通过降采样决定的。分类网络的降采样考虑到计算效率的问题。这将使得全卷积网络的输出比较粗糙,通过固定的降采样因子降低输入尺寸等同于卷积核的输出滑动感知域大小的像素

3.2、Shift-and-Stitch is Fileter Rarefaction

关于Shif-and-Stitch的详解,请参考:https://www.jianshu.com/p/e534e2be5d7d

在不使用插值的情况下,输入滑动和输出重叠是根据粗糙输出到密集预测的一个技巧,OverFeat引入该方法。如果输出是经过降采样得到(降采样因子为f),输入分别向右下方偏移(左上角填充0)x,y像素对于每一个值。那么会产生个输入,全部经过卷积之后,输出会出现重叠的情况,那么就可以计算每一个像素的预测值。

改变滤波器数量和滑动值,可以产生与Shift-and-Stitch同样的输出。假设一个层(convolution or pooling)的输入滑动为s,后面的卷积层滤波器的权重(省略了特征的维度,与该部分讨论不相关)。与shift-and-stitch类似,设置低的层输入滑动为1,输出的上采样因子为s,与shift-and-stitch类似。但是,对原来的经过上采样的滤波器进行卷积操作并不能达到与上述算法同样的效果,因为原来的层仅仅能看到输入的部分信息。为了达到同样的效果,可以增大filter为:(with i and j zero-based),类似于空洞卷积的操作,卷积核插入零值:

达到与OverFeat一样的效果,必须重复的扩大每一个层的卷积输出,直到消除了降采样的影响。

简单的降低网络中的降采样是有一个权衡点:滤波器提取精细的信息,但是视野很小,需要花费更长时间计算。我们也注意到,shift-and-stitch也有权衡点:在没有降低感受野的尺寸的时候,产生密集的输出,但是滤波器不能获取更精细的特征。

尽管最初的实验中,我们研究了shift-and-stitch,但是我们没有在模型中使用它。我们通过学习上采样,更加有效率,特别是添加了跳跃层融合(skip layer fusion)。

3.3、Upsampling is Backwards Strided Convolution

另一个将粗糙的输出和密集像素联系起来的方式是插值。比如,简单的双线性插值可以根据最近的四个输入,计算输出,仅仅需要相关位置的输入和输出块。

从某种意义上,对输出进行因子为f的上采样,等价于输入滑动为1/f。因此,只要f是整数,一种自然的方法进行上采样就是反向卷积(有时称为反卷积),伴随输出步长为f。这样的操作实现是不重要的,因为它只是简单的调换了卷积的顺推法和逆推法。所以上采样在网络内部是通过计算像素级别的损失的反向传播用于端到端的学习。

需要注意的是反卷积滤波在这种层面上不需要被固定不变(比如双线性上采样),可以被学习。堆叠的反积层和激励函数甚至能学习一种非线性上采样。在我们的实验中,我们发现在网络内部的上采样对于学习dense prediction是快速且有效的。我们最好的分割架构利用了这些层来学习上采样,可以得到更好的预测结果,见4.2节。

3.4、 Patchwise Training is Loss Sampling

在随机优化中,梯度计算是由训练分布驱动的。基于块的训练(patchwise )训练和全卷积训练能被用来产生任意分布,尽管他们相对的计算效率依赖于重叠域和minibatch的大小。在每一个由所有的单元接受域组成的批次在图像的损失之下(或图像的集合)整张图像的全卷积训练等同于patchwise训练。当这种方式比patches的均匀取样更加高效的同时,它减少了可能的批次数量。然而在一张图片中随机选择patches可能更容易被重新找到。限制基于它的空间位置随机取样子集产生的损失(或者可以说应用输入和输出之间的DropConnect mask [39] )排除来自梯度计算的patches。

如果保存下来的patches依然有重要的重叠,全卷积计算依然将加速训练。如果梯度在多重逆推法中被积累,batches能包含几张图的patches。patcheswise训练中的采样能纠正分类失调 [30,9,3] 和减轻密集空间相关性的影响[31,17]。在全卷积训练中,分类平衡也能通过给损失赋权重实现,对损失采样能被用来标识空间相关。

我们研究了4.3节中的伴有采样的训练,没有发现对于dense prediction它有更快或是更好的收敛效果。全图式训练是有效且高效的。

4、Segmentation Architecture

本文将ILSVRC分类网络修改为FCNs,通过在网络内部添加上采样(upsampling)和像素级的损失函数,使得能够稠密预测。通过微调(fine-tuning)的方式训练分割任务。同时,我们设计新的跳跃结构(skip architecture):可以融合粗糙、语义和局部、表征信息,最终产生精细的分割结果。

我们在PASCAL VOC 2011分割挑战中进行实验验证。训练中使用逐像素的多项式逻辑回归损失,使用标准的每个像素在所有类(包括背景)的平均IOU值,忽略标签中没有标记的像素。

4.1、From Classifier to Dense FCN

我们实验了AlexNet,VGG,GoogLeNet模型,选择VGG-16(效果与VGG-19差不多),对于GoogLeNet,仅仅使用最终损失层,丢弃了最后的平均池化层(否则会影响效果)。保持其它层不变,我们修改了上述网络的分类层,将全连接修改为全卷积层。我们添加1x1卷积(通道为21),对应PASCAL中的21类标签,后面添加反卷积层,将coarse outputs 转化为pixel-dense outputs。Table1给出了初步的实验结果,设定固定的学习率(175epoches),得到最好的结果。

对上述3个分类网络的微调,可以得到基本的分割结果。最差的模型也能得到大概75%的结果。FCN-VGG16在验证集上获得56.0 Mean IU,[16]在测试集上获得52.6。在额外的数据集上训练,平均IU值为59.4,训练的结果见Section4.3。但是,GoogLeNet没有得到相应的优秀结果。

4.2、 Combining What and Where

我们定义新的FCN结构,通过融合不同层次的特征,得到更精细的预测结果,见Figure.3:

全卷积分类网络可以通过微调得到不错的分割结果,尽管能得到不错测试分数,但是结果还是很粗糙。相对输入32像素的滑动输出(VGG进行5次降采样),随后的上采样中损失很多的细节信息。通过与更低层输出进行融合,以及更小的滑动,可以得到相对好的结果。网络从直线连接变为DAG图,跳跃连接可以将低层与高层特征图融合,见Figure.3。将低层,精细层(fine layers)与高层,粗糙层(coarse layers)结合,使得模型同时兼顾局部预测以及全局结构。

我们首先将输出滑动(output stride)降低一半,得到16像素的滑动输出。我们在pool4层上添加1x1卷积层,产生额外的类别预测。同时,对conv7(convolutionalized fc7,stride为32)进行2倍上采样的输出与pool4+1x1Conv的输出融合。两倍上采样的初始化为双线性插值,但是参数是可以学习的。最终滑动16的预测输出经过上采样,恢复到原图的大小。我们称之为FCN-16s网络。FCN-16s是端到端的学习,使用FCN-32s对FCN-16s进行初始化。其它的参数是零初始化,使得该层能够重新学习。学习率降低100倍。

学习这种跳跃结构使得平均IU上升3个百分点,到达62.4。Figure.4给出了改善的效果。我们对比了从pool4直接开始训练,没有额外的预测输出,并且仅仅是降低学习率,没有添加其它的操作,导致效果没有提升特别大。

我们继续以这种方式,将pool4与conv7的结果进行两倍上采样的输出与pool3融合,从而得到FCN-8s。我们得到平均IU62.7,并且得到更好的细节(没有提升特别大)。随着与更低的层进行融合,但是并没有得到较大的改善,因此没有进行进一步的融合。

Refinement by other means: 降低pool层的滑动距离(stride)是获得较好结果最直接的方式。对于FCN-VGG16网络,这样的方式是有问题的。如果设置pool5的滑动为1,那么fc6的卷积核尺寸变为14x14(保证感受野不变,卷积核的尺寸加倍,最初的卷积尺寸为7x7),这样才能达到相应的感受野。此外,学习如此大的卷积核代价很大。我们也尝试将pool5后的卷积核数量降低,但是没有得到更好的结果。可能的原因是ImageNet上训练的模型的上层特征非常重要。

4.3、Experiments Framework

优化器:Optimization SGD+Momentum(momentum=0.9,weight decay =5*0.0001或者2*0.0001);

批尺寸:batch size=20;

学习率:FCN-AlexNet,FCN-VGG16和FCN-GoogLeNet的学习率分别固定为0.001,0.0001,5*0.00001,或者为了偏移,学习率乘以2,训练过程对上述参数不是很敏感,但是对学习率很敏感。分类分数卷积层使用零初始化,随机初始化并没有改善。Dropout跟随之前的网络使用。

Fine-tuning: 我们对所有层进行微调,仅仅微调分类层,能达到前者70%的效果,见表2。从头开始训练网络是不可行的,VGG网络训练非常耗时(值得注意的是,VGG16是分阶段训练的,我们从完全的16层初始化开始的)。单GPU需要3天微调FCN-32s,在此基础上,FCN-16s和FCN-8s分别需要在增加一天。

Patch Sampling 正如3.4解释的那样,我们的全图训练通过将每一批次的图片处理正常大小、重叠的块。通过对比,前人通过在所有数据集上采样图像块,高度丰富的数据可能会加速收敛。我们充分研究了这样的空间采样损失,忽略每一个最后层的块,独立选择的概率为1-p。为了不改变有效的batch size,我们同时提高batch的大小为1/p。值得注意的是,考虑到卷积的效率,这种形式的 rejection sampling 比patchwise 训练更快(如果p更大,根据3.1 p>0.2)。图5给出了这种采样形式对收敛的影响。与整图训练相比,这种采样并没有对收敛速率有太大的影响,但是会 训练更长的时间(由于图像很多,考虑的patch也很多)。因此,我们并没有选择采样的方式,而是用全图训练。

Class Balancing 全卷积训练可以进行类平衡,比如损失添加权重或者损失采样(sampling loss)。尽管我们的数据并不是那么平衡(3/4是背景),但是我们发现类平衡不是很必要。

Dense Prediction 通过反卷积将输出恢复到原图的大小,最后的一层反卷积固定为双线性插值,中间层使用双线性上采样初始化,然后学习。Shift-and-Stitch,或者稀疏的卷积是等价的,但是没有采用。

Augmentation 数据集增强方式:随机镜像,像素在每一个方向上随机偏移32像素,但是没有明显的提高。

More Training Data PASCAL VOC 2011 Table1中使用,标注了1112张图片。Hariharan 收集8498张图,训练了SDS分割系统。提高了FCN-VGG16在验证集上3.4个百分点,Mean IU达到59.4.

Implementation 所有的模型使用Caffe训练,使用单卡Tesla K40c,模型和代码:https://github.com/BVLC/caffe/wiki/Model-Zoo#fcn

5、Results

我们在语义分割和场景分割中测试了,比如PASCAL VOC,NYUDv2,and SIFT FLow。尽管这些任务都是用来进性目标和区域的区分,我们将他们统一为像素预测。我们在每一个数据集上进行FCN跳跃结构的测试。

Metrics 我们在语义分割和场景分割中评测了四个指标,比如像素精度,IOU。令第i类预测为第j类的数量,总共有个不同的类,第i类像素总数为:,我们计算如下指标:

  • pixel accuracy:
  • mean accuracy:
  • mean IU:
  • frequency weighted IU:

PASCAL VOC 表3给出了FCN-8s在VOC2011和2012与之前方法的对比,SDS,R-CNN。我们获得了20%以上的准确率。预测时间降低了114倍(convert only,ignoring proposals and refinement)或者286倍(overall)。

NYUDv2 是RGB-D数据集,使用Kinect 收集。包含1449张图,并且像素进行标注,总共40类。使用了795张训练,654测试。图4给出了测试结果。

我们首先在RGB图上训练了FCN-32s。为了添加深度信息,我们使用四通道的RGB-D进行训练。这是有一点好处的,可能是因为梯度传播还是有一定的难处的。借鉴Gupta的成功,我们尝试三维HHA编码的深度,在这种信息上训练,或者在最后的预测层将RGB和HHA融合。

SIFT FLow 包含2688张图,总共33类,以及三个几何类(“horizontal”,“vertical”, and“Sky”)。FCN可以同时学习到两种标签。见表5:

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值