- 论文地址:Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs
- 参考源码:https://github.com/TheLegendAli/DeepLab-Context
- DeepLab v1 是一种用于语义分割的卷积神经网络模型,其核心思想是结合了全局上下文信息,以更好地理解图像中的语义内容。
- 2014 年发表于 CVPR
Abstract
深度卷积神经网络(DCNNs)最近在高级视觉任务中,如图像分类和目标检测方面,展现了最先进的性能。本研究将DCNNs和概率图模型的方法结合起来,用于解决像素级分类任务(也称为"语义图像分割")。我们发现,DCNNs在最后一层的响应对于准确的目标分割来说不够局部化。这是由于使得DCNNs在高级任务中表现出色的不变性特性。我们通过将最后一层DCNN的响应与全连接的条件随机场(CRF)相结合,克服了深度网络的这种较差的局部化特性。在定性上,我们的"DeepLab"系统能够以超越以往方法的准确性定位分割边界。定量上,在PASCAL VOC-2012语义图像分割任务中,我们的方法达到了71.6%的IOU准确度,创造了新的最先进结果。我们展示了如何高效地获得这些结果:仔细的网络重定向和波尔社区的“空洞”算法的新应用,使得在现代GPU上每秒8帧密集计算神经网络响应成为可能。
DCNNs是"Deep Convolutional Neural Networks"(深度卷积神经网络)的缩写。它是一种深度学习模型,是卷积神经网络(CNNs)的一种扩展形式。深度卷积神经网络是一类由多个卷积层和其他类型的层组成的神经网络。它们被广泛用于计算机视觉任务,如图像分类、目标检测、语义分割等。DCNNs之所以称为"深度"卷积神经网络,是因为它们通常由很多层组成,允许模型学习更复杂、抽象的特征表示。这些网络具有大量参数,能够从原始输入数据中学习到更高级别的特征,并在层层之间逐渐提取更高阶的特征,从而实现对复杂任务的有效建模。深度卷积神经网络的关键组件是卷积层,它们通过卷积运算对输入数据进行特征提取。此外,DCNNs通常还包括池化层、全连接层和激活函数等,以实现特征的降维、空间下采样和非线性变换。DCNNs在计算机视觉领域取得了显著的成功,并在各种图像处理任务中取得了优秀的性能。这些网络能够通过大规模的训练数据和反向传播算法来自动学习特征,并且在许多视觉任务中超越了传统的图像处理方法。
简单来说,DCNNs ↔ \leftrightarrow ↔ CNNs
1. 语义分割任务重存在的问题
There are two technical hurdles in the application of DCNNs to image labeling tasks: signal down-sampling, and spatial ‘insensitivity’ (invariance).
在将 DCNNs 应用于图像标注任务时,存在两个技术障碍:①信号下采样和②空间上的"不敏感性"(不变性)。
1.1 信号下采样
在 DCNN 中,通常通过池化层来进行信号下采样,这是为了减少特征图的尺寸和参数数量。然而,池化操作会导致特征图的空间分辨率降低,从而损失了一部分细节信息。在图像标注任务中,像素级的细节信息对于准确的标注非常重要,因此信号下采样可能会影响标注的质量。
这里主要强调的是:下采样会导致图像的分辨率降低。
1.2 空间上的"不敏感性"(不变性)
DCNNs 在高级视觉任务中表现出色的一个原因是它们具有一定程度的平移、旋转、缩放等空间不变性。然而,对于像素级标注任务(如语义分割或像素级分类),我们希望网络能够对每个像素点进行精细的标注,这就需要网络具有较高的空间敏感性。然而,DCNNs 的不变性特性可能导致在特征提取过程中丢失一些空间信息,使得网络对于像素级标注任务不够敏感。
CNNs 之所以具有一定程度的平移、旋转、缩放等空间不变性,原因有:①卷积层;②池化层;③权值共享;④数据增强。
Q:为什么说“CNNs 的不变性特性可能导致在特征提取过程中丢失一些空间信息”?
A:这主要是由于以下几个原因:
-
池化操作:CNN 中常用的池化层(如最大池化或平均池化)会减小特征图的空间尺寸,以减少计算量并增强空间不变性。然而,这种下采样的操作也导致了部分空间信息的丢失。当特征图被缩减时,原始图像中细微的空间结构和位置信息可能被模糊化或忽略,因此在一定程度上丢失了细粒度的空间信息。
-
卷积核尺寸:在卷积操作中,使用的卷积核尺寸通常较小,只关注局部感受野内的特征。这意味着较大的空间结构可能在特征提取过程中被忽略。虽然通过堆叠多个卷积层可以逐渐扩大感受野,但仍然存在一定程度的局部性。
-
权值共享:虽然权值共享增强了模型的平移不变性,但这也导致了一些空间信息的丢失。由于卷积核在整个图像上是共享的,网络学习到的特征对于不同位置的相同特征可能具有相同的响应,但对于不同特征的位置信息的差异性较小。
1.3 解决方案
为了克服这些技术障碍,在像素级标注任务中,可以采取一些策略,如:
-
避免过度的信号下采样:可以适当减少池化层的使用,或者使用更少的步长来进行池化,以保留更多的空间信息。
-
结合上采样技术:可以使用转置卷积或其他上采样技术来恢复特征图的空间分辨率,从而更好地处理像素级标注任务。
-
结合多尺度特征:可以在网络中引入多尺度的特征表示,以捕获不同尺度的信息,并提高对不同大小目标的感知能力。
-
使用适当的损失函数:对于像素级标注任务,可以使用适当的损失函数,如交叉熵损失或Dice损失,来优化网络并鼓励更准确的像素级标注结果。
通过综合利用这些策略,可以使DCNNs在像素级标注任务中取得更好的性能,克服信号下采样和空间"不敏感性"等技术障碍。
在这篇论文中,我们主要使用到的解决方案为:
'atrous'(with holes) algorithm
:即空洞卷积 / 膨胀卷积 / 扩张卷积fully-connected CRF(Conditional Random Field)
:全连接条件随机场,用于对图像进行后处理以改善分割或标注的结果。它通常用于在图像分割任务中对神经网络的输出进行精炼和优化。
注意❗️:CRF 在当时(2014年)是语义分割领域非常常用的一种方法,但是 DeepLab 系列在 v3 之后就不再使用 CRF 了,因此 CRF 不需要过多注意。
2. DeepLab v1 网络的优势
相比之前的一些网络,本文提出的 DeepLab v1 网络具有以下优势:
- 速度更快
- 准确率更高
- 模型比较简单
2.1 速度更快
论文中说是因为采用了膨胀卷积的原因,但 fully-connected CRF 依然很耗时,网络推理大概需要 0.5s。
2.2 准确率更高
其中:
- DeepLab:本文提出的语义分割模型
- MSc:Multi-Scale,多尺度
- CRF:全连接条件随机场,用于对图像进行后处理以改善分割或标注的结果。它通常用于在图像分割任务中对神经网络的输出进行精炼和优化。
- LargeFOV:大视场,指的是相机或传感器能够捕捉到的广阔视野范围。在图像处理和计算机视觉任务中,拥有大视场的设备通常可以覆盖更多的场景,从而更全面地理解和分析图像中的内容。
从图中可以清晰的看到,DeepLab v1 相比之前最好的网络(TTI-Zoomout-16)在 mean IoU 指标上提升了约 7.2%。
2.3 模型比较简单
从图中可以看到,DeepLab v1 主要由 DCNN 和 CRF 联级构成。
这里的 DCNN 主要是指分类网络的Backbone
3. 网络结构详解
DeepLab v1 的 Backbone 使用的是 VGG16(Visual Geometry Group 16)作为主要的卷积神经网络架构。
VGG16 的结构包含 16 层卷积层和全连接层,其中包括 13 个卷积层和 3 个全连接层。该模型在 ImageNet 数据集上进行了训练,并在图像分类任务上取得了很好的性能。
DeepLab v1 使用了预训练的 VGG16 作为 Backbone,并在其基础上构建了卷积神经网络来进行语义分割任务。在 DeepLab v1 中,VGG16 的部分或全部全连接层被去除,而只保留卷积层,并通过空洞卷积(Atrous Convolution)来增大感受野,从而实现对图像的全局上下文信息的捕获。
3.1 LargeFOV(Field of View,感受野)
3.1.1 LargeFOV 概况
在 DeepLab v1 中,LargeFOV(Field of View)指的是采用空洞卷积(Atrous Convolution)来扩大感受野(receptive field)的操作。
在传统的卷积神经网络中,随着网络层数的增加,感受野也会随之增大。然而,随着感受野的增加,网络的计算和存储开销也会显著增加。为了增加感受野而不增加额外的计算和存储负担,DeepLab v1 引入了 LargeFOV(Field of View)的概念,即使用空洞卷积来增大感受野,帮助网络更好地理解整个图像的语义信息。
空洞卷积(膨胀卷积)详情见:空洞卷积(膨胀卷积)的相关知识以及使用建议(HDC原则)
通过采用 LargeFOV 的空洞卷积操作,DeepLab v1 能够在语义分割任务中取得较好的性能,对于识别和分割图像中的对象和场景起到了积极的作用。
DeepLab v1 作者提出 LargeFOV 的主要目的是:在保证 mean IoU 不下降的前提下,减少模型的参数量以加快模型速度。
3.1.2 LargeFOV 效果分析
After converting the network to a fully convolutional one, the first fully connected layer has 4,096 filters of large 7×7 spatial size and becomes the computational bottleneck in our dense score map computation. We have addressed this practical problem by spatially subsampling (by simple decimation) the first FC layer to 4×4 (or 3×3) spatial size.
将网络转换为全卷积网络后,原本的全连接层变成了卷积核大小为 7 × 7 7\times 7 7×7,卷积核个数(输出通道数)为 4,096 的卷积层。如果我们直接使用这个卷积层,那么它就会成为计算瓶颈。为了解决这个问题,作者对这个卷积层进行了空间上的下采样,卷积核的大小从原来的 7 × 7 7 \times 7 7×7 变为 4 × 4 4\times 4 4×4(或 3 × 3 3\times 3 3×3)的空间尺寸。
不说人话系列,这里说的卷积层下采样的意思就是将卷积核减小,比如从原来的
kernel_size = (7, 7)
变为kernel_size = (4, 4)
或kernel_size = (3, 3)
。
我们可以看一下这样转换后的效果:
注意❗️
- 这里替换全连接层的卷积层并非普通卷积层,而是一个膨胀卷积,它有一个膨胀系数 r r r,可以扩大感受野。
- 图中的
input size
其实是膨胀系数 r r r。
我们逐个分析:
- DeepLab-CRF-
7
×
7
7 \times 7
7×7:简单使用膨胀系数
r=4
的膨胀卷积替换全连接层,得到一系列指标,作为 benchmark; - DeepLab-CRF:对卷积核参数进行下采样(卷积核大小从原来的 7 × 7 7 \times 7 7×7 变为 4 × 4 4\times 4 4×4)。因为卷积核大小变小了,所以感受野也变小了;此时模型参数数量几乎减半;mean IoU 有较大下降;模型训练速度翻倍 —— 这里 mean IoU 降低并不是作者期望的(我们之前说了,引入 FOV 的作用就是保持 mean IoU 并提升模型速度)
- DeepLab-CRF- 4 × 4 4 \times 4 4×4:相比上一个,膨胀系数翻倍;模型感受野恢复到原来的水平;模型参数量减半;mean IoU 也快回复到原来的水平;模型速度不变 —— 说明对于语义分割任务而言,大的感受野是非常重要的!
- DeepLab-CRF-LargeFOV:卷积核更小;膨胀系数更大;感受野不变;模型参数下降6倍;mean IoU 保持原有水平;速度提升 3 倍多 —— 说明使用膨胀卷积可以增加模型的感受野,并降低模型参数,提高模型速度,且对模型性能影响较少。
3.1.3 DeepLab v1-LargeFOV 模型架构
霹雳吧啦WZ 绘制了添加 LargeFOV 的 DeepLab v1模型,如下所示。
Backbone 和 FCN 一样,仍然为 VGG-16
LargeFOV 本质上就是使用了膨胀卷积。
通过分析发现虽然 Backbone 是 VGG-16 但所使用 Maxpool 略有不同,VGG论文中是 kernel=2,stride=2,但在 DeepLab v1 中是 kernel=3,stride=2,padding=1。接着就是最后两个 Maxpool 层的 stride 全部设置成了 1(这样下采样的倍率就从原来的 32 变成了 8)。最后三个 3 × 3 3\times 3 3×3 的卷积层采用了膨胀卷积,膨胀系数 r = 2 r=2 r=2。
然后关于将全连接层卷积化过程中,对于第一个全连接层(FC1)在 FCN 网络中是直接转换成卷积核大小为 7 × 7 7\times 7 7×7,卷积核个数为 4096 4096 4096 的卷积层(普通卷积),但在 DeepLab v1 中作者说是对参数进行了下采样最终得到的是卷积核大小 3 × 3 3\times 3 3×3,卷积核个数为 1024 1024 1024 的卷积层(膨胀卷积)(这样不仅可以减少参数还可以减少计算量,详情可以看下论文中的 Table2),对于第二个全连接层(FC2)卷积核个数也由 4096 4096 4096 采样成 1024 1024 1024(普通卷积)。
将 FC1 卷积化后,还设置了膨胀系数(膨胀卷积),论文 3.1 中说的是 r = 4 r=4 r=4 但在 Experimental Evaluation 中 Large of View 章节里设置的是 r = 12 r=12 r=12 对应 LargeFOV。对于 FC2 卷积化后就是卷积核 1 × 1 1\times 1 1×1,卷积核个数为 1024 1024 1024 的普通卷积层。接着再通过一个卷积核 1 × 1 1\times 1 1×1,卷积核个数为 num_classes(包含背景)的普通卷积层。最后通过 8 倍上采样还原回原图大小。
注意❗️采用的是双线性插值(Bilinear Interpolation)的策略来实现上采样。
双线性插值是一种常用的图像插值方法,它利用周围已知像素的值来估计目标像素的值。在上采样时,双线性插值会根据已有的特征图中的像素值,计算出目标位置上的像素值,从而将特征图的空间尺寸进行扩大。
具体来说,8 倍上采样意味着将特征图的高度和宽度分别扩大 8 倍。对于每个目标位置上的像素,双线性插值会考虑其周围 4 个最近的像素点,根据距离权重进行插值计算。这样可以有效地将特征图还原到原始输入图像的大小,使得网络的输出和输入在空间尺寸上保持一致。
3.2 MSc(Multi-Scale,多尺度(预测))
其实在论文的 4.3 中还提到了 Multi-Scale Prediction,即融合多个特征层的输出。关于 MSc(Multi-Scale) 的结构论文中是这么说的:
Specifically, we attach to the input image and the output of each of the first four max pooling layers a two-layer MLP (first layer: 128 3x3 convolutional filters, second layer: 128 1x1 convolutional filters) whose feature map is concatenated to the main network’s last layer feature map. The aggregate feature map fed into the softmax layer is thus enhanced by 5 * 128 = 640 channels.
具体来说,作者将两层的 MLP(第一层:具有 128 个 卷积核且大小为 3 × 3 3\times 3 3×3 的卷积,第二层:具有 128 个卷积核且大小为 1 × 1 1\times 1 1×1 的卷积)分别附加到输入图像和前四个最大池化层的输出上,然后将它们的特征图与主网络的最后一层特征图进行连接。因此,送入 Softmax 层的聚合特征图将增加 5 × 128 = 640 5 \times 128 = 640 5×128=640 个通道。
MLP 是多层感知器(Multilayer Perceptron)的缩写,也被称为前馈神经网络(Feedforward Neural Network)。它是一种常见的人工神经网络模型,用于解决各种机器学习任务,特别是在监督学习中广泛应用。
即 DeepLab v1 除了使用之前主分支上输出外,还融合了来自原图尺度以及前四个 Maxpool 层的输出,更详细的结构参考下图。
论文中说使用 MSc 大概能提升 1.5 个点,使用 fully-connected CRF 大概能提升 4 个点。但在源码中作者建议使用的是不带 MSc 的版本,以及看 github 上的一些开源实现都没有使用 MSc。猜测是因为 MSc 不仅费时而且很吃显存。
知识来源
- https://www.bilibili.com/video/BV1SU4y1N7Ao
- https://blog.csdn.net/qq_37541097/article/details/121692445