[语义分割] ASPP不同版本对比(DeepLab、DeepLab v1、DeepLab v2、DeepLab v3、DeepLab v3+、LR-ASPP)
1. 引言
1.1 本文目的
本文主要对前段时间学习的 ASPP 模块进行对比,涉及到的 ASPP 有:
- ASPP in DeepLab v2,简称 ASPP v2
- ASPP in DeepLab v3,简称 ASPP v3
- ASPP in DeepLab v3+,简称 ASPP v3+
- ASPP in MobileNet v3,简称 LR-ASPP
这里的 v1、v2 是与 DeepLab 的版本号对应,因此没有 v1 😬
1.2 语义分割大致流程
语义分割是计算机视觉中的一项重要任务,它的目标是对图像中的每个像素进行分类,将相同语义类别的像素标记为同一类别。下面是大致的流程:
流程说明:
-
输入图像:将待分割的图像作为输入。
-
选择语义分割模型:选择适合任务的语义分割模型,常用的模型包括 U-Net、SegNet、DeepLab 等。
-
加载预训练权重:如果可用,加载预训练模型的权重,这有助于提高分割性能。
-
进行图像预处理:对输入图像进行预处理,包括大小调整、归一化、数据增强等,以提高模型的鲁棒性和准确性。
-
使用模型进行推理:将预处理后的图像输入语义分割模型,进行推理得到像素级别的预测结果。
-
获取像素类别预测:从模型输出中获取每个像素的语义类别预测,通常使用 softmax 函数将预测转换为概率分布。
-
后处理与可视化:对预测结果进行后处理,可能包括阈值处理、连通组件分析等,以生成最终的分割结果。同时,可以将分割结果可视化,将不同类别的像素着色,以便观察和验证分割效果。
其实语义分割和分类任务是差不多的,都是属于比较简单的。
因为本文主要讲不同 ASPP,因此我们简化语义分割流程,并加入 ASPP 模块,如下图所示。
从图中我们可以知道,与分类任务相同,首先给模型输入 RGB 图片 I m a g e \mathrm{Image} Image,之后经过 Backbone 进行推理。值得注意的是,在分类任务中,我们可能直接通过 Backbone 加上一个分类头(Classification Head)就可以得到最终的结果了。但在语义分割中,我们不使用全部的 Backbone(一般而言,这里所说的 Backbone 是分类网络中 真正的Backbone + Classification Head),而是去除最后几层(一般是去掉 Classification Head)。
- 如上图所示,输入图片 I m a g e \mathrm{Image} Image 经过 Backbone 后输出一个 28 × 28 × 2048 28 \times 28 \times 2048 28×28×2048 的特征图 F 1 \mathcal{F}_1 F1。
- 之后再将 F 1 \mathcal{F}_1 F1 送入 ASPP 模块,得到 shape 为 28 × 28 × c h a n n e l b y c o n c a t e n a t e d 28 \times 28 \times \mathrm{channel \ by \ concatenated} 28×28×channel by concatenated 的 ASPP 输出特征图 F 2 \mathcal{F}_2 F2。
- 最后我们再将 ASPP 输出特征图 F 2 \mathcal{F}_2 F2 送入分割头(Segmentation Head),这个头一般会对特征图进行上采样和 softmax 计算,前者的目的是将特征图 F 3 \mathcal{F}_3 F3 的 [ H , W ] [H, W] [H,W] 恢复到输入图片 I m a g e \mathrm{Image} Image 的大小;后者的目的是得到每个像素所属的类别。
- 经过上述过程,我们就可以得到一个 shape 为 480 × 480 × n u m _ c l a s s e s 480 \times 480 \times \mathrm{num\_ classes} 480×480×num_classes 的最终特征图 F 3 \mathcal{F}_3 F3,这个最终特征图的宽度和高度与输入图片是一致的,但通道数变为 n u m _ c l a s s e s \mathrm{num\_ classes} num_classes。因此我们便可以知道图片中每个像素所属的类别,再经过一定的后处理就可以得到语义分割后的结果,即一张灰度图 F o u t \mathcal{F}_\mathrm{out} Fout(不同类别分别对应一个独特的像素值)。
因为 ASPP 一般会使用并行结构,并且最后会对不同分支的结果进行融合,因此 ASPP 输出特征图最后一个维度是 c h a n n e l b y c o n c a t e n a t e d \mathrm{channel \ by \ concatenated} channel by concatenated 🧐
通过上述对语义分割流程的描述,我们就知道语义分割的大致流程。接下来我们就可以学习不同 ASPP 的特点和不同了。
2. 各版本 ASPP 介绍
2.1 ASPP v2
参考博文:[语义分割] DeepLab v2(膨胀卷积、空洞卷积、多尺度信息融合、MSc、ASPP、空洞空间金字塔池化、Step学习率策略、Poly学习率策略)
在 DeepLab V2 首先提出 ASPP 概念,这个 ASPP 模块很像是 DeepLab V1 中 LargeFOV + MSc 的升级版(但额外加入了多尺度的特性),下面是 ASPP v2 的示意图。
ASPP v2 的结构非常清晰,就是在 Backbone 的输出特征图后并联四个分支,每个分支的第一层都是使用的膨胀卷积,但不同的分支使用的膨胀系数不同(dilate = [6, 12, 18, 24]
)(即每个分支的感受野不同,从而具有解决目标多尺度的问题)。因此每个分支的感受野是不一样的(膨胀系数越大,感受野越大),最终将 4 个分支的结果进行融合 ⊕ \oplus ⊕ 就使得 DeepLab v2 具有了解决多尺度的能力。
在 DeepLab v1 中,LargeFOV 本质上就是使用了膨胀卷积替换全连接层;MSc 就是 Multi-Scale 连接(但都是普通卷积,没有膨胀卷积),而 ASPP 是多分支,并且每个分支都使用了膨胀卷积,所以说,ASPP ≈ \approx ≈ LargeFOV + MSc。
2.2 ASPP v3
参考博文:[语义分割] DeepLab v3(Cascaded model、ASPP model、两种ASPP对比、Multi-grid、训练细节)
我们再来看下 DeepLab V3 中的 ASPP,即 ASPP v3 结构,如下图所示。
ASPP v3 中的膨胀卷积是经典的汉堡包结构:
Conv → BN → Activation
ASPP v3 有 5 个并行分支,分别是:
① 一个 1 × 1 1\times 1 1×1 的卷积层(普通卷积)
② ~ ④ 三个 3 × 3 3\times 3 3×3 的膨胀卷积层(膨胀率 r r r 是不同的)
⑤ 一个全局平均池化层(后面还跟有一个 1 × 1 1\times 1 1×1 的卷积层,然后通过双线性插值的方法还原回输入的 W
和 H
)。
关于最后一个全局池化分支作者说是为了增加一个全局上下文信息(Global Contextual Information)。
之后通过 Concat
的方式将这 5 个分支的输出进行拼接 concat
(沿着 channel
方向),最后再通过一个 1 × 1 1\times 1 1×1 的卷积层(普通卷积)进一步融合信息。
2.3 ASPP v3+
参考博文:[语义分割] DeepLab v3+(DeepLab v3 Plus、Backbone、Xception、MobileNet v2、Encoder、Decoder、ASPP、多尺度融合、膨胀卷积)
从图中可以看到,ASPP v3+ 其实和很相似,但有两点不同:
- 膨胀卷积中的膨胀系数不同
- 膨胀卷积使用的是深度可分离卷积
2.4 LR-ASPP
LR-ASPP 在 Backbone 输出上分成了两个分支,如下图所示:
- 【第一个分支】上面的分支通过一个简单的 1 × 1 1 \times 1 1×1 卷积(
bias=False
)汉堡包结构,即Conv -> BN -> ReLU
,得到一个输出特征图 F 1 \mathcal{F}_1 F1 - 【第二个分支】第二分支通过一个 核大小为 49 × 49 49 \times 49 49×49,步长为 [ 16 , 20 ] [16, 20] [16,20] 的全局平均池化层(AvgPooling Layer),之后再通过一个 1 × 1 1 \times 1 1×1 的普通卷积(
bias=False
) + Sigmoid,得到一个输出特征图 F 2 \mathcal{F}_2 F2
注意❗️:
- 根据观察源码, F 1 \mathcal{F}_1 F1 分支中的
ReLU
就是普通的ReLU
而非ReLU6
- F 2 \mathcal{F}_2 F2 分支中的
Bilinear Upsample
其实是不需要的(正常来说,通过 Sigmoid 层后得到的就是长度为 128 的向量) - F 2 \mathcal{F}_2 F2 分支中的
AdaptiveAvgPool2d -> 1×1 Conv -> Sigmoid
与 MobileNet v3 中提出的 Squeeze-and-Excitation(SE)注意力模块非常相似
- 【第一次融合】 F 1 ⊗ F 2 \mathcal{F}_1 \otimes \mathcal{F}_2 F1⊗F2 之后,经过双线性插值进行 2 倍上采样,之后再经过普通的 1 × 1 1 \times 1 1×1 卷积,得到输出特征图 F 3 \mathcal{F}_3 F3
- 【第三个分支】将 Backbone 中经过 8 倍下采样的特征图拿出来,经过 普通的 1 × 1 1 \times 1 1×1 卷积得到输出特征图 F 4 \mathcal{F}_4 F4
- 【第二次融合】 F 3 ⊕ F 4 = F 5 \mathcal{F}_3 \oplus \mathcal{F}_4 = \mathcal{F}_{5} F3⊕F4=F5,得到 LR-ASPP 的输出特征图。
3. ASPP 结构汇总
4. 不同 ASPP 准确率提升对比
Model | Backbone | Version | Before(%) | After(%) | Δ \Delta Δ | Dataset |
---|---|---|---|---|---|---|
DeepLab v2 | ResNet-101 | ASPP v2 | 74.87 | 76.35 | +1.48 | VOC 2012 |
DeepLab v3 | ResNet-101 | ASPP v3 | 77.21 | 78.51 | +1.3 | VOC 2012 |
DeepLab v3+ | Xception | ASPP v3+ | 79.17 | 79.93 | +0.76 | VOC 2012 |
MobileNetV3 LR-ASPP | MobileNetV3 Large | LR-ASPP | 71.91 | 72.37 | +0.46 | Cityscapes |
现在我们来具体分析每个模型的性能:
-
DeepLab v2:
- Backbone: ResNet-101
- Version: ASPP v2
- 在VOC 2012数据集上,训练之前准确率为74.87%,经过训练后提高到76.35%。经过训练后的性能提升了1.48个百分点。
-
DeepLab v3:
- Backbone: ResNet-101
- Version: ASPP v3
- 在VOC 2012数据集上,训练之前准确率为77.21%,经过训练后提高到78.51%。经过训练后的性能提升了1.3个百分点。
-
DeepLab v3+:
- Backbone: Xception
- Version: ASPP v3+
- 在VOC 2012数据集上,训练之前准确率为79.17%,经过训练后提高到79.93%。经过训练后的性能提升了0.76个百分点。
-
MobileNetV3 LR-ASPP:
- Backbone: MobileNetV3 Large
- Version: LR-ASPP
- 在Cityscapes数据集上,训练之前准确率为71.91%,经过训练后提高到72.37%。经过训练后的性能提升了0.46个百分点。
相关文章:

[语义分割] ASPP不同版本对比(DeepLab、DeepLab v1、DeepLab v2、DeepLab v3、DeepLab v3+、LR-ASPP)
1. 引言 1.1 本文目的 本文主要对前段时间学习的 ASPP 模块进行对比,涉及到的 ASPP 有: ASPP in DeepLab v2,简称 ASPP v2ASPP in DeepLab v3,简称 ASPP v3ASPP in DeepLab v3,简称 ASPP v3ASPP in MobileNet v3&am…...

anaconda创建虚拟环境在D盘
【看一看就行,又是挺水的一期(每一季都掺和一点子水分也挺好)】 一、创建: conda create --prefixD:\python37\py37 python3.7 这下就在D盘了: 二、激活刚刚那个环境: activate D:\pyhton37\py37 &…...

Java设计模式之工厂设计模式
简介 工厂模式是一种常见的设计模式,用于创建对象的过程中,通过工厂类来封装对象的创建过程。其核心思想是将对象的创建和使用分离,从而降低耦合度,提高代码的可维护性和可扩展性。工厂模式通常包括三种类型:简单工厂…...

uniapp使用阿里图标
效果图: 前言 随着uniApp的深入人心,我司也陆续做了几个使用uniapp做的移动端跨平台软件,在学习使用的过程中深切的感受到了其功能强大和便捷,今日就如何在uniapp项目中使用阿里字体图标的问题为大家献上我的一点心得࿰…...

20230803激活手机realme GT Neo3
20230803激活手机realme GT Neo3 缘起: 新买的手机:realme GT Neo3 需要确认: 1、4K录像,时间不限制。 【以前的很多手机都是限制8/10/12/16分钟】 2、通话自动录音 3、定时开关机。 4、GPS记录轨迹不要拉直线:户外助…...

Spring Cloud Feign+Ribbon的超时机制
在一个项目中(数据产品),需要对接企业微信中第三方应用。在使用 Feign 的去调用微服务的用户模块用微信的 code 获取 access_token 以及用户工厂信息时出现 Feign 重试超时报错的情况,通过此篇文章记录问题解决的过程。 一、问题重…...

使用docker 搭建nginx + tomcat 集群
创建3个Tomcat容器,端口分别映射到 8080,8081,8082,使用数据卷挂载,分别将宿主机目录下的 /opt/module/docker/tomcat3/ROOT1/,/opt/module/docker/tomcat3/ROOT2/,/opt/module/docker/tomcat3/ROOT2/ 挂载到 容器内部…...

从Spring的角度看Memcached和Redis及操作
目录 Memcached和Redis的区别 适用场景 Memcached配置使用 Redis配置使用 在SpringBoot的框架里,有直连Redis的SDK却没有Memcached的,可见相比地位。不过各有各的适应场景,Redis这个单线程模型确实非常强。 Memcached和Redis的区别 共同…...

【C语言学习】C语言的基础数据类型
一、数据类型 1.整型 short(短整型) int(整型 long(长整型) long long(长整型)2.浮点型 float(单精度型) double(双精度型) long double3.字符类型 char…...

使用AIGC工具提升安全工作效率
新钛云服已累计为您分享760篇技术干货 在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于: 开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、…...

HBase概述
HBase 一 HBase简介与环境部署 1.1 HBase简介&在Hadoop生态中的地位 1.1.1 什么是HBase HBase是一个分布式的、面向列的开源数据库HBase是Google BigTable的开源实现HBase不同于一般的关系数据库, 适合非结构化数据存储 1.1.2 BigTable BigTable是Google设计的分布式…...

el-popover全屏不显示(bug记录)
我做了一个el-table全屏展示的功能, 然后里面的el-popover在全屏后无法展示, 刚开始以为是写唯一的key或者ref, 发现写了也不行, 后来以为要写’:append-to-body“false”, 最后发现是我的外层的层级写得太高了; position: fixed; z-index: 9999; <div class"box"…...

react中使用redux-persist做持久化储存
某天下午折腾着玩的 – 笔记 安装相关依赖 npm install reduxjs/toolkit redux-persist redux react-redux// store.jsx import { configureStore, getDefaultMiddleware } from "reduxjs/toolkit"; import { persistStore, persistReducer } from "redux-per…...

【leetcode】203. 移除链表元素(easy)
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* Lis…...

InfiniBand、UCIe相关思考
InfiniBand、UCIe相关思考 内容1、InfiniBandInfiniBand是什么?InfiniBand的来历是什么?InfiniBand为什么重要?InfiniBand相较于Ethernet区别?同领域内还有其他哪些技术?InfiniBand中RDMA是种什么技术? 内容…...

[C++项目] Boost文档 站内搜索引擎(3): 建立文档及其关键字的正排 倒排索引、jieba库的安装与使用...
之前的两篇文章: 第一篇文章介绍了本项目的背景, 获取了Boost库文档 🫦[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…第二篇文章 分析实现了parser模块. 此模块的作用是 对所有文档html文件, 进行清理并汇总 🫦[C项目] …...

el-date-picker回显问题解决记录
el-date-picker回显问题记录 组件结构 <el-date-pickerv-model"time"type"datetimerange"range-separator"至"start-placeholder"开始日期"end-placeholder"结束日期"value-format"yyyy-MM-dd HH:mm:ss":defau…...

Linux中的特殊进程(孤儿进程、僵尸进程、守护进程)
一、孤儿进程 1)父进程退出,子进程不退出,此时子进程被1号(init)进程收养,变成孤儿进程。 2)孤儿进程会脱离终端控制,且运行在后端,不能用ctrlc杀死后端进程,…...

【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、讲解 💥1 概述 由于能源的日益匮乏,电力需求的不断增长等,配电网中分布式能源渗透率不断提高,且逐渐向主动配电网方…...

《cuda c编程权威指南》04 - 使用块和线程索引映射矩阵索引
目录 1. 解决的问题 2. 分析 3. 方法 4. 代码示例 1. 解决的问题 利用块和线程索引,从全局内存中访问指定的数据。 2. 分析 通常情况下,矩阵是用行优先的方法在全局内存中线性存储的。如下。 8列6行矩阵(nx,ny)(…...

mysql 、sql server 常见的区别
NULL 处理 MySQL IFNULL(col , val) SQL Server ISNULL(col,val) 表名、列名等 一般不推荐用保留字 ,如果非要保留字 MySQL 用用着重号,即 反引号 包括 select col from GROUP SQL Server 用用着重号…...

查找特定元素——C++ 算法库(std::find_if)
std::find_if函数在C++中的实际使用案例非常广泛,以下是一些常见的用法示例: 1、在容器中查找满足特定条件的元素: #include <iostream> #include <vector> #include <algorithm>bool isOdd(int num) {...

D3JS教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 D3是Data-Driven Documents的缩写,D3.js是一个基于数据管理文档的资源JavaScript库。 D3 是最有效的数据可视化框架之一。它允许开发人员在 HTML、CSS 和 SVG 的帮助下在浏览器中创建动态的交互式数据可视化。数据可视化是将过滤后的数据以图片和图形的形…...

Android入门教程||Android 架构||Android 应用程序组件
Android 架构 Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。 Linux内核 在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能,比如进程管理,内存管理,设…...

C语言二进制数据和16进制字符串互转
知识点:结构体中的“伸缩型数组成员”(C99新增) C99新增了一个特性:伸缩型数组成员(flexible array member),利用这项特性声明的结构,其最后一个数组成员具有一些特性。第1个特性是,该数组不会…...

技术复盘(5)--git
技术复盘--git 资料地址原理图安装配置基本命令分支命令对接gitee练习:远程仓库操作 资料地址 学习地址-B站黑马:https://www.bilibili.com/video/BV1MU4y1Y7h5 git官方:https://git-scm.com/ gitee官网:https://gitee.com/ 原理图 说明&am…...

GDAL C++ API 学习之路 (5) Spatial Reference System篇 OGRSpatialReference类
class OGRSpatialReference #include <ogr_spatialref.h> OGRSpatialReference 是 GDAL/OGR 库中的一个重要类,用于管理和操作地理空间数据的空间参考系统(Spatial Reference System,SRS)。它提供了一系列功能&…...

2023年华数杯数学建模C题思路代码分析 - 母亲身心健康对婴儿成长的影响
# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护, 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、 压力等,可能会对婴儿的认知、情…...

WebAgent-基于大型语言模型的代理程序
大型语言模型(LLM)可以解决多种自然语言任务,例如算术、常识、逻辑推理、问答、文本生成、交互式决策任务。最近,LLM在自主网络导航方面也取得了巨大成功,代理程序助HTML理解和多步推理的能力,通过控制计算…...

智慧~经典开源项目数字孪生智慧商场——开源工程及源码
深圳南山某商场的工程和源码免费赠送,助您打造智慧商场。立即获取,提升商场管理效能! 项目介绍 凤凰商场作为南山地区的繁华商业中心,提供多样化的购物和娱乐体验。通过此项目,凤凰商场将迈向更智能的商业模式。 本项目…...