引用量超6000的语义分割经典论文DeepLabv3解读

news2024/11/17 11:42:08

分享语义分割领域的一篇经典论文DeepLabv3,由谷歌发表于CVPR2017。开源代码地址:

  • Tensorflow版本:https://github.com/tensorflow/models/tree/master/research/deeplab
  • Pytorch版本:https://github.com/open-mmlab/mmsegmentation/tree/master/configs/deeplabv3

1.动机

在使用CNN处理图像分割任务时,有2个难点:

(1)若使用连续的池化操作或步长大于1的卷积操作来提取全局上下文特征,会丢失细节信息,从而影响图像分割效果。

(2)如何对不同尺寸的目标提取特征。

作者指出,使用空洞卷积能有效地解决上述2个问题。在使用空洞卷积时,作者增加了一些工程上的优化,并且对空洞卷积的串行、并行结构进行了实验,提出了DeepLabv3网络用于语义分割任务。

2.使用空洞卷积提取特征

空洞卷积的计算示意图如下:

图1

图1

空洞卷积相当于对卷积核进行上采样操作,用rate控制上采样率,rate=1时的空洞卷积是普通卷积。通过控制rated的值,可以控制卷积操作的感受野。

空洞卷积并不增加可学习参数的情况,因此,使用空洞卷积时,仍然可以使用原始模型在ImageNet数据集上的预训练权重。

**定义output_stride为网络输入图像尺寸与输出feature map尺寸的比值。**在用于分类任务的CNN中,全连接层或全局池化层之前的feature map尺寸一般为输入图像尺寸的1/32,因此output_stirde=32。

若想让网络输出的feature map的output_stride=16,可以将原网络中最后一个下采样操作(比如池化或者步长为2的卷积)的步长设置为1,然后将后续的卷积替换为rate=2的空洞卷积。这样既可以让网络有比较大的输出feature map,还能保证足够大的感受野,同时仍可复用原模型中的权重。

3.空洞卷积的串联

图2

图2

复制多次ResNet中的block4,将它们串联的网络后面,如图2(a)所示。在该结构中,每个block有3个 3 × 3 3 \times 3 3×3卷积,除末尾的block以外,每个block中最后1个卷积的步长为2,这样的网络结构能够增加感受野,将整张图像的信息总结为尺寸很小的feature map。这种结构的缺点是丢失了细节信息

在图2(b)中,作者使用了空洞卷积,用空洞卷积来补偿不使用下采样导致的无法提取全局特征的问题。从Block3以后,每当需要进行一次下采样操作时,均通过让rate变为原来2倍的空洞卷积代替下采样操作。

Multi-Grid空洞卷积Block 为了进一步增加感受野,作者引入了Multi-Grid的概念。定义  Multi_Grid  = ( r 1 , r 2 , r 3 ) \text { Multi\_Grid }=\left(r_1, r_2, r_3\right)  Multi_Grid =(r1,r2,r3)为unit rate,每个Block中3个空洞卷积的rate为图2(b)中的rate值与Multi_Grid相乘。比如:若  Multi_Grid  = ( 1 , 2 , 4 ) \text { Multi\_Grid }=\left(1, 2, 4\right)  Multi_Grid =(1,2,4),对于上图Block4中的3个卷积操作,rate分别为 2 ⋅ ( 1 , 2 , 4 ) = ( 2 , 4 , 8 ) 2 \cdot(1,2,4)=(2,4,8) 2(1,2,4)=(2,4,8)

4.空洞卷积的并联

图3

图3

空洞卷积的并联结构(Atrous Spatial Pyramid Pooling,简称ASPP)是由论文《Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs》提出的。ASPP可以提取多个尺度的特征,以提高图像分割性能。

若想要进一步提取图像的全局上下文特征,不断增加空洞卷积的rate是不可取的,当rate很大时,会导致相当一部分权重作用于feature map的padding区域,这样降低了特征提取的效率。因此作者在原始ASPP的基础上,增加了1个额外的global average pooling(全局平均池化)操作,global average pooling的输出经过256通道的 1 × 1 1 \times 1 1×1卷积和BN操作,将输出的feature map上采样至合适的尺寸,便于与ASPP中其他空洞卷积输出的feature map进行concat操作。

如图3所示,ASPP包含如下结构:

(1)1个 1 × 1 1 \times 1 1×1卷积和3个 3 × 3 3 \times 3 3×3的空洞卷积,rate的值分别是 ( 6 , 12 , 18 ) (6,12,18) (6,12,18)

(2)global average pooling提取全局特征

ASPP的所有分支的输出feature map先进行concat,然后经过 1 × 1 1 \times 1 1×1卷积和BN操作,最后再经过1个 1 × 1 1 \times 1 1×1卷积输出分割结果。

此外,相比于原始的ASPP,作者在ASPP的卷积中加入了BN结构,以提高网络的分割性能。

5.实验结果

5.1 训练

以下为作者在PASCAL VOC2012分割数据集上的训练设置。

网络结构 以在ImageNet数据集上预训练过的ResNet为基础,增加额外的Block并使用空洞卷积。

学习率设置 使用poly学习率衰减策略,每次迭代的学习率是初始学习率乘以 ( 1 −  iter   max_iter  ) power  \left(1-\frac{\text { iter }}{\text { max\_iter }}\right)^{\text {power }} (1 max_iter  iter )power ,power的值为0.9。

BN的学习 为了提高BN中参数的学习效果,需要令batch size大一些,因此刚开始训练时,令output_stride=16,减少网络的显存占用,以提高训练的batch size,这里batch size为16。当训练完30K次迭代后,固定BN的参数,令output_stride=8,此时网络中某些feature map的尺寸会大一些,因此会占用更多的显存。之所以要使用output_stride=8继续训练,是因为若使用output_stride=16一直训练,会导致网络的输出比较粗糙,会降低分割性能。需要特别指出的是,output_stride值为16到8的切换,是通过用空洞卷积代替下采样操作实现的,而空洞卷积只是在普通卷积的卷积核中增加0,因此仍然可以复用普通卷积的可学习参数,不会引入额外的可学习参数。

上采样网络输出 当output_stride=8时,上采样网络的输出结果,使其与ground truth的尺寸一致,然后再计算损失,这样可以最大限度地保留ground turth的细节;而不是对ground truth下采样使其与网络输出结果尺寸一致。

数据增强 在训练时使用了随机缩放、水平随机翻转进行数据增强。

5.2 结果

串联结构在PASCAL VOC2012验证集上的结果如下图所示(在训练时令output_stride=16)

图4

图4

并联结构在PASCAL VOC2012验证集上的结果如下图所示(在训练时令output_stride=16)

图5

图5

在OS=8且使用MS和Flip时,并联结构的性能(79.77%)高于串联结构(79.35%),因此作者使用并联结构与其他语义分割算法对比。

在训练时先令output_stride=16,然后改变output_stride的值为8,针对困难样本使用了bootstrapping方法,在PASCAL VOC2012测试集上的结果如下图所示。图中的DeepLabv3-JFT表示使用了ImageNet和JFT-300M这2个数据集的预训练权重。

图6

图6

关于实验设置细节、消融实验以及在其他数据集测试的详细内容,请参考原文。

如果你对计算机视觉领域的目标检测、跟踪、分割、轻量化神经网络、Transformer、3D视觉感知、人体姿态估计兴趣,欢迎关注公众号一起学习交流~

在这里插入图片描述

欢迎关注我的个人主页,这里沉淀了计算机视觉多个领域的知识:https://www.yuque.com/cv_51

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

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

相关文章

【Spring 入门教程3】

Spring_day03 🌈博客主页:屠一乐的博客 📅 发文时间:2023.1.3 🎈 一定存在只有你才能做成的事 🌹 博主水平有限,如有错误,欢迎指正 欢迎各位👍收藏💎评论✉ …

mysql简介

一.mysql简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System&a…

TensorFlow之过拟合与欠拟合-3

1 基本概念 过度拟合(overfit) 正则化(regularization) L1正则化(L1 regularization) L2正则化(L2 regularization) 删除正则化(dropout regularization&#xff09…

【计组】异常、CPU指令集--《深入浅出计算机组成原理》(五)

课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 一、异常 (一)异常 异常其实是一个硬件和软件组合到一起的处理过程。异常的发生和捕捉,是在硬件层面完成的。但是异常的处理,是由软件来完成的。 …

【并发编程十】c++线程同步——条件变量(condition_variable)

【并发编程十】c线程同步——条件变量(condition_variable)一、互斥二、条件变量1、为何要引入条件变量?2、不使用条件变量3、使用条件变量3.1、互斥锁有什么问题?3.2、条件变量3.3、条件变量成员函数3.4、demo三、future四、信号量简介&…

【并发编程九】c++线程同步——互斥(mutex)

【并发编程九】c线程同步——互斥(mutex)一、互斥1、mutex1.1、mutex1.2、 lock_guard1.3、 RAII2、std::recursive_mutex3、std::shared_mutex、std::shared_lock、std::unique_lock4、std::scoped_lock二、条件变量三、future四、信号量简介&#xff1…

chrony服务器

Chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件。它能让计算机保持系统时钟与时钟服务器(NTP)同步,因此让你的计算机保持精确的时间,Chrony也可以作为服务端软件为其他计算机提供时间同步服务。 Chrony由两个程序…

【嵌入式Linux环境搭建-10】tftp服务安装、双网卡并行

10.tftp服务安装 板子有有线网卡,需有线连接到电脑 主机安装TFTP服务 $ sudo apt-get install xinetd tftpd tftp $ sudo vim /etc/xinetd.d/tftp /*添加下面内容, service tftp { protocol udp port 69 socket_type dgram wait …

aws lambda 理解RIC和RIE构建和测试容器镜像并通过cdk部署lambda函数

参考资料 AWS Lambda 的新功能 — 容器映像支持 快速构建基于 Lambda 容器镜像的 OCR 应用 利用 Lambda 容器镜像搭建分布式压测引擎 lambda容器镜像构建 可以将 Lambda 函数打包和部署最大 10 GB 的容器映像,轻松构建和部署依赖于大量依赖项的更大型工作负载 …

【Java核心技术】创建多线程

1、多线程的概述 什么是线程&#xff1f; 线程(thread)是一个程序内部的一条执行路径。 我们之前启动程序执行后&#xff0c;main方法的执行其实就是一条单独的执行路径。 public static void main(String[] args) {// 代码...for (int i 0; i < 10; i) {System.out.prin…

《柳叶刀》:约20%中国男性死亡可归因于吸烟

*仅供医学专业人士阅读参考 吸烟喝酒可谓众所周知的两大“健康刺客”。一首歌名为《给我一杯酒》中的歌词唱到“给我一杯酒&#xff0c;再给我一只烟&#xff0c;说走就走&#xff0c;我有的是时间”&#xff0c;传唱度极高&#xff0c;甚至还一度成为短视频平台的最热门的BGM之…

概论_第2章_重点内容__随机变量函数的概率分布

一 定义 概括地说&#xff1a; 随机变量Y是随机变量X的函数。 设g(x) 是一给定的连续函数&#xff0c; 称Yg(X) 为随机变量X的一个函数&#xff0c; Y也是一个随机变量。当X取值 时&#xff0c;Y取值 . ~~~~~~~~~~~~~~ 本文讨论连续型随机变量函数。 定理1: 设X为连续型…

Appium环境搭建及元素定位

01 Appium简介 Appium是一个开源测试自动化框架&#xff0c;可用于原生&#xff0c;混合和移动Web应用程序测试。它使用WebDriver 协议驱动iOS&#xff0c;Android和Windows应用程序。 01 环境搭建步骤 Appium环境安装&#xff1a; 第一步 安装 appium 桌面版客户端 Appium…

Linux挂载磁盘命令

需求&#xff1a; 只有一个硬盘&#xff0c;创建多个挂载点 参考&#xff1a;linux如何实现挂载—linux_是小明同学啊的博客-CSDN博客_linux挂载 1 查看当前挂载情况 执行 df -h&#xff0c; 查看当前 / 根目录下挂载的分区名&#xff0c;在下图中为倒数第三行&#xff0c; …

html练习

1. 2. 3. <h1>各科小常识</h1> <h3>语文</h3> <p> 三国演义是中国四大古典名著之一&#xff0c;元末明初小说家罗贯中所著。是中国第一部章回体历史演义的小说&#xff0c;描写了从东汉末年到西晋初年近100年的历史风云。</p> <hr&g…

Ubuntu20.04 LTS 安装 ros Noetic 树莓派4/PC

Ubuntu 20.04 LTS 安装树莓派系统. 主要参考了这两篇文章&#xff1a; https://blog.csdn.net/liangforcold/article/details/126385774 https://blog.csdn.net/yangcunbiao/article/details/123056806 https://blog.csdn.net/duping812/article/details/110391081 1、下载安…

【前端-NPM私服】内网使用verdaccio搭建私有npm服务器-docker搭建verdaccio流程

目录一、npm私服是什么1. 定义2. 为什么需要npm私服二、npm私服如何使用1. 链接到npm私服2. 注册私服账号3. 发布组件到私服4. 关联LDAP服务5. 提高下载速度三、私服搭建方案四、docker搭建Verdaccio流程1. 拉镜像2. 创建卷3. 启动容器4. 软链接卷到统一的目录5. 配置Verdaccio…

【node.js】npm包管理工具的使用

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;node.jsx中npm包管理工具的基础使用&#xff0c;包与依赖关系的介绍 下图为本文的核心 目…

rmq 主备自动切换模式

https://rocketmq.apache.org/zh/docs/deploymentOperations/16autoswitchdeploy/ https://github.com/apache/rocketmq/blob/develop/docs/cn/controller/design.md controller 端 leader选举 主备自动切换模式就是controller模式&#xff0c;controller可以嵌入name serve…

ccc-sklearn-12-线性回归(2)

一、非线性问题&#xff1a;多项式回归 主要探讨&#xff1a;通过线性回归解决非线性问题 数据的线性与非线性 通常情况下&#xff0c;分类问题中决策函数往往是一个分段函数&#xff0c;这个函数明显不满足可以用一条直线进行表示的属性&#xff0c;因此分类问题中特征与标签[…