[语义分割] DeepLab v1网络(语义分割、信号下采样、空间上的不敏感性、LargeFOV、膨胀卷积、空洞卷积、MSc、Multi-Scale)

news2024/11/18 17:33:15
Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs
  • 论文地址: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:这主要是由于以下几个原因:

  1. 池化操作:CNN 中常用的池化层(如最大池化或平均池化)会减小特征图的空间尺寸,以减少计算量并增强空间不变性。然而,这种下采样的操作也导致了部分空间信息的丢失。当特征图被缩减时,原始图像中细微的空间结构和位置信息可能被模糊化或忽略,因此在一定程度上丢失了细粒度的空间信息

  2. 卷积核尺寸:在卷积操作中,使用的卷积核尺寸通常较小,只关注局部感受野内的特征。这意味着较大的空间结构可能在特征提取过程中被忽略。虽然通过堆叠多个卷积层可以逐渐扩大感受野,但仍然存在一定程度的局部性。

  3. 权值共享:虽然权值共享增强了模型的平移不变性,但这也导致了一些空间信息的丢失。由于卷积核在整个图像上是共享的,网络学习到的特征对于不同位置的相同特征可能具有相同的响应,但对于不同特征的位置信息的差异性较小

1.3 解决方案

为了克服这些技术障碍,在像素级标注任务中,可以采取一些策略,如:

  • 避免过度的信号下采样:可以适当减少池化层的使用,或者使用更少的步长来进行池化,以保留更多的空间信息。

  • 结合上采样技术:可以使用转置卷积或其他上采样技术来恢复特征图的空间分辨率,从而更好地处理像素级标注任务。

  • 结合多尺度特征:可以在网络中引入多尺度的特征表示,以捕获不同尺度的信息,并提高对不同大小目标的感知能力。

  • 使用适当的损失函数:对于像素级标注任务,可以使用适当的损失函数,如交叉熵损失或Dice损失,来优化网络并鼓励更准确的像素级标注结果。

通过综合利用这些策略,可以使DCNNs在像素级标注任务中取得更好的性能,克服信号下采样和空间"不敏感性"等技术障碍。


在这篇论文中,我们主要使用到的解决方案为:

  1. 'atrous'(with holes) algorithm:即空洞卷积 / 膨胀卷积 / 扩张卷积
  2. fully-connected CRF(Conditional Random Field):全连接条件随机场,用于对图像进行后处理以改善分割或标注的结果。它通常用于在图像分割任务中对神经网络的输出进行精炼和优化。

注意❗️:CRF 在当时(2014年)是语义分割领域非常常用的一种方法,但是 DeepLab 系列在 v3 之后就不再使用 CRF 了,因此 CRF 不需要过多注意。

2. DeepLab v1 网络的优势

相比之前的一些网络,本文提出的 DeepLab v1 网络具有以下优势:

  1. 速度更快
  2. 准确率更高
  3. 模型比较简单

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)

我们可以看一下这样转换后的效果:

在这里插入图片描述

注意❗️

  1. 这里替换全连接层的卷积层并非普通卷积层,而是一个膨胀卷积,它有一个膨胀系数 r r r,可以扩大感受野。
  2. 图中的 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

在这里插入图片描述

DeepLab-LargeFOV

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 不仅费时而且很吃显存。

在这里插入图片描述

Table 1:(a) 我们提出的模型在PASCAL VOC 2012数据集的'val'集上的性能(在扩充的'train'集上进行了训练)。最佳性能是通过同时利用多尺度特征和大视场来实现的。(b) 我们提出的模型在PASCAL VOC 2012数据集的'test'集上(在扩充的'trainval'集上进行了训练)与其他最先进方法的性能对比。

知识来源

  1. https://www.bilibili.com/video/BV1SU4y1N7Ao
  2. https://blog.csdn.net/qq_37541097/article/details/121692445

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/799769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库中的Hash索引以及哈希碰撞

hash索引,就是用过一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中 就比如下面的name字段,经过算法的分析,就会对应出一张hash表 如果我的两个name字段计算出来的key相同&a…

vscode eslint配置

1. 全局安装 eslint npm install -g eslint 2. control shift p 输入 settings 打开设置进行配置 3. 添加配置 {"workbench.colorTheme": "One Dark Pro","eslint.debug": true,"eslint.execArgv": null,"eslint.alwaysShow…

多表关联查询

十七、多表关联查询 但是开发中不会使用联合主键,还是只会使用一个主键 多表关联查询: 建表: 交叉连接 …… …… 重复时写清楚是哪个表的,不然会报错: 2、内连接 王妍没有部门,查不出来。此时需要用到外连…

Python 进阶(一):PyCharm 下载、安装和使用

❤️ 博客主页:水滴技术 🌸 订阅专栏:Python 入门核心技术 🚀 支持水滴:点赞👍 收藏⭐ 留言💬 文章目录 一、下载 PyCharm二、安装 PyCharm三、创建项目四、界面汉化五、实用技巧5.1、使用快捷…

SpringMvc+Mybatis完整项目

0目录 1.SpringmybatisSpringmvc查询功能(记录数) 2.查询所有 3.增删改查(根据id) 4.增加用户注册登录功能 1.SpringmybatisSpringmvc增删改查 新建数据库 创建工程 配置web.xml 配置applicationContext.xml 实体类 My…

24考研数据结构-栈

目录 第三章 栈和队列3.1栈(stack)3.1.1栈的基本概念栈的基本概念知识回顾 3.1.2 栈的顺序存储上溢与下溢栈的顺序存储知识回顾 3.1.3栈的链式存储链栈的基本操作 第三章 栈和队列 3.1栈(stack) 3.1.1栈的基本概念 栈的定义 栈…

主流开源监控系统一览

减少故障有两个层面的意思,一个是做好常态预防,不让故障发生;另一个是如果故障发生,要能尽快止损,减少故障时长。而监控的典型作用,就是帮助我们发现及定位故障,这两个环节对于减少故障时长至关…

Docker挂载目录失败问题解决

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

SpringCloudAlibaba:服务网关之Gateway的cors跨域问题

目录 一:解决问题 二:什么是跨域 三:cors跨域是什么? 一:解决问题 遇到错误: 前端请求时报错 解决: 网关中添加配置文件,注意springboot版本,添加配置。 springboo…

Opencv Win10+Qt+Cmake 开发环境搭建

文章目录 一.Opencv安装二.Qt搭建opencv开发环境 一.Opencv安装 官网下载Opencv安装包 双击下载的软件进行解压 3. 系统环境变量添加 二.Qt搭建opencv开发环境 创建一个新的Qt项目(Non-Qt Project) 打开创建好的项目中的CMakeLists.txt,添加如下代码 # openc…

SpringBoot IOC与AOP(一)

IOC AOP 一、 分层解耦 内聚: 软件中各个功能模块内部的功能联系 耦合: 衡量软件中各个层/模块之间的依赖、关联的程度 软件设计原则:高内聚、低耦合 ​ 控制反转:Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到…

Java 悲观锁 乐观锁

锁可以从不同的角都分类。其中乐观锁和悲观锁是一种分类方式 一、悲观锁、乐观锁定义 悲观锁就是我们常说到的锁。对于悲观锁来说,他总是认为每次访问共享资源时会发生冲突,所以必须每次数据操作加上锁,以保证临界区的程序同一时间只能有一个…

文件上传漏洞 -- uploadlabs为例

文件上传漏洞原理 一些web应用程序中允许上传图片、视频、头像和许多其他类型的文件到服务器中。 文件上传漏洞就是利用服务端代码对文件上传路径变量过滤不严格将可执行的文件上传到一个到服务器中 ,再通过URL去访问以执行恶意代码。 非法用户可以利用上传的恶意脚…

如何使用 Flatpak 在 Linux 上安装 ONLYOFFICE 桌面编辑器?

Flatpak 是一款与 Linux 发行版无关的软件实用工具,可用于在 Linux 上构建和分发桌面端应用。其可帮助您安装第三方 Linux 应用程序,无需安装库或处理依赖。 ONLYOFFICE 桌面版是什么 ONLYOFFICE 编辑器桌面版是一款全面的办公工具,提供了文…

常用抓包命令

tcpdump的命令参数介绍 tcpdump选项可划分为四大类型: 1.控制抓包行为 2.控制信息如何显示 3.控制显示什么数据 4.过滤命令 一个电脑是可以有多个网卡的! 易错:ping命令式指定网口要-I ,-i表示ping的时间间隔、tcpdump指定网口-i 。 nsloo…

优惠券秒杀(二)

库存超卖问题分析 库存超卖问题其本质就是多个线程操作共享数据产生的线程安全问题,即当一个线程在执行操作共享数据的多条代码的过程中,其他线程也参与了进来,导致了线程安全问题的产生。例如:线程1发送请求,查询库存…

openGauss学习笔记-22 openGauss 简单数据管理-HAVING子句

文章目录 openGauss学习笔记-22 openGauss 简单数据管理-HAVING子句22.1 语法格式22.2 参数说明22.3 示例 openGauss学习笔记-22 openGauss 简单数据管理-HAVING子句 HAVING子句可以让我们筛选分组后的各组数据。 WHERE子句在所选列上设置条件,而HAVING子句则在由…

Facebook Shop商店如何开通?6个步骤

Facebook作为全球领先的社交平台,一直以来是跨境玩家的必争之地。据统计,目前它活跃用户27亿人/月,访问量21亿/天。近年来社媒电商红利当头,而Meta 于2020年5月推出的Facebook Shop也一直备受关注 。这也是用户的在facebook上网购…

108、RocketMQ的底层实现原理(不需要长篇大论)

RocketMQ的底层实现原理 RocketMQ由NameServer集群、Producer集群、Consumer集群、Broker集群组成,消息生产和消费的大致原理如下: Broker在启动的时候向所有的NameServer注册,并保持长连接,每30s发送一次心跳Producer在发送消息的时候从Na…

Tomcat的基本使用,如何用Maven创建Web项目、开发完成部署的Web项目

Tomcat 一、Tomcat简介二、Tomcat基本使用三、Maven创建Web项目3.1 Web项目结构3.2开发完成部署的Web项目3.3创建Maven Web项目3.3.1方式一3.3.2方式二(个人推荐) 总结 一、Tomcat简介 Web服务器: Web服务器是一个应用程序(软件&…