[语义分割] ASPP不同版本对比(DeepLab、DeepLab v1、DeepLab v2、DeepLab v3、DeepLab v3+、LR-ASPP)

news2024/11/18 14:02:18

1. 引言

1.1 本文目的

本文主要对前段时间学习的 ASPP 模块进行对比,涉及到的 ASPP 有:

  1. ASPP in DeepLab v2,简称 ASPP v2
  2. ASPP in DeepLab v3,简称 ASPP v3
  3. ASPP in DeepLab v3+,简称 ASPP v3+
  4. ASPP in MobileNet v3,简称 LR-ASPP

这里的 v1、v2 是与 DeepLab 的版本号对应,因此没有 v1 😬

1.2 语义分割大致流程

语义分割是计算机视觉中的一项重要任务,它的目标是对图像中的每个像素进行分类,将相同语义类别的像素标记为同一类别。下面是大致的流程:

在这里插入图片描述

流程说明

  1. 输入图像:将待分割的图像作为输入。

  2. 选择语义分割模型:选择适合任务的语义分割模型,常用的模型包括 U-Net、SegNet、DeepLab 等。

  3. 加载预训练权重:如果可用,加载预训练模型的权重,这有助于提高分割性能。

  4. 进行图像预处理:对输入图像进行预处理,包括大小调整、归一化、数据增强等,以提高模型的鲁棒性和准确性。

  5. 使用模型进行推理:将预处理后的图像输入语义分割模型,进行推理得到像素级别的预测结果。

  6. 获取像素类别预测:从模型输出中获取每个像素的语义类别预测,通常使用 softmax 函数将预测转换为概率分布。

  7. 后处理与可视化:对预测结果进行后处理,可能包括阈值处理、连通组件分析等,以生成最终的分割结果。同时,可以将分割结果可视化,将不同类别的像素着色,以便观察和验证分割效果。

其实语义分割和分类任务是差不多的,都是属于比较简单的。


因为本文主要讲不同 ASPP,因此我们简化语义分割流程,并加入 ASPP 模块,如下图所示。

在这里插入图片描述

从图中我们可以知道,与分类任务相同,首先给模型输入 RGB 图片 I m a g e \mathrm{Image} Image,之后经过 Backbone 进行推理。值得注意的是,在分类任务中,我们可能直接通过 Backbone 加上一个分类头(Classification Head)就可以得到最终的结果了。但在语义分割中,我们不使用全部的 Backbone(一般而言,这里所说的 Backbone 是分类网络中 真正的Backbone + Classification Head),而是去除最后几层(一般是去掉 Classification Head)。

  1. 如上图所示,输入图片 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
  2. 之后再将 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
  3. 最后我们再将 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 的大小;后者的目的是得到每个像素所属的类别。
  4. 经过上述过程,我们就可以得到一个 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 的卷积层,然后通过双线性插值的方法还原回输入的 WH)。

关于最后一个全局池化分支作者说是为了增加一个全局上下文信息(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+ 其实和很相似,但有两点不同:

  1. 膨胀卷积中的膨胀系数不同
  2. 膨胀卷积使用的是深度可分离卷积

2.4 LR-ASPP

LR-ASPP 在 Backbone 输出上分成了两个分支,如下图所示:

在这里插入图片描述

  1. 第一个分支】上面的分支通过一个简单的 1 × 1 1 \times 1 1×1 卷积(bias=False)汉堡包结构,即 Conv -> BN -> ReLU,得到一个输出特征图 F 1 \mathcal{F}_1 F1
  2. 第二个分支】第二分支通过一个 核大小为 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)注意力模块非常相似
  1. 第一次融合 F 1 ⊗ F 2 \mathcal{F}_1 \otimes \mathcal{F}_2 F1F2 之后,经过双线性插值进行 2 倍上采样,之后再经过普通的 1 × 1 1 \times 1 1×1 卷积,得到输出特征图 F 3 \mathcal{F}_3 F3
  2. 第三个分支】将 Backbone 中经过 8 倍下采样的特征图拿出来,经过 普通的 1 × 1 1 \times 1 1×1 卷积得到输出特征图 F 4 \mathcal{F}_4 F4
  3. 第二次融合 F 3 ⊕ F 4 = F 5 \mathcal{F}_3 \oplus \mathcal{F}_4 = \mathcal{F}_{5} F3F4=F5,得到 LR-ASPP 的输出特征图。

3. ASPP 结构汇总

在这里插入图片描述

4. 不同 ASPP 准确率提升对比

ModelBackboneVersionBefore(%)After(%) Δ \Delta ΔDataset
DeepLab v2ResNet-101ASPP v274.8776.35+1.48VOC 2012
DeepLab v3ResNet-101ASPP v377.2178.51+1.3VOC 2012
DeepLab v3+XceptionASPP v3+79.1779.93+0.76VOC 2012
MobileNetV3 LR-ASPPMobileNetV3 LargeLR-ASPP71.9172.37+0.46Cityscapes

现在我们来具体分析每个模型的性能:

  1. DeepLab v2:

    • Backbone: ResNet-101
    • Version: ASPP v2
    • 在VOC 2012数据集上,训练之前准确率为74.87%,经过训练后提高到76.35%。经过训练后的性能提升了1.48个百分点。
  2. DeepLab v3:

    • Backbone: ResNet-101
    • Version: ASPP v3
    • 在VOC 2012数据集上,训练之前准确率为77.21%,经过训练后提高到78.51%。经过训练后的性能提升了1.3个百分点。
  3. DeepLab v3+:

    • Backbone: Xception
    • Version: ASPP v3+
    • 在VOC 2012数据集上,训练之前准确率为79.17%,经过训练后提高到79.93%。经过训练后的性能提升了0.76个百分点。
  4. MobileNetV3 LR-ASPP:

    • Backbone: MobileNetV3 Large
    • Version: LR-ASPP
    • 在Cityscapes数据集上,训练之前准确率为71.91%,经过训练后提高到72.37%。经过训练后的性能提升了0.46个百分点。

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

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

相关文章

开发提测?

前言 开发提测是正式开始测试的重要关卡,提测质量的好坏会直接影响测试阶段的效率,进而影响项目进度。较好的提测质量,对提高测试效率和优化项目进度有着事半功倍的作用。如何更好的推进开发提高提测质量呢?下面小编结合自己项目…

攻防世界-web-lottery

题目描述:里面有个附件,是网站的源代码,还有一个链接,是线上的网站 主页告诉了我们规则: 1. 每个人的初始金额为20美元 2. 一支彩票2美元,挑选7个数字,根据匹配上的数字有不同的奖励 我们先体…

基于dynamorio自制反汇编小工具 instr_trace安装

目录 概述一、下载源码二、安装dynamorio1、安装依赖2、编译3、测试安装是否成功参考截图 三、安装instr_trace工具1、文件说明2、编译3、运行 四、生成的文件格式说明(1)mov指令(寄存器->寄存器)(2)mov…

用 Yara 对红队工具 “打标“

​前言: YARA 通常是帮助恶意软件研究人员识别和分类恶意软件样本的工具,它基于文本或二进制模式创建恶意样本的描述规则,每个规则由一组字符串和一个布尔表达式组成,这些表达式决定了它的逻辑。 但是这次我们尝试使用 YARA 作为一种扫描工…

ELK日志分析系统介绍及搭建(超详细)

目录 一、ELK日志分析系统简介 二、Elasticsearch介绍 2.1Elasticsearch概述 三、Logstash介绍 四、Kibana介绍 五、ELK工作原理 六、部署ELK日志分析系统 6.1ELK Elasticsearch 集群部署(在Node1、Node2节点上操作) 6.2部署 Elasticsearch 软件 …

Chrome 调试技巧

有时候,qa测试会忽然出问题,然后需要你刷新界面,按照他的操作再来一次。 下面介绍一个更好的办法。 可以让qa打开chrome里的这个选项 Pause on uncaught 是在遇到未try的错误时暂停 下面那个是在try的时候出错时暂停 chrome自动断点 是不是特…

latex subfloat出现双括号的问题

使用latex的subfloat插入子图,编译完以后出现双括号: 搞了很长时间没搞出来,在网上查阅资料得到,在加载包的部分把subfigure去掉(不知道为什么,我并没有使用subfigure包啊,这是在头部引用中引入…

【Linux】网络基础——宏观认识计算机网络

1 计算机网络背景 网络发展 独立模式: 计算机之间相互独立; 一开始,计算机发明出来之后,一台计算机处理完的数据,数据会保存在软盘(物理),通过人之间的相互通信,把计算机A处理完的数据存储到软…

使用frp实现多层代理

环境介绍 正文 Nmap对目标进行端口扫描 访问80端口 扫下目录 同时尝试一下爆破其它端口的服务 ftp、mysql、ssh 爆破无果,看一下扫描的目录 发现一个flag 重新再尝试登录ftp、mysql、ssh,结果还是不对 访问/index.php/login/ Think5工具尝试&#xff…

transpose代码学习

论文:TransPose: Keypoint Localization via Transformer Sen Yang Zhibin Quan Mu Nie Wankou Yang* School of Automation, Southeast University, Nanjing 210096, China {yangsenius, 101101872, niemu, wkyang}seu.edu.cn 下载地址:https://arxiv.o…

Robot Framweork之UI自动化测试---AutoItLibrary封装上传文件

在实现UI自动化的过程中,遇到了文件上传的场景,涉及到Windows系统窗口,这就需要用到AutoItLibrary库。 一、文件上传流程 1、点击上传 2、输入文件路径,点击确定 二、上传功能自动化脚本 一)点击上传 直接使用click e…

day49-Springboot

Springboot 1. Springboot简介 1.1 简介:Springboot来简化Spring应用开发的一个框架,约定大于配置 1.2 优点: 可以快速的构建独立运行的Spring项目; 框架内有Servlet容器,无需依赖外部,所以不需要达成w…

如果你也能认识并使用这个低代码平台,那真的是泰酷辣——iVX低代码平台

低代码技术起源是比较悠久的了,尤其是在近些年,随着技术的演进,低代码平台逐渐成为热门趋势。这些平台通过简化应用程序开发流程,减少手动编码,使非专业开发人员也能快速构建复杂应用。为我们的敏捷开发和高效生产贡献…

陪诊小程序开发:让就医更便捷、贴心的选择

随着人们生活节奏的加快和社会压力的增大,很多人在面临就医时会感到焦虑和困惑。而陪诊小程序的开发则为用户提供了贴心的陪诊服务。本文将介绍陪诊小程序开发的功能,让您了解为什么选择陪诊小程序。   1. 预约就医   陪诊小程序的开发使得用户可以随…

C++ 多文件结构和编译预处理命令

1. C程序的一般组织结构 C源程序的结构基本上都是由3个部分构成:类的定义、类的成员的实现和主函数。因为所编写的程序比较小,所以这三个部分都写在了同一个文件当中。在规模比较大的项目中,往往需要多个源程序文件,每个源程序文…

VisualStudioWindows下 远程调试

前置条件 1、调试方与被调试方,以下简称调试方为A,被调试方为B。A与B双方能相互ping通 2、B需要运行RemoteDebugger服务,该程序位于C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Remote Debugger下。 我这里是安装…

创建邮件服务器(小微企业)

这里写自定义目录标题 目的硬件选型:软件选型:coremail (商业版本)postfixumail免费开源版本新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适…

在浏览器输入 URL 回车之后发生了什么?

注意:本文的步骤是建立在,请求的是一个简单的 HTTP 请求,没有 HTTPS、HTTP2、最简单的 DNS、没有代理、并且服务器没有任何问题的基础上,尽管这是不切实际的。 大致流程说明 URL 解析 DNS 查询 TCP 连接 服务器处理请求 浏览器…

Grafana制作图表-自定义Flink监控图表

简要 有时候我们在官网的Grafana下载的图表是这样的,如下图 #算子的处理时间,就是处理数据的延迟数据抓取,这个的说明看下下面的文章 metrics.latency.interval: 60 metrics.reporter.promgateway.class: org.apache.flink.metrics.prometh…

react-router细节补充

一、react-router-dom v5路由信息获取 HomeHead.jsx: import React from "react"; import {Link, withRouter, useHistory, useLocation, useRouteMatch} from react-router-dom import styled from "styled-components";const NavBox styled.nava {mar…