图像分割deeplab系列

news2024/9/30 21:29:08

DeepLab系列是谷歌团队提出的一系列语义分割算法。DeepLab v1于2014年推出,并在PASCAL VOC2012数据集上取得了分割任务第二名的成绩,随后2017到2018年又相继推出了DeepLab v2,DeepLab v3以及DeepLab v3+。DeepLab v1的两个创新点是空洞卷积(Atros Convolution)和基于全连接条件随机场(Fully Connected CRF)。DeepLab v2的不同之处是提出了空洞空间金字塔池化(Atros Spatial Pyramid Pooling,ASPP)。DeepLab v3则是对ASPP进行了进一步的优化包括添加 1×1 卷积,BN操作等。DeepLab v3+则是仿照U-Net的结构添加了一个向上采样的解码器模块,用来优化边缘的精度。下面我们依次介绍这四个算法。

1. DeepLab v1

DeepLab v1有两个核心点,即:空洞卷积和CRF。它首先将VGG的普通卷积替换为空洞卷积得到分隔图,在通过CRF将得到的分割图进行后处理优化,如图1所示。

1.1 空洞卷积

在全卷积网络中,Feature Map上像素点的感受野取决于卷积和池化操作。普通卷积的感受野每次只能增加两个像素,增长速度过于缓慢。传统卷积网络的感受野的增大一般采用池化操作来完成,但是池化操作在增大感受野的同时会降低图像的分辨率,从而丢失一些信息。而且对池化之后的图像在进行上采样会使很多细节信息无法还原,最终限制了分割的精度。

那么如何在不使用池化的情况下扩大感受野呢?空洞卷积应运而生。顾名思义,空洞卷积就是往卷积操作中加入“空洞”(值为0的点)来增加感受野。空洞卷积引入了扩张率(dilated ration)这个超参来制定空洞卷积上两个有效值之间的距离:扩张率为 r的空洞卷积,两个有效值之间有 r−1 个空洞,如图2所示。其中红色的点为有效值,绿色的放个为空洞。如图2.(a)所示,$r=1$是空洞卷积变为普通卷积。

扩张率为 � 的空洞卷积可以标识为式(1)。

如图2的(b)和(c)所示, r=1 和 r=3 的空洞卷积的感受野分别是 7×7 和 15×15 ,但是它们的参数数量依旧是 9 个。目前的深度学习框架对空洞卷积都支持的非常好,仅设置扩张率一个超参即可。

1.2 全连接条件随机场

1.3 DeepLab v1的网络结构

DeepLab v1采用了VGG-16作为基础架构,不同的是DeepLab将降采样的倍数从32 倍下降至 8 倍,它是通过将最后两个block的步长为 2 的max-pooling替换为步长为 1 的max-pooling(另一种说法是将max-pooling去掉)。

在DeepLab v1的论文中共提出了4个不同的网络结构,它们的的参数,准确率以及速度如表1。其中卷积的操作是指添加到网络中最后一层(fc6)的空洞卷积的超参。 从表中我们可以看出,DeepLab-CRF-LargeFOV(Field of View)无论是速度还是精度都表现比较优秀,因此也是被业内广泛采用的网络结构。

2. DeepLab v2

对比DeepLab v1,DeepLab v2依旧保持了图1的流程,即以空洞卷积和CRF为核心。DeepLab v2的改进点之一是将VGG-16替换成了残差网络。另外一个核心点便是引入了空洞空间金字塔池化(Atrous Spatial Pyramid Pooling,ASPP)。

2.1 ASPP

空间金字塔池化是在目标检测的经典算法SPP-Net[6]中提出的思想,它的核心思想是聚集不用尺度的感受野,ASPP的提出也是用于解决不同分割目标不同尺度的问题。它的网络结构如图3所示。

ASPP共提出了ASPP-S和ASPP-L两个不同尺度的ASPP,它们的不同点在扩张率的不同,两个ASPP的扩张率分别是 {2,4,8,12} 和 {6,12,18,24} 。在进行完空洞卷积后再增加两个 1×1 卷积进行特征融合,最后通过单位加得到最终的输出结果,如图4所示。在DeepLab v2中,Pool5之后的空洞卷积被替换为ASPP。

3. DeepLab v3

CRF在DeepLab v3中被移除,而这些都要得益于在网络层部分得到的优异表现,那么为什么DeepLab v3仅凭卷积网络就能达到由于DeepLab v2的效果呢,这得得益于它下面几点改进:

  1. 引入了Multi-Grid策略,即多次使用空洞卷积核而不像在v1和v2中仅使用一次空洞卷积;
  2. 优化ASPP的结构,包括加入BN等。

3.1 Multi-Grid策略

DeepLab v3的Multi-Grid策略参考了[7]的HDC(hybrid dilated convolution )的思想,它的思想是在一个block中连续使用多个不同扩张率的空洞卷积。HDC的的提出是为了解决空洞卷积可能会产生的gridding问题(图5)。这是因为空洞卷积在高层使用的扩张率变大时,它对输入的采样会变得很稀疏,进而导致丢失一些局部信息。而且会丢失一些局部相关性反而捕获了长距离一些语义上不相关的信息。

Gridding产生的原因是因为连续的空洞卷积使用了相同的扩张率。在图6.(a)中,连续使用了三个 r=2 的空洞卷积,那么对中心点分类结果的影响则源自于周围分连续的像素点。HDC的原理是对连续的空洞卷积使用不同的扩张率,如图6.(b)中使用的扩张率依次是 (1,2,3) ,那么影响中心点类别的则是连续的一个区域,因此也更容易产生连续的分割效果。同时因为使用了HDC后感受野变得更大了,一定程度上也可以提升模型的分割效果。

在DeepLab v3中,multi-grid的策略是指每个block的三个扩张率由multi-grid参数和unit-rate参数计算而来,例如 Multi-Grid=(1,2,4) ,unit_rate=2 ,那么这个block的三个空洞卷积的扩张率依次等于 2×(1,2,4)=(2,4,8) 。作者设计了一组对照实验来优化multi-gird的参数值,最终得到最优的结果是 (1,2,1) 。

3.2 DeepLab v3的ASPP

作者通过实验发现,随着空洞卷积的扩张率的增大,卷积核中有效的权重越来越少,因为随着扩张率的变大,会有越来越多的像素点的计算没法使用全部权重。当扩张率足够大时,只有中间的一个权重有作用,这时空洞卷积便退化成了 1×1 卷积。这里丢失权重的缺点还是其次,重要的丢失了图像全局的信息。

为了解决这个问题,DeepLab v3参考ParseNet[8]的思想,增加了一个由来提升图像的全局视野的分支。具体的说,它先使用GAP将Feature Map的分辨率压缩至 1×1 ,再使用 1×1 卷积将通道数调整为 256 ,最后再经过BN以及双线性插值上采样将图像的分辨率调整到目标分辨率。因为插值之前的尺寸是 1×1 ,所以这里的双线性插值也就是简单的像素复制。

DeepLab v3的另外一个分支则是由1个 1×1 卷积核三个扩张率依次为 (6,12,18) 的 3×3 空洞卷积组成。最后两个分支通过拼接操作组合在一起,再通过一个 1×1 卷积将通道数调整为 256 ,如图7所示。

3.3 DeepLab v3的网络结构

DeepLab v3也是使用残差网络作为骨干网络,它的Block-1到Block-4直接复制的残差网络的原始结构,然后又把block4复制了3次,得到了block5-7,它们的不同是使用了不同的扩张率,如图8所示。

4. DeepLab v3+

到目前为止,DeepLab系列都是在降采样8倍的尺度上进行预测的,导致了边界效果不甚理想。考虑到卷积网络的特征,DeepLab v3的网络的特征并没有包含过多的浅层特征,为了解决这个问题,DeepLab v3+借鉴了FPN等网络的encoder-decoder架构,实现了Feature Map跨block的融合。DeepLab v3+的另一个改进点在于使用了分组卷积来加速。下面我们详细介绍这两个改进

4.1 Encoder-Decoder架构

DeepLab v3+使用DeepLab v3作为Encoder,我们重点关注它的解码器模块。它分成7步:

  1. 首先我们先通过编码器将输入图像的尺寸减小16倍;
  2. 使用 1×1 卷积将通道数减小为 256 ,后再接一个BN,ReLU激活函数和Dropout;
  3. 使用双线性插值对对齐进行上采样 4 倍;
  4. 将缩放$4$倍处的浅层的特征依次经过 1×1 卷积将通道数减小为 48 ,BN,ReLU;
  5. 拼接3和4的Feature Map;
  6. 经过两组 3×3 卷积,BN,ReLU,Dropout;
  7. 上采样4倍得到最终的结果。

4.2 DeepLab v3+的Xception

这一部分的工作则是受到了可变形卷积[11]的影响,它们提出的基于Xception[10]的改进的网络结构叫做Aligned Xception(图10),DeepLab v3+的改进如下:

  1. Entry flow保持不变,但是增加了更多的Middle flow;
  2. 将步长为2的max-pooling替换为深度可分离卷积,这样也便于随时替换为空洞卷积;
  3. 在深度可分离卷积之后增加了BN和ReLU。

DeepLab v3+的Xception结构如图11所示。

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

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

相关文章

西门子S7-1200直接连接MySQL数据库

最近项目上有个需求,要把采集的数据存储到数据库中,当前西门子有很多方法,必读IDB,还有通过WINCC的脚本,第三方的软件等等,但是随着发展,有些需求希望设备直接到数据库,比如云端的RD…

3D人体姿态估计

3D人体姿态估计是指通过算法对输入的图像或视频进行分析,推断出人体的三维姿态信息。该技术可以应用于许多领域,如虚拟现实、运动分析、人机交互等。 1. 算法原理: 3D人体姿态估计利用深度学习模型作为算法的核心,通过网络学习人…

redis缓存雪崩、穿透和击穿

缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机或者大量缓存集中在某一个时间段失效。缓存挂了,此时 1 秒 5000 个请求全部落数据库,…

Java常用类---日期时间类

日期时间类 Date类 简介 在Java中,Date类用来封装当前的日期和时间。Date类提供两个构造函数来初始化对象,如下所示。 通过Date() 使用当前日期和时间来初始化对象。 通过Date(long millisec) 来初始化对象,其中的参数是从1970年1月1日起…

【数字电子技术课程设计】多功能数字电子钟的设计

目录 摘要 1 设计任务要求 2 设计方案及论证 2.1 任务分析 2.1.1 晶体振荡器电路 2.1.2 分频器电路 2.1.3 时间计数器电路 2.1.4 译码驱动电路 2.1.5 校时电路 2.1.6 整点报时/闹钟电路 2.2 方案比较 2.3 系统结构设计 2.4 具体电路设计 3 电路仿真测试及结…

必须掌握的100+个Linux命令大全【持续更新中】

别有一番风趣的alias … note:: 寒蝉凄切,对长亭晚,骤雨初歇。 柳永《雨霖铃》 Linux alias命令用于设置指令的别名,可以将比较长的命令进行简化。 默认情况下会输出当前的设置: $ alias lls -lah lals -lAh llls -lh lsls --…

【ELK 学习】ElasticSearch

ELK:ElasticSearch存储,Logstash收集,Kibana展示 版本较多,使用时需要版本匹配,还需要和mysql版本匹配(elastic官网给了版本对应关系) 本次使用的版本es6.8.12 filebeat 轻量级的数据收集工具 …

时间序列数据库选型: influxdb; netdiscover列出docker实例们的ip

influxdb influxdb: 有收费版本、有开源版本 influxdb 安装、启动(docker) docker run -itd --name influxdb-dev -p 8086:8086 influxdb #influxdb的web客户端(端口8003)被去掉了 #8006是web-service端口#docker exec -it influxdb-dev bashinfluxdb 自带web界面 从后面的…

揭秘HTTP协议:深入了解互联网通信的核心!

文章目录 HTTPHTTP的消息结构HTTP 常用请求方法HTTP 状态码 HTTP HTTP 是超文本传输协议,HTTP是缩写,全称是 HyperText Transfer Protocol 超文本指的是 HTML、css、JavaScript和图片等,HTTP的出现就是为方便接收和发布超HTML页面&#xff0c…

基于Echarts的大数据可视化模板:厅店营业效能分析

目录 引言厅店营业效能分析的重要性大数据时代下的零售业基于Echarts的厅店营业效能分析案例分析目标和数据准备图表类型的选择和参数设置图表样式和交互功能的优化Echarts与大数据可视化Echarts库以及其在大数据可视化领域的应用优势开发过程和所选设计方案模板如何满足管理的…

私域2.0大变革:构建用户亲密关系,让你的品牌脱颖而出!

一、私域2.0发展趋势 1. 常态化:2024年,做私域已经成为“标配” 根据腾讯营销洞察(TMI)的研究,微信生态和自营APP等私域触点在中国市场的渗透率已经达到了惊人的96%。这意味着,超过四分之三的消费者在过去…

AES加解密模式

要想学习AES,首先要清楚三个基本的概念:密钥、填充、模式。 1、密钥 密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。 AES支持三种长度的密钥: 128位&#xff…

【Java】正则表达式( Pattern 和 Matcher 类)

快速入门 Java 提供了 java.util.regex 包,它包含了 Pattern 和 Matcher 类,用于处理正则表达式的匹配操作。 java.util.regex 包主要包括以下三个类: Pattern 类: pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共…

Vue面试之组件通信的方式总结(下篇)

Vue面试之组件通信的方式总结 $refprovide&injectprovideinject EventBus事件总线vuex 最近在整理一些前端面试中经常被问到的问题,分为vue相关、react相关、js相关、react相关等等专题,可持续关注后续内容,会不断进行整理~ 在Vue框架中&…

PXE 高效批量网络装机

前提: 虚拟机恢复到初始化 调整网卡为vm1 关闭防火墙 安全linux systemctl stop firewalld vim /etc/selinux/config 配置IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 重启网卡 systemctl restart network 挂载磁盘 安装yum源 安装服务 yum install vs…

DETR tensorRT 的 C++ 部署

DETR tensorRT 的 C 部署 本篇说说DETR tensorRT 的 C 部署。 【完整代码、模型、测试图片】 1 导出 onnx 模型(建议先看) 方法1:导出DETR onnx并修改模型输出Gather层,解决tesorrt 推理输出结果全为0问题,参考【D…

代码随想录算法训练营第17天 | 110.平衡二叉树 + 257. 二叉树的所有路径 + 404.左叶子之和

今日内容 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 110.平衡二叉树 - Easy 题目链接:. - 力扣(LeetCode) 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为&#xff1…

【设计模式-03】Strategy策略模式及应用场景

一、简要描述 Java 官方文档 Overview (Java SE 18 & JDK 18)module indexhttps://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 & JDK 18)declaration: module: java.base, pa…

【生产者消费者模型的 Java 实现】

文章目录 前言传统派维新派 前言 题目:一个初始值为零的变量,多个线程对其交替操作,分别加1减1 实现步骤: 线程操作资源类判断,干活,通知防止虚假唤醒机制,即:多线程的判断需要用…

自旋框的使用

1. 自旋框 实例化 //实例化单精度自旋框QSpinBox* spinBox new QSpinBox(this);//实例化双精度自旋框QDoubleSpinBox* doubleSpinBox new QDoubleSpinBox(this);1.1 单精度自旋框 QSpinBox 1.1.1 单精度自旋框的基本函数 QSpinBox_QDoubleSpinBox Dialog.cpp #include "…