SS-Model【1】:FCN


前言

FCN是首个端对端的针对像素级预测的全卷积网络

本文主要对论文进行解读,并解释有关FCN框架的部分

原论文链接:
Fully Convolutional Networks for Semantic Segmentation


1. Abstract & Introduction

1.1. Abstract

卷积网络是可以产生特征层次的强大可视化模型。本文表明,卷积网络本身,经过端到端,像素到像素的训练,在语义分割方面超过了最先进的水平。本文的主要见解是建立“ 全卷积”网络,该网络可接受任意大小的输入,并通过有效的推理和学习产生相应大小的输出。本文定义并详细说明了完全卷积网络的空间,解释了它们在空间密集预测任务中的应用,并阐述了与先前模型的联系。本文将当代分类网络(AlexNe、VGG网络和GoogLeNet )改造成完全卷积网络,并通过微调将它们的学习表示转移到分割任务中。然后,本文定义了一个跳跃结构,它将来自深度粗糙层的语义信息与来自浅层精细层的外观信息相结合,以生成准确和详细的分割。

小结:

  1. 解决了输入大小尺寸限制问题
  2. 将经典分类网络改造成全卷积网络,开创了语义分割的先河,实现了 像素级别(end-to-end) 的分类预测
  3. 主要技术贡献(卷积化、跳跃连接、反卷积)

1.2. Introduction

卷积网络正在推动识别技术的进步。卷积网络不仅在改善了整体图像分类,而且还在具有结构化输出的局部任务上也取得了进展。这些进展包括边界框目标检测,部分和关键点预测,以及局部对应。

本文表明了在语义分割上,经过端到端,像素到像素训练的完全卷积网络(FCN)超过了最新技术,而无需其他机制。据本文,这是第一个从有监督的预训练,端到端训练地FCN用于像素预测。现有网络的完全卷积版本可以预测来自任意大小输入的密集输出。学习和推理都是通过密集的前馈计算和反向传播在整个图像上进行的。网络内上采样层通过子采样池化来实现网络中的像素预测和学习。

这种方法在渐近性和绝对性两方面都是有效的,并且排除了对其他工作中的复杂性的需要。逐块训练是很常见的,但缺乏完全卷积训练的效率。本文的方法没有利用前后处理的复杂性,包括超像素,或通过随机字段或局部分类器进行事后细化。本文的模型通过将分类网络重新解释为完全卷积并从其学习的表示中进行微调,将最近在分类任务中取得的成功转移到密集预测任务。相比之下,以前的工作是在没有经过有监督的预训练的情况下应用了小型卷积网络。

语义分割面临着语义和位置之间的固有矛盾:全局信息解决了什么,而局部信息解决了什么。 深度特征层次结构以非线性的局部到全局金字塔形式对位置和语义进行编码。本文定义了一个跳跃结构来充分利用这种结合了深层,粗略,语义信息和浅层,精细,外观信息的特征谱:
在这里插入图片描述
该图展示了FCN-32s网络模型的正向传播和反向学习的过程。

FCN的基本思想:对待分类的物体使用softmax,然后取概率最大的类别作为像素的类别,以实现语义分割。


2. Related Work

本文的方法借鉴了最近成功的用于图像分类和迁移学习的深度网络。迁移首先在各种视觉识别任务,然后是检测,以及混合提议分类器模型中的实例和语义分割任务上进行了演示。本文现在重新构建和微调分类网络,来直接,密集地预测语义分割。本文绘制了FCN的空间,并在此框架中放置了历史和近期的先前模型。

2.1. Fully convolutional networks

Matan等人首先提出了将一个卷积网络扩展到任意大小的输入的想法。它扩展了classicLeNet来识别数字串。因为他们的网络被限制为一维输入字符串,所以Matan等人使用Viterbi解码来获得它们的输出。Wolf和Platt将卷积网络输出扩展为邮政地址块四个角的检测分数的二维图。这两个历史工作都是通过完全卷积进行推理和学习,以便进行检测。

在当前的多层网络时代,全卷积计算也已经得到了利用。Sermanet等人的滑动窗口检测 ,Pinheiro和Collobert的语义分割,以及Eigen等人的图像恢复都做了全卷积推理。全卷积训练很少见,但Tompson等人有效地使用了它 来学习一个端到端的部分探测器和用于姿势估计的空间模型,尽管他们没有对这个方法进行解释或分析。

He等人丢弃分类网络的非卷积部分来制作特征提取器。它们结合了建议和空间金字塔池,以产生用于一个局部化,固定长度特征的分类。虽然快速有效,但这种混合模型无法进行端到端地学习。

2.2. Dense prediction with convnets

最近的一些研究已经将卷积网络应用于密集预测问题,这些方法的共同要素包括:

  • 限制容量和感受野的小模型
  • 逐块训练
  • 有超像素投影,随机场正则化,滤波或局部分类的后处理过程;
  • 密集输出的输入移位和输出交错
  • 多尺度金字塔处理
  • 饱和tanh非线性
  • 集成

而本文的方法没有这种机制。然而,本文从FCN的角度研究了逐块训练和“移位 - 连接”密集输出。本文还讨论了网络内上采样。

与这些现有方法不同,本文采用并扩展了深度分类架构,使用图像分类作为有监督的预训练,并通过全卷积微调,以简单有效的从整个图像输入和整个图像的Ground Truths中学习。

2.3. Combining feature hierarchies

本文跨层融合特征,定义一个非线性的从局部到整体的表征,然后对其进行端到端的调整。拉普拉斯金字塔是一个典型的由固定平滑和差分组成的多尺度表示。在深度网络的背景下,Sermanet等人融合了中间层,但在此过程中放弃了分辨率。Hariharan等人和Mostajabi等人也融合了多个层,但没有端到端的学习,并依赖于固定的自下而上的分组。

2.4. FCN extensions

在本文的会议版本之后,FCN已经被扩展到新的任务和数据。任务包括区域建议、轮廓检测、深度回归、光流,以及弱监督语义分割。此外,新的工作改进了这里介绍的FCN,进一步推动了语义分割的最先进水平。DeepLab模型通过扩张卷积和密集的CRF推理提高了输出分辨率。联合CRFasRNN模型是对CRF的端到端整合,以进一步改进。ParseNet对融合的特征进行规范化处理,并通过全局池化捕捉上下文。"去卷积网络 "方法通过提议、堆积学习的去卷积和解集来恢复分辨率。U-Net将跳过层和学习去卷积结合起来,用于显微镜图像的像素标记。扩张结构彻底利用了扩张卷积来实现像素精确的输出。


3. Fully Convolutional Networks

卷积网络中的每一层数据都是大小为 h×w×d 的三维数组,其中 hw 是空间维度,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;θ)=ijl(xij;θ),它的梯度将是每个空间分量的梯度之和。因此,对整个图像计算的 l l l 的随机梯度下降将与将所有最终层感受野视为小批量的 l ′ l' l上的随机梯度下降相同。当这些感受野显着重叠时,前馈计算和反向传播在整个图像上逐层计算而不是单独逐块计算时效率更高。

3.1. Adapting classifiers for dense prediction

典型的识别网络,包括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中的每一层都是一个可能的分类对象。

尽管我们将分类网络重新解释为完全卷积,可以得到任何大小的输入的输出图,但输出维度通常通过二次取样来减少。分类网络子采样以保持过滤器较小并且计算要求合理。这使这些网络的完全卷积版本的输出变得粗糙,将其从输入的大小减少到等于输出单元的感受野的像素跨度的因子。

3.2. Shift-and-stitch is filter dilation

通过输入的不同版本的输出拼接在一起,可以从粗糙的输出中获得密集预测。如果输出被 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 从零开始)。再现技巧的完全网络输出涉及逐层重复放大此滤波器,直到删除所有子采样为止。 (实际上,可以通过处理上采样输入的子采样版本来有效地完成此操作。)

减少网络内的二次采样是一个权衡:过滤器看到更精细的信息,但是感受野更小,计算时间更长。移位和拼接技巧是另一种权衡:在不减小滤波器感受野大小的情况下,输出更密集,但是滤波器被禁止以比其原始设计更精细的尺度访问信息。

3.3. Upsampling is (fractionally strided) convolution

将粗糙输出连接到密集像素的另一种方法是插值。例如,简单的双线性插值通过一个只依赖于输入和输出单元的相对位置的线性映射,从最近的四个输入计算每个输出 y i j y_{ij} yij

在这里插入图片描述

f f f是上采样向量。

从某种意义上讲,使用因子 f f f 进行上采样是对输入步长为 1 / f 1 / f 1/f 的卷积。只要 f f f 是整数的,那么向上采样的自然方法就是输出步长为 f f f 的反向卷积。这种操作实现起来很简单,因为它只是反转卷积的前进和后退。因此,在网络中进行上采样可以通过像素损失的反向传播进行端到端学习。

注意,这种层中的反卷积滤波器不需要固定(例如,对于双线性上采样),而是可以学习的。反卷积层和激活函数的叠加甚至可以学习非线性上采样。

3.4. Patchwise training is loss sampling

在随机优化中,梯度计算由训练分布驱动。逐块训练和全卷积训练都可以产生任何分布,尽管它们的相对计算效率取决于重叠和小批量大小。整个图像完全卷积训练与逐块训练相同,其中每一批都包含低于图像(或图像集合)损失的单元的所有感受野。虽然这比批次的均匀采样更有效,但它减少了可能的批次数量。然而随机选择一幅图片中patches可以简单地复现。将损失限制为其空间项的随机采样子集(或者,等效地在输出和损失之间应用DropConnect掩码),将patches排除在梯度计算之外。

patch, 指一个二维图片中的其中一个小块,即一张二维图像中有很多个patch。正如在神经网络的卷积计算中,图像并不是一整块图像直接同卷积核进行运算,而是被分成了很多很多个patch分别同卷积核进行卷积运算,这些patch的大小取决于卷积核的size。卷积核每次只查看一个patch,然后移动到另一个patch,直到图像分成的所有patch都参与完运算。


4. Segmentation Architecture

我们将ILSVRC分类器转换成FCN网络,并通过网络内上采样和像素级损失来增强它们以进行密集预测。我们通过微调进行分割训练。接下来,我们在层与层之间添加跳跃结构来融合粗糙的、语义的和局部的外观信息。这种跳跃结构是端到端学习的,以优化输出的语义和空间精度。

4.1 From classifier to dense FCN

在这里插入图片描述
从分类到分割的微调可为每个网络提供合理的预测。

4.2. Architecture

输入可为任意尺寸图像彩色图像;输出与输入尺寸相同,深度为:20类目标+背景=21,模型基于AlexNet。

在这里插入图片描述

  • 蓝色:卷积层。
  • 绿色:Max Pooling层。
  • 黄色: 求和运算, 使用逐数据相加,把三个不同深度的预测结果进行融合:较浅的结果更为精细,较深的结果更为鲁棒。
  • 灰色: 裁剪, 在融合之前,使用裁剪层统一两者大小, 最后裁剪成和输入相同尺寸输出。
  • 对于不同尺寸的输入图像,各层数据的尺寸(height,width)相应变化,深度(channel)不变。

4.2.1. Convolutionalization

为了简化计算,这里忽略偏置
在这里插入图片描述
通过计算可以发现,上下两种算法的结果是一致的,但是由于上面的情况使用了flatten方法,导致缺少了高度和宽度的信息,而下面的那种情况,则保留了高度和宽度的信息。

原本神经网络中的3个全连接层都可以通过convolutionalization转换为卷积层。全卷积层部分进行特征提取, 提取卷积层(3个蓝色层)的输出来作为预测21个类别的特征。

4.2.2. Upsampling

FCN网络一般是用来对图像进行语义分割的,于是就需要对图像上的各个像素进行分类,这就需要一个上采样将最后得到的输出上采样到原图的大小。上采样对于低分辨率的特征图,常常采用上采样的方式将它还原高分辨率,这里陈述上采样的三种方法。

  • 双线性插值上采样
    双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。
    在这里插入图片描述
    假设已知函数 f f f Q 11 , Q 12 , Q 22 , Q 21 Q_{11}, Q_{12}, Q_{22}, Q_{21} Q11,Q12,Q22,Q21上的值,首先通过4点在x方向上进行插值,可知:
    在这里插入图片描述
    然后再在y方向上进行一次线性插值:
    在这里插入图片描述
    整理可得:
    在这里插入图片描述
    因为双线性插值只会使用相邻的4个点,因此分母总是为1,故可以约去;原式可化为:
    在这里插入图片描述
  • 反卷积上采样
    普通的卷积操作,会使得分辨率降低;而简单的在原图像的四周补0进行卷积操作的话,会导致图像四周的信息效果不好。
    因此,可以将信息进行平均,在每个像素之间补0,再进行卷积。
    在这里插入图片描述
  • 反池化上采样
    反池化即在一开始池化的时候,记录下池化后得到的元素在原层的相对位置,然后在新的层中,把需要烦池化的元素放入开始时记录到的位置,并在其余位置上补0。
    在这里插入图片描述

4.2.3. End-to-end

采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。
在这里插入图片描述
经过多次卷积和pooling以后,得到的图像越来越小,分辨率越来越低。其中图像到 H/32∗W/32 的时候图片是最小的一层时,所产生图叫做heatmap热图,热图就是我们最重要的高维特征图。

得到高维特征的heatmap之后,进行上池化操作,再进行反卷积,使得图像分辨率提高到原图大小。

4.2.4. Strip structure

在这里插入图片描述

基于VGG16模型

4.2.4.1. FCN-32s

将预测结果上采样了32倍还原回原图大小
具体实现:
在这里插入图片描述

  • FC6、FC7:将原来的第一、二层全连接层convolutionalization成一个全卷积层
  • 通过分类网络(backbone),会将图片下采样32倍,得到的特征图的高和宽为原始图片的1/32
  • FC6的Padding:3
    • 原论文中使用的Padding是100,这是不必要的,他是为了预防输入的图片尺寸过小而导致的卷积的失败,但正常情况下,并不会使用一个尺寸过小的图片去进行语义分割
  • 第二个1x1的Conv2d,输出的通道数为待分类的个数(注意:需要加上背景)
  • 转置矩阵
    • 上采样32倍还原图像至原大小
  • 直接使用VGG16的权重
  • 效果不佳的可能原因上采样率过大
4.2.4.2. FCN-16s

将预测结果上采样了16倍还原回原图大小
具体实现:

在这里插入图片描述

  • Maxpool4:下采样率为原图的1/16
  • Maxpool4的feature map为原图高宽的1/16,通道数为512,经过一个1x1Conv2d的卷积后,通道数也变为待分类的对象的个数,所以可以进行加和
  • 对加和的结果进行16倍的上采样,得到分类的结果
4.2.4.2. FCN-8s

将预测结果上采样了8倍还原回原图大小
具体实现:

在这里插入图片描述

  • Maxpool3:下采样率为原图的1/8
  • 其余操作同FCN-16s

4.3. Combining what and where

在这里插入图片描述
在这里插入图片描述


总结

视频资料
翻译参考

FCN的卷积网络部分可以采用VGG、GoogleNet、AlexNet等作为前置基础网络,在这些的预训练基础上进行迁移学习与finetuning,对反卷积的结果跟对应的正向feature map进行叠加输出(这样做的目的是得到更加准确的像素级别分割),根据上采样的倍数不一样分为FCN-8S、FCN-16S、FCN-32S。

总结:

  • 想要精确预测每个像素的分割结果必须经历从大到小,再从小到大的两个过程
  • 在升采样过程中,分阶段增大比一步到位效果更好
  • 在升采样的每个阶段,使用降采样对应层的特征进行辅助

缺点:

  • 得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感
  • 对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzzyzh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值