[语义分割] DeepLab v3(Cascaded model、ASPP model、两种ASPP对比、Multi-grid、训练细节)

news2024/11/17 23:37:59
Rethinking Atrous Convolution for Semantic Image Segmentation
  • 论文地址:Rethinking Atrous Convolution for Semantic Image Segmentation
  • Pytorch 实现代码:pytorch_segmentation/deeplab_v3

这是一篇 2017 年发表在CVPR上的文章。相比 DeepLab V2 有三点变化:①引入了 Multi-grid;②改进了 ASPP 结构;③移除 CRFs 后处理。

① 引入了 Multi-grid,目的:Multi-grid 的引入旨在进一步改进空洞卷积的使用方式,提高语义分割模型在不同尺度上的性能。在之前的版本(如 DeepLab V2)中,空洞卷积的膨胀系数是固定的,这限制了模型在不同尺度上捕捉上下文信息的能力。通过引入 Multi-grid,DeepLab v3 可以使用不同的膨胀系数来处理特征图,从而在多个尺度上捕获更丰富的上下文信息,这有助于更好地分割不同大小的目标。

② 改进了 ASPP 结构(Atrous Spatial Pyramid Pooling),目的:ASPP 结构用于在特征图的不同尺度上捕获多尺度上下文信息。在 DeepLab V3 中,ASPP 结构得到了改进,除了原来的多个膨胀系数的膨胀卷积外,还引入了图像级特征(全局平均池化),这样在 ASPP 模块中既能获取局部细节信息,也能融合全局上下文信息。这种改进有助于提高模型的感知范围和语义信息,从而改善分割性能。

③ 移除 CRFs 后处理(Conditional Random Fields),目的:在 DeepLab V2 中,使用CRF进行后处理是为了进一步优化语义分割结果,特别是在边界细节上进行平滑处理。然而,CRF 的计算代价较高,并且会增加模型的复杂性。DeepLab V3 移除了 CRF 后处理步骤,而是通过引入 Multi-grid 和改进 ASPP 结构来在模型中直接获得更全面和精确的特征表示,从而减少了 CRF 的需求。这样一来,DeepLab V3 在保持高性能的同时,简化了模型结构和训练过程。


DeepLab v3 概况

DeepLab v3是一个语义分割模型,其核心思想是使用深度卷积神经网络来实现高精度的语义分割任务。它是DeepLab系列模型的第三个版本,针对之前版本的一些缺点进行了改进。

DeepLab v3的核心思想包括以下几个关键点:

  1. 空洞卷积(Dilated Convolution):为了增加感受野(Receptive Field)的大小,DeepLab v3引入了空洞卷积。传统的卷积操作在特征提取时只考虑局部邻域信息,而空洞卷积通过在卷积核中引入空洞(或称为膨胀率),使得卷积核可以在更大范围内获取特征信息,从而捕捉更广阔的上下文信息。

  2. 多尺度信息融合:DeepLab v3采用了多尺度信息融合的方法,通过在不同尺度下对特征图进行空间金字塔池化操作,得到不同分辨率的特征图。然后,通过上采样和融合这些特征图,使得模型能够在不同尺度下获得更为丰富的信息,有利于对目标进行更准确的分割。

  3. 全局平均池化(Global Average Pooling):DeepLab v3在最后的特征图上使用全局平均池化来获得整体图像的全局信息。这有助于进一步提升模型的上下文感知能力,对于包含大范围目标的图像尤为重要。

  4. 条件随机场(Conditional Random Field,CRF):在得到初步的语义分割结果后,DeepLab v3采用了条件随机场来进行后处理。CRF能够利用像素之间的空间相关性和颜色相似性,对分割结果进行平滑,减少一些细节上的错误。

综合以上几点,DeepLab v3能够有效地捕获图像中的上下文信息和多尺度特征,并对这些特征进行充分融合和处理,从而在语义分割任务中达到较高的准确率。


Abstract

在这项工作中,我们重新考虑了空洞卷积(atrous convolution),这是一种强大的工具,可以明确地调整卷积核的感受野,并控制 CNNs 计算的特征响应的分辨率,用于语义图像分割的应用。为了解决在多个尺度上分割对象的问题,我们设计了使用空洞卷积的模块,这些模块串联或并行地采用多个膨胀率 r r r 来捕获多尺度上下文。此外,我们提出了对之前提出的空洞空间金字塔池化(Atrous Spatial Pyramid Pooling,ASPP)模块进行增强,该模块可以在多个尺度上探测卷积特征,并融合包含全局上下文的图像级特征,从而进一步提升性能。我们还详细阐述了实现细节,并分享了训练系统的经验。所提出的“DeepLabv3”系统在没有 DenseCRF 后处理的情况下明显优于我们之前的 DeepLab 版本,并在 PASCAL VOC 2012 语义图像分割基准测试中达到了与其他最先进模型相当的性能。

1. 用于捕获多尺度上下文信息的可选架构

在这里插入图片描述

图2. 用于捕获多尺度上下文的备选架构

  • (a) 图像金字塔:这是我们最容易想到的一种方式,即将图片缩放到不同的尺度后再分别送入网络进行推理;最终再进行融合
  • (b) 编解码器:首先按照 Backbone 对输入图片进行一系列的下采样,最后再将最终的特征图进行一系列上采样;在上采样的过程中会和 Backbone 中得到的特征图进行融合;依次类推直至还原回原图大小
  • (c) DeepLab v1 中的方法:将 Backbone 中最后几个卷积层的 stride 设置为 1;然后再引入膨胀卷积以增大网络的感受野
  • (d) DeepLab v2 中的方法:引入 ASPP(空洞空间金字塔池化)以增加模型获取多尺度信息的能力

2. DeepLab v3 的两种模型结构

  1. Cascaded Model:级联的模型
  2. ASPP Model

在 Cascaded model 中是没有使用 ASPP 模块的,在 ASPP model 中是没有使用 cascaded blocks 模块的。

注意,虽然文中提出了两种结构,但作者说 ASPP model 比 cascaded model 略好点。包括在 Github 上开源的一些代码,大部分也是用的 ASPP model。

2.1 Cascaded Model

在这里插入图片描述

论文中提出的 cascaded model 指的是图 (b)。其中 Block1、Block2、Block3、Block4 是原始 ResNet 网络中的层结构,但在 Block4 中将第一个残差结构里的 3 × 3 3\times 3 3×3 卷积层以及捷径分支上的 1 × 1 1\times 1 1×1 卷积层步距 stride 由 2 改成了 1(即不进行下采样),并且所有残差结构里 3 × 3 3\times 3 3×3 的普通卷积层都换成了膨胀卷积层。Block5、Block6 和 Block7 是额外新增的层结构,它们的结构和 Block4 是一模一样的,即由三个残差结构(使用了膨胀卷积)构成

注意❗️原论文说在训练 cascaded model 时 output_stride=16(即特征层相对输入图片的下采样率),但验证时使用的 output_stride=8。因为 output_stride=16 时最终得到的特征层 HW 会更小,这意味着可以设置更大的 batch_size 并且能够加快训练速度。但特征层 HW 变小会导致特征层丢失细节信息(文中说变的更“粗糙”),所以在验证时采用的 output_stride=8。其实只要你 GPU 显存足够大,算力足够强也可以直接把 output_stride设置成 8。—— 简单来说,训练的时候作者使用了 16 倍下采样率,而验证的时候使用了 8 倍下采样率

另外需要注意❗️的是,图中标注的 rate 并不是膨胀卷积真正采用的膨胀系数。 真正采用的膨胀系数应该是图中的 rate 乘上 Multi-Grid参数,比如 Block4 中 rate=2Multi-Grid=(1, 2, 4),那么真正采用的膨胀系数是 2 × ( 1 , 2 , 4 ) = ( 2 , 4 , 8 ) 2 \times (1, 2, 4) = (2, 4, 8) 2×(1,2,4)=(2,4,8)。关于Multi-Grid参数后面会提到。

r a c t u a l l y = r a t e × M u l t i G r i d r_\mathrm{actually} = \mathrm{rate} \times \mathrm{MultiGrid} ractually=rate×MultiGrid

2.2 ASPP Model

2.2.1 整体模型结构

虽然论文大篇幅的内容都在讲 Cascaded Model 及其对应的实验,但实际使用的最多的还是 ASPP Model,其模型结构如下图所示。

在这里插入图片描述

注意❗️和 Cascaded Model 一样,原论文中说在训练时 output_stride=16(即特征层相对输入图片的下采样率),但验证时使用的 output_stride=8。但在 PyTorch 官方实现的 DeepLabV3 源码中就直接把 output_stride 设置成 8 进行训练的。

2.2.2 两种版本 ASPP 的对比

2.2.2.1 ASPP in v2

首先回顾 DeepLab V2 中的 ASPP 结构,DeepLab V2 中的 ASPP 结构其实就是 通过四个并行的膨胀卷积层,每个分支上的膨胀卷积层所采用的膨胀系数不同(注意,这里的膨胀卷积层后没有跟 BatchNorm 并且使用了偏执 Bias)。接着通过 add ⊕ \oplus 相加的方式融合四个分支上的输出。

在这里插入图片描述

2.2.2.2 ASPP in v3

我们再来看下 DeepLab V3 中的 ASPP 结构,如下图所示。

在这里插入图片描述

这里的 ASPP 结构有 5 个并行分支,分别是:

一个 1 × 1 1\times 1 1×1 的卷积层
② ~ ④ 三个 3 × 3 3\times 3 3×3 的膨胀卷积层
以及一个全局平均池化层(后面还跟有一个 1 × 1 1\times 1 1×1 的卷积层,然后通过双线性插值的方法还原回输入的 WH)。

关于最后一个全局池化分支作者说是为了增加一个全局上下文信息(Global Contextual Information)。

之后通过 Concat 的方式将这 5 个分支的输出进行拼接(沿着 channels 方向),最后再通过一个 1 × 1 1\times 1 1×1 的卷积层进一步融合信息。

3. Multi-grid(多级网格方法)

在之前的 DeepLab 模型中虽然一直在使用膨胀卷积,但设置的膨胀系数都比较随意。在 DeepLab V3 中作者有去做一些相关实验看如何设置更合理。下表是以 Cascaded Model(ResNet-101 作为 Backbone 为例)为实验对象,研究采用不同数量的 cascaded blocks 模型以及 cascaded blocks 采用不同的 Multi-Grid 参数的效果。

在这里插入图片描述

Table 3. 在输出步幅为 16 时,使用多级网格方法(Multi-grid)对 ResNet-101 进行 cascaded blocks 数量的不同配置。最佳模型性能用粗体显示

注意❗️

  • block5 ~ block7 都是和 block4 结构一样,只不过膨胀系数变了
  • 刚刚在讲 cascaded model 时有提到,blocks 中真正采用的膨胀系数应该是图中的 rate 乘上这里的 Multi-Grid 参数

通过实验发现:

  • 当采用三个额外的 Block 时(即额外添加 Block5、Block6 和 Block7)将 Multi-Grid 设置成 (1, 2, 1) 效果最好 —— Cascaded Model 最佳模型
  • 另外如果不添加任何额外 Block(即没有Block5、Block6 和 Block7)将 Multi-Grid 设置成 (1, 2, 4) 效果最好 —— ASPP Model 最佳模型
    因为在 ASPP model 中是没有额外添加 Block 层的,后面讲 ASPP model 的消融实验时采用的就是 Multi-Grid 等于 (1, 2, 4) 的情况。

4. 消融实验

4.1 Cascaded model(联级模型)消融实验

下表是有关 cascaded model 的消融实验。

在这里插入图片描述

Table 4. 在验证集上的推理策略。MG:多级网格(Multi-grid)。OS:输出步幅(output stride)。MS:测试期间使用多尺度输入。Flip:添加左右翻转的输入

其中:

  • MG 代表 Multi-Grid,刚刚在上面也有说在 cascaded model 中采用 MG(1, 2, 1) 是最好的。
  • OS 代表 output_stride(下采样倍数),刚刚在上面也有提到过验证时将 output_stride 设置成 8 效果会更好
  • MS 代表多尺度,和 DeepLab V2 中类似。不过在 DeepLab V3 中采用的尺度更多 scales = {0.5, 0.75, 1.0, 1.25, 1.5, 1.75}
  • Flip 代表增加一个水平翻转后的图像输入

4.2 ASPP model 消融实验

下表是有关ASPP model的消融实验。

在这里插入图片描述

Table 6. 在验证集上的推理策略:MG:多级网格(Multi-grid)。ASPP:空洞空间金字塔池化(Atrous spatial pyramid pooling)。OS:输出步幅(output stride)。MS:测试期间使用多尺度输入。Flip:添加左右翻转的输入。COCO:在MS-COCO上预训练的模型

其中:

  • MG 代表 Multi-Grid,刚刚在上面也有说在 ASPP model 中采用 MG(1, 2, 4) 是最好的
  • ASPP 前面讲过
  • Image Pooling 代表在 ASPP 中加入全局平均池化层分支
  • OS 代表 output_stride,刚刚在上面也有提到过验证时将 output_stride 设置成 8 效果会更好
  • MS 代表多尺度,和 DeepLab V2 中类似。不过在 DeepLab V3 中采用的尺度更多 scales = {0.5, 0.75, 1.0, 1.25, 1.5, 1.75}
  • Flip 代表增加一个水平翻转后的图像输入
  • COCO 代表在 COCO 数据集上进行预训练

5. 训练细节

下表是原论文中给出的关于 DeepLab V3 在 Pascal VOC2012 测试数据集上的 mean IOU。

在这里插入图片描述

通过对比发现,其实 DeepLab V3 和 V2 比起来提升了大约 6 个点。但这里的 DeepLab V3 貌似并没有明确指出具体是 cascaded model 还是 ASPP model,个人觉得大概率是指的 ASPP model。然后仔细想想这 6 个点到底是怎么提升的,如果仅通过引入 Multi-Grid,改进 ASPP 模块以及在 MSC 中使用更多的尺度应该不会提升这么多个点。所以我能想到的就是在训练过程中的某些改动导致 mean IOU 提升了。

论文中 A. Effect of hyper-parameters 部分,其中作者有说:

在训练过程中增大了训练输入图片的尺寸(论文中有个观点大家需要注意下,即采用大的膨胀系数时,输入的图像尺寸不能太小,否则 3 × 3 3\times 3 3×3 的膨胀卷积可能退化成 1 × 1 1\times 1 1×1 的普通卷积。

计算损失时,是将预测的结果通过上采样还原回原尺度后(即网络最后的双线性插值上采样 8 倍)在和真实标签图像计算损失。而之前在 V1 和 V2 中是将真实标签图像下采用 8 倍然后和没有进行上采样的预测结果计算损失(当时这么做的目的是为了加快训练)。根据 Table 8 中的实验可以提升 1 个多点。

训练完毕后,冻结 BN 层的参数,然后再去 fine-turn 下网络的其它层,根据 Table 8 中的实验可以提升 1 个多点。

6. PyTorch 官方实现 DeepLab V3 模型结构

下图是霹雳吧啦WZ根据 PyTorch 官方实现的 DeepLab V3 源码绘制的网络结构(与原论文有些许差异):

  • 在 PyTorch 官方实现的 DeepLab V3 中,并没有使用 Multi-Grid
  • 在 PyTorch 官方实现的 DeepLab V3 中多了一个 FCNHead 辅助训练分支,可以选择不使用
  • 在 PyTorch 官方实现的 DeepLab V3 中无论是训练还是验证 output_stride 都使用的 8
  • ASPP 中三个膨胀卷积分支的膨胀系数是 {12, 24, 36},因为论文中说当 output_stride=8 时膨胀系数要翻倍

在这里插入图片描述

知识来源

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

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

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

相关文章

一、前端高德地图注册、项目中引入、渲染标记(Marker)and覆盖物(Circle)

首先说明一下,下面的流程只是个人摸索and看文档梳理出来的,并不作为完全正确的流程。 首先,注册 高德开放平台 没有注册的可以点击右上角点击注册; 我们点个人的就ok; 信息完善之后我们到控制台,点击 应…

6个高清图片素材网站,免费下载,值得推荐~

关于图片素材网站,我一直都在推荐这几个,免费下载,可商用,建议收藏起来~ 菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 网站主要是为新手设计师提供免费素材的,素材的质量都很高,类别也很多&a…

手机word怎么转换成pdf?这几个转换方法推荐给你

手机word怎么转换成pdf?将Word转换为PDF的主要原因是PDF格式具有更好的文件保护性和稳定性。PDF文件是一种可靠的文件格式,可以保护文件免受恶意软件和病毒的攻击,同时保持文件的格式和布局不变。此外,PDF文件可以在不同的操作系统…

【1】-Locust性能测试工具介绍与安装

Locust介绍 locust是一个开源的压测工具,其官网地址是Locust - A modern load testing framework,通过编写Python代码,可以轻松实现百万级的并发,相对于我们熟悉的Jmeter来说,其对压测机的要求更低,而且使…

MicroPython for ESP32

MicroPython for ESP32 开发板引脚图 环境搭建 参考资料 https://zhuanlan.zhihu.com/p/587027345 官方资料 https://docs.micropython.org/en/latest/ http://vcc-gnd.com/rtd/html/esp32/quickref.html#i2c 创建一个虚拟环境, conda create -n esp32 pytho…

编辑员工信息

1.根据员工id查询信息 Controller层 /** 根据员工id查询信息* */GetMapping("/{id}")ApiOperation("根据员工id查询信息")public Result<Employee> getById(PathVariable Integer id){log.info("根据员工id查询信息{}",id);Employee emplo…

pdf转换word软件哪个好?式?这款软件帮你轻松实现转换

在工作中&#xff0c;我们常常遇到这样的情况&#xff1a;我们的文件可能是PDF格式的&#xff0c;但对方要求我们以Word形式发送&#xff0c;因为Word相对于PDF占用更小的内存&#xff0c;打开更方便&#xff0c;发送时间更短。这时我们需要将PDF转换为Word格式&#xff0c;然而…

低代码开发平台源码:可视化敏捷开发工具,拖拽式自定义表单界面

低代码开发平台源码 低代码管理系统源码 无需代码或通过少量代码就可以快速生成应用程序的开发平台。 本套低代码管理后台可以支持多种企业应用场景&#xff0c;包括但不限于CRM、ERP、OA、BI、IoT、大数据等。无论是传统企业还是新兴企业&#xff0c;都可以使用管理后台快速构…

优惠券秒杀(三)

优惠券秒杀一人一单 优惠券的目的是为了引流&#xff0c;但是目前的情况是一个人可以无限制的抢这个优惠券&#xff0c;因此&#xff0c;代码中应该添加一个用户只能下一单的逻辑。保证一个用户只能抢一张券&#xff0c;则只要保证该用户下的优惠券只要一张&#xff0c;即根据优…

List<List<>> 转 List lambda,List<HashMap<>>转List<>

1、在实际的业务处理中&#xff0c;我们经常会碰到需要合并同一个集合内相同属性对象的情况&#xff0c;比如&#xff0c;同一个用户短时间内下的订单&#xff0c;我们需要将各个订单的金额合并成一个总金额。那么用lambda表达式和HashMap怎么分别处理该种情况呢&#xff1f;本…

vue3如何设置全局过滤器、app.config.globalProperties如何使用配置

vue3 相比于 vue2 取消了很多的API&#xff0c; filter就在其中&#xff0c;但是我们可以使用其他方法替代vue2中的filter 通过 app.config.globalProperties 来注册一个全局都能访问到的属性 我们再来说说 app.config.globalProperties 是什么&#xff0c;如何使用&#xff…

httpd升级2.4.57及后续问题处理

文章目录 背景信息操作步骤构建rpm包升级httpd启动httpd报错及处理缺少mod_systemd缺少mod_cgi 相关文件 背景信息 由于2.4.37版本httpd有安全漏洞&#xff0c;需要升级到2.4.57版本&#xff0c;2.4.57版本是当前最新的版本&#xff0c;只具备源码包&#xff0c;不具备rpm包&a…

Quartz 调度原理与源码分析

文章目录 一、Quartz基础1、入门案例 二、获取调度器实例源码分析1、读取配置文件&#xff1a;initialize()2、初始化工作&#xff1a;instantiate()&#xff08;1&#xff09;创建线程池&#xff08;包工头&#xff09;SimpleThreadPool&#xff08;2&#xff09;WorkerThread…

十五章:使用类别峰值响应的弱监督实例分割

0.摘要 目前&#xff0c;使用图像级别标签而不是昂贵的像素级掩码进行弱监督实例分割的研究还未得到充分探索。本文通过利用类别峰值响应来实现一个分类网络&#xff0c;用于提取实例掩码&#xff0c;来解决这个具有挑战性的问题。只通过图像标签的监督下&#xff0c;完全卷积的…

winform 将resources资源文件反编译为resx文件

resources资源文件反编译为resx文件 【前景提要】 在日常工作中我们会遇到需要将一个编译后的winform程序反编译出其对应的源码&#xff0c;然而在常用的反编译工具中对于项目中使用的资源文件是编译为resources文件的&#xff0c;这个资源文件在反编译后的源码中是无法直接使用…

MES管理系统中设备管理功能的原理是什么

制造执行系统MES是一种应用于制造工厂的实际操作系统&#xff0c;它通过实时监控和控制生产流程&#xff0c;为生产过程提供全面的管理和优化。在MES管理系统解决方案中&#xff0c;设备管理功能是非常重要的一部分&#xff0c;它可以实现设备实时监控、故障预警、维护保养等功…

MyBatisPlus从入门到精通-2

接着上一讲的Mp的分页功能 下面我们讲解条件查询功能和其他功能 解决一下日志输出和banner问题 每次卞就会输出这些日志 很不美观&#xff0c;现在我们关闭一下 这样建个xml&#xff0c;文件名为logback.xml 文件内容改成这样 配置了logback但是里面什么都没写就不会说有日…

视频监控汇聚平台EasyCVR向上级联时,上级一直回复401是什么原因?

视频监控管理EasyCVR视频融合平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;具体包括&#xff1a;NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。平台具有强大的数据接入、处理及分发能力&#xff0c;可在复杂的网络环…

下载文件出错:org.apache.catalina.connector.ClientAbortException

解决方案 复现步骤&#xff1a; 浏览器调整下载速度后&#xff0c;超过1分钟的下载会自动断开&#xff0c;调整connectionTimeout后&#xff0c;问题解决。

前端Vue入门-day04-用vue实现组件通信

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 组件的三大组成部分 注意点说明 组件的样式冲突 scoped data 是一个函数 组件通信 什么是组件通信 不…