FCN是首个端对端的针对像素级预测的全卷积网络
本文主要对论文进行解读,并解释有关FCN框架的部分
卷积网络是可以产生特征层次的强大可视化模型。本文表明,卷积网络本身,经过端到端,像素到像素的训练,在语义分割方面超过了最先进的水平。本文的主要见解是建立“ 全卷积”网络,该网络可接受任意大小的输入,并通过有效的推理和学习产生相应大小的输出。本文定义并详细说明了完全卷积网络的空间,解释了它们在空间密集预测任务中的应用,并阐述了与先前模型的联系。本文将当代分类网络(AlexNe、VGG网络和GoogLeNet )改造成完全卷积网络,并通过微调将它们的学习表示转移到分割任务中。然后,本文定义了一个跳跃结构,它将来自深度粗糙层的语义信息与来自浅层精细层的外观信息相结合,以生成准确和详细的分割。
小结:
卷积网络正在推动识别技术的进步。卷积网络不仅在改善了整体图像分类,而且还在具有结构化输出的局部任务上也取得了进展。这些进展包括边界框目标检测,部分和关键点预测,以及局部对应。
本文表明了在语义分割上,经过端到端,像素到像素训练的完全卷积网络(FCN)超过了最新技术,而无需其他机制。据本文,这是第一个从有监督的预训练,端到端训练地FCN用于像素预测。现有网络的完全卷积版本可以预测来自任意大小输入的密集输出。学习和推理都是通过密集的前馈计算和反向传播在整个图像上进行的。网络内上采样层通过子采样池化来实现网络中的像素预测和学习。
这种方法在渐近性和绝对性两方面都是有效的,并且排除了对其他工作中的复杂性的需要。逐块训练是很常见的,但缺乏完全卷积训练的效率。本文的方法没有利用前后处理的复杂性,包括超像素,或通过随机字段或局部分类器进行事后细化。本文的模型通过将分类网络重新解释为完全卷积并从其学习的表示中进行微调,将最近在分类任务中取得的成功转移到密集预测任务。相比之下,以前的工作是在没有经过有监督的预训练的情况下应用了小型卷积网络。
语义分割面临着语义和位置之间的固有矛盾:全局信息解决了什么,而局部信息解决了什么。 深度特征层次结构以非线性的局部到全局金字塔形式对位置和语义进行编码。本文定义了一个跳跃结构来充分利用这种结合了深层,粗略,语义信息和浅层,精细,外观信息的特征谱:
该图展示了FCN-32s网络模型的正向传播和反向学习的过程。
FCN的基本思想:对待分类的物体使用softmax,然后取概率最大的类别作为像素的类别,以实现语义分割。
本文的方法借鉴了最近成功的用于图像分类和迁移学习的深度网络。迁移首先在各种视觉识别任务,然后是检测,以及混合提议分类器模型中的实例和语义分割任务上进行了演示。本文现在重新构建和微调分类网络,来直接,密集地预测语义分割。本文绘制了FCN的空间,并在此框架中放置了历史和近期的先前模型。
Matan等人首先提出了将一个卷积网络扩展到任意大小的输入的想法。它扩展了classicLeNet来识别数字串。因为他们的网络被限制为一维输入字符串,所以Matan等人使用Viterbi解码来获得它们的输出。Wolf和Platt将卷积网络输出扩展为邮政地址块四个角的检测分数的二维图。这两个历史工作都是通过完全卷积进行推理和学习,以便进行检测。
在当前的多层网络时代,全卷积计算也已经得到了利用。Sermanet等人的滑动窗口检测 ,Pinheiro和Collobert的语义分割,以及Eigen等人的图像恢复都做了全卷积推理。全卷积训练很少见,但Tompson等人有效地使用了它 来学习一个端到端的部分探测器和用于姿势估计的空间模型,尽管他们没有对这个方法进行解释或分析。
He等人丢弃分类网络的非卷积部分来制作特征提取器。它们结合了建议和空间金字塔池,以产生用于一个局部化,固定长度特征的分类。虽然快速有效,但这种混合模型无法进行端到端地学习。
最近的一些研究已经将卷积网络应用于密集预测问题,这些方法的共同要素包括:
而本文的方法没有这种机制。然而,本文从FCN的角度研究了逐块训练和“移位 - 连接”密集输出。本文还讨论了网络内上采样。
与这些现有方法不同,本文采用并扩展了深度分类架构,使用图像分类作为有监督的预训练,并通过全卷积微调,以简单有效的从整个图像输入和整个图像的Ground Truths中学习。
本文跨层融合特征,定义一个非线性的从局部到整体的表征,然后对其进行端到端的调整。拉普拉斯金字塔是一个典型的由固定平滑和差分组成的多尺度表示。在深度网络的背景下,Sermanet等人融合了中间层,但在此过程中放弃了分辨率。Hariharan等人和Mostajabi等人也融合了多个层,但没有端到端的学习,并依赖于固定的自下而上的分组。
在本文的会议版本之后,FCN已经被扩展到新的任务和数据。任务包括区域建议、轮廓检测、深度回归、光流,以及弱监督语义分割。此外,新的工作改进了这里介绍的FCN,进一步推动了语义分割的最先进水平。DeepLab模型通过扩张卷积和密集的CRF推理提高了输出分辨率。联合CRFasRNN模型是对CRF的端到端整合,以进一步改进。ParseNet对融合的特征进行规范化处理,并通过全局池化捕捉上下文。"去卷积网络 "方法通过提议、堆积学习的去卷积和解集来恢复分辨率。U-Net将跳过层和学习去卷积结合起来,用于显微镜图像的像素标记。扩张结构彻底利用了扩张卷积来实现像素精确的输出。
卷积网络中的每一层数据都是大小为 h×w×d 的三维数组,其中 h 和 w 是空间维度,d是特征或通道维度。第一层是有着像素大小为 h×w,以及d个颜色通道的图像,较高层中的位置对应于它们路径连接的图像中的位置,这些位置称为其感受野。
卷积网络建立在平移不变性的基础之上。它们的基本组成部分(卷积,池化和激活函数)作用于局部输入区域,并且仅依赖于相对空间坐标。用 X i j X_{ij} Xij 表示特定层位置(x,j)处的数据向量, y i j y_{ij} yij 表示下一层的数据向量,可以通过下式来计算 y i j y_{ij} yij
其中 k 称为内核大小,s 为步长或者子采样因子, f k s f_{ks} fks 决定层的类型:用于卷积或平均池化的矩阵乘法,用于最大池化的空间最大值,或用于激活函数的非线性元素,用于其他类型的层等等。这种函数形式在组合下维护,内核大小和步长遵守转换规则:
当一般的深度网络计算一般的非线性函数,只有这种形式的层的网络计算非线性滤波器,我们称之为深度滤波器或完全卷积网络。FCN自然地对任何大小的输入进行操作,并产生相应(可能重采样)空间维度的输出。
由FCN组成的实值损失函数定义了任务。如果损失函数是最终层的空间维度的总和, l ( x ; θ ) = ∑ i j l ′ ( x i j ; θ ) l(x; \theta) = \displaystyle\sum_{ij}l'(x_{ij}; \theta) l(x;θ)=ij∑l′(xij;θ),它的梯度将是每个空间分量的梯度之和。因此,对整个图像计算的 l l l 的随机梯度下降将与将所有最终层感受野视为小批量的 l ′ l' l′上的随机梯度下降相同。当这些感受野显着重叠时,前馈计算和反向传播在整个图像上逐层计算而不是单独逐块计算时效率更高。
典型的识别网络,包括LeNet、AlexNet及其更深层的后继网络,表面上接受固定大小的输入并产生非空间输出。这些网络的全连接层具有固定的尺寸并且丢弃了空间坐标。然而,这些完全连接的层也可以被视为具有覆盖其整个输入区域的内核的卷积。这样做将它们转换成完全卷积的网络,该网络可以接受任何大小的输入并输出分类图。
在原先的分类网络中(以上图为例),我们会得到1000个预测值,使用softmax处理过后,就能得到每个类别的概率。可视化后,得到的是一张柱状图,类别对应的线越高,该图片中的物体是该类别的概率就越大。而对于原先的分类网络网络,我们要求输入的节点个数是固定的,否则全联接层就会报错。所以在训练分类网络时,输入图片的大小是固定的。
此时,我们使用转置的卷积层替换原本的全连接层,那么对应的输入网络的图片结构将不会有非常严格的限制。所以FCN其实就是一个所有层都是卷积层的神经网络结构。原本的全连接层经过convolutionalization操作后变成了卷积层,如果此时输入的图片大于224 x 224的尺寸话,那么最后一层卷积层的channel将大于1,也就是说,每一个channel对应的数据将是一个 2D 的数据。将 2D 的数据可视化成heatmap形式的话,也就得到了如上右图所示的照片。
举例来说,输入的图片的尺寸为224 x 224,经过一个训练好的CNN(AlexNet、VGG),去掉原本网络中最后的全连接层和全局平均池化层(需要的是空间信息),此时的输出是尺寸为7 x 7的tensor,通道数为512(举例)。之后的两层为全连接层新加的,1 x 1conv的作用是降维(减少通道数,减小计算量),Transposed conv的作用是扩大照片(将照片的尺寸还原成输入时候的大小),此时的通道数即待分类的个数,也就是说,tensor中的每一层都是一个可能的分类对象。
尽管我们将分类网络重新解释为完全卷积,可以得到任何大小的输入的输出图,但输出维度通常通过二次取样来减少。分类网络子采样以保持过滤器较小并且计算要求合理。这使这些网络的完全卷积版本的输出变得粗糙,将其从输入的大小减少到等于输出单元的感受野的像素跨度的因子。
通过输入的不同版本的输出拼接在一起,可以从粗糙的输出中获得密集预测。如果输出被 f f f 因子下采样,对于每个 ( x , y ) (x, y) (x,y),输入向右移 x x x 个像素,向下移 y y y 个像素(左上填充)。
尽管执行这种变换会很自然地使成本增加 f 2 f^2 f2 倍,但使用à trous算法可以有效地产生相同的结果。考虑一个具有输入步幅 s s s 的层(卷积或池化),以及随后的具有滤波器权重 f i j f_{ij} fij 的卷积层(省略不相关的特征尺寸)。将较低层的输入步幅设置为1会将其输出向上采样一个系数 s s s。但是,将原始滤波器与向上采样的输出进行卷积不会产生与移位拼接相同的结果,因为原始滤波器只看到其(现在向上采样的)输入的减少部分。要重现该技巧的话,请将过滤器放大为
(其中 i i i 和 j j j 从零开始)。再现技巧的完全网络输出涉及逐层重复放大此滤波器,直到删除所有子采样为止。 (实际上,可以通过处理上采样输入的子采样版本来有效地完成此操作。)
减少网络内的二次采样是一个权衡:过滤器看到更精细的信息,但是感受野更小,计算时间更长。移位和拼接技巧是另一种权衡:在不减小滤波器感受野大小的情况下,输出更密集,但是滤波器被禁止以比其原始设计更精细的尺度访问信息。
将粗糙输出连接到密集像素的另一种方法是插值。例如,简单的双线性插值通过一个只依赖于输入和输出单元的相对位置的线性映射,从最近的四个输入计算每个输出 y i j y_{ij} yij:
f f f是上采样向量。
从某种意义上讲,使用因子 f f f 进行上采样是对输入步长为 1 / f 1 / f 1/f 的卷积。只要 f f f 是整数的,那么向上采样的自然方法就是输出步长为 f f f 的反向卷积。这种操作实现起来很简单,因为它只是反转卷积的前进和后退。因此,在网络中进行上采样可以通过像素损失的反向传播进行端到端学习。
注意,这种层中的反卷积滤波器不需要固定(例如,对于双线性上采样),而是可以学习的。反卷积层和激活函数的叠加甚至可以学习非线性上采样。
在随机优化中,梯度计算由训练分布驱动。逐块训练和全卷积训练都可以产生任何分布,尽管它们的相对计算效率取决于重叠和小批量大小。整个图像完全卷积训练与逐块训练相同,其中每一批都包含低于图像(或图像集合)损失的单元的所有感受野。虽然这比批次的均匀采样更有效,但它减少了可能的批次数量。然而随机选择一幅图片中patches可以简单地复现。将损失限制为其空间项的随机采样子集(或者,等效地在输出和损失之间应用DropConnect掩码),将patches排除在梯度计算之外。
patch, 指一个二维图片中的其中一个小块,即一张二维图像中有很多个patch。正如在神经网络的卷积计算中,图像并不是一整块图像直接同卷积核进行运算,而是被分成了很多很多个patch分别同卷积核进行卷积运算,这些patch的大小取决于卷积核的size。卷积核每次只查看一个patch,然后移动到另一个patch,直到图像分成的所有patch都参与完运算。
我们将ILSVRC分类器转换成FCN网络,并通过网络内上采样和像素级损失来增强它们以进行密集预测。我们通过微调进行分割训练。接下来,我们在层与层之间添加跳跃结构来融合粗糙的、语义的和局部的外观信息。这种跳跃结构是端到端学习的,以优化输出的语义和空间精度。
输入可为任意尺寸图像彩色图像;输出与输入尺寸相同,深度为:20类目标+背景=21,模型基于AlexNet。
为了简化计算,这里忽略偏置
通过计算可以发现,上下两种算法的结果是一致的,但是由于上面的情况使用了flatten方法,导致缺少了高度和宽度的信息,而下面的那种情况,则保留了高度和宽度的信息。
原本神经网络中的3个全连接层都可以通过convolutionalization转换为卷积层。全卷积层部分进行特征提取, 提取卷积层(3个蓝色层)的输出来作为预测21个类别的特征。
FCN网络一般是用来对图像进行语义分割的,于是就需要对图像上的各个像素进行分类,这就需要一个上采样将最后得到的输出上采样到原图的大小。上采样对于低分辨率的特征图,常常采用上采样的方式将它还原高分辨率,这里陈述上采样的三种方法。
采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。
经过多次卷积和pooling以后,得到的图像越来越小,分辨率越来越低。其中图像到 H/32∗W/32 的时候图片是最小的一层时,所产生图叫做heatmap热图,热图就是我们最重要的高维特征图。
得到高维特征的heatmap之后,进行上池化操作,再进行反卷积,使得图像分辨率提高到原图大小。
基于VGG16模型
将预测结果上采样了16倍还原回原图大小
具体实现:
将预测结果上采样了8倍还原回原图大小
具体实现:
翻译参考
FCN的卷积网络部分可以采用VGG、GoogleNet、AlexNet等作为前置基础网络,在这些的预训练基础上进行迁移学习与finetuning,对反卷积的结果跟对应的正向feature map进行叠加输出(这样做的目的是得到更加准确的像素级别分割),根据上采样的倍数不一样分为FCN-8S、FCN-16S、FCN-32S。
总结:
缺点: