[语义分割] LR-ASPP(MobileNet v3、轻量化、16倍下采样、膨胀卷积、ASPP、SE)

Searching for MobileNetV3
  • 论文地址:Searching for MobileNetV3
  • Pytorch 实现代码
    • https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_segmentation/lraspp
    • MobileNet v3 LR-ASPP

这篇论文就是 MobileNet v3 的论文 😂,LR-ASPP 指的是 “Lite Reduced Atrous Spatial Pyramid Pooling”,是 MobileNetV3 中用于语义分割任务的一种高效分割解码器

LR-ASPP:Lite Reduced Atrous Spatial Pyramid Pooling,轻量化简减少空洞空间金字塔池化

0. LR-ASPP 概况

LR-ASPP 和 DeepLab V3 中的 ASPP 都是用于语义分割任务的分割解码器,但它们在一些方面有不同的创新点和设计思路。

  1. 简化结构:LR-ASPP 相对于传统的 ASPP 结构进行了简化。传统的 ASPP 通常包含多个并行的卷积分支(DeepLab v2 中有 4 个,DeepLab v3 中有 5 个),每个分支使用不同膨胀率的膨胀卷积来捕捉不同尺度的上下文信息。而 LR-ASPP 通过减少分支数量和膨胀卷积的膨胀率,降低了计算复杂性,使得模型更适合在资源受限的移动设备上使用。

  2. 节省计算资源:由于在移动设备上计算资源有限,LR-ASPP 的设计考虑了计算效率的问题。相比于 DeepLab V3 中的 ASPP,LR-ASPP 在保持一定的性能的前提下,减少了计算量,使得模型能够更好地适应移动设备的硬件限制。

  3. 高效的语义分割:LR-ASPP 在移动设备上表现出较好的分割性能。它能够有效地捕捉不同尺度的上下文信息,从而更准确地对图像中的像素进行语义分类。同时,由于其计算效率的优势,LR-ASPP 在移动设备上可以实现实时的语义分割,适用于许多实际应用场景。

总体而言,LR-ASPP 是 MobileNetV3 中的一项创新,它在计算效率和性能之间取得了良好的平衡,为移动设备上的语义分割任务提供了高效而有效的解决方案。而 DeepLab V3 中的 ASPP 则是传统 ASPP 的一种改进版本,它在大规模计算资源的情况下可以取得较好的性能

  • ASPP:运算量大
  • LR-ASPP:运算量小

0. Abstract

我们提出了下一代基于互补搜索技术(complementary search techniques)和新颖架构设计的 MobileNets。MobileNetV3 通过硬件感知的网络架构搜索(NAS)和 NetAdapt 算法的结合,以及新颖的架构优化,针对移动手机 CPU 进行了优化。

本文探讨了自动化搜索算法和网络设计如何共同发挥作用,以提高整体的技术水平。通过这个过程,我们发布了两个新的 MobileNet 模型:①MobileNetV3-Large和 ②MobileNetV3-Small,分别用于高资源和低资源使用情况。然后,我们对这些模型进行了调整,并应用到目标检测语义分割任务中。

对于语义分割任务(或任何密集像素预测任务),我们提出了一种新的高效分割解码器 —— Lite Reduced Atrous Spatial Pyramid Pooling(LR-ASPP)。在移动分类、检测和分割任务中,我们实现了新的技术水平。

  • 【分类任务】与 MobileNetV2 相比,MobileNetV3-Large 在 ImageNet 分类上的准确率提高了 3.2%,同时减少了 15% 的延迟。MobileNetV3-Small 在准确率提高了 4.6% 的同时,减少了 5% 的延迟。
  • 【目标检测】在 COCO 检测任务中,MobileNetV3-Large 的检测速度比 MobileNetV2 快 25%,准确率大致相同。
  • 【语义分割】在 Cityscapes 分割任务中,MobileNetV3-Large LR-ASPP 的速度比 MobileNetV2 R-ASPP 快 30%,准确率相似。
  • NAS(Neural Architecture Search,神经网络结构搜索)算法是一种自动化搜索神经网络结构的方法。它旨在通过计算机程序自动探索和优化神经网络的结构,以获得更好的性能和效率。
    传统上,神经网络的结构是由人工设计的,通常需要领域专家根据经验和直觉进行手动设计。然而,随着深度学习的发展,神经网络结构日益复杂,人工设计变得愈发困难且耗时。为了解决这个问题,> NAS算法应运而生。
    NAS算法通过以下步骤来搜索和优化神经网络结构:①搜索空间定义;②架构评估;③搜索策略;④结果评估与迭代。
  • NetAdapt是一种用于神经网络模型自动压缩和优化的算法,旨在根据设备的资源限制自动适应网络结构,以实现更高效的推断过程。该算法由Google Brain团队提出,为移动设备和嵌入式系统等资源受限的环境下,深度学习模型的应用提供了更好的解决方案。它的主要步骤为:①搜索空间定义;②模型评估;③网络修剪;④微调和重复。通过这样的迭代搜索和优化过程,NetAdapt能够自动化地找到在给定资源约束下的最优神经网络结构,从而在移动设备上实现更高效的推断和运行。

1. 前言

ModelmIoUGlobal Pixel AccInference on CPU (sec)Params (M)
LR-ASPP MobileNetV3-Large57.991.20.32783.22
DeepLabV3 MobileNetV3-Large60.391.20.586911.03
FCN MobileNetV3-Large (not released)57.890.90.37025.05
DeepLabV3 ResNet5066.492.46.353139.64
FCN ResNet5060.591.45.014632.96

数据来源:Everything you need to know about TorchVision’s MobileNetV3 implementation

  • 从推理时间我们可以看到,以 ResNet-50 为 Backbone 的模型在 CPU 设备上的推理时间都很长,大约需要 5 ~ 6 秒,而一旦将 Backbone 替换为 MobileNet v3 系列,推理时间可以实现大幅度降低,只需要 0.3 ~ 0.6 秒,速度提升了大约 10 ~ 16 倍。
  • 从 mean IoU 指标上看,我们发现即便将 Backbone 替换为更轻量化的模型,mIoU 并没有大幅度降低,二者中的最佳模型 mIoU 相差仅 6.1%,最差模型的 mIoU 相差 2.7%,说明 MobileNet v3 作为 Backbone 在语义分割任务中表现相当不错。

综合来看,LR-ASPP MobileNetV3-Large 模型在资源受限的情况下能够在语义分割任务中取得相对较好的性能,并且具有更快的推断速度和较小的模型尺寸,适合在移动设备等资源有限的场景中使用。而使用 ResNet50 的 DeepLabV3 和 FCN 模型在性能上更优秀,但计算复杂度和模型尺寸较大,适用于性能要求较高且资源充裕的环境。

2. LR-ASPP 架构

在这里插入图片描述

Figure10. 基于MobileNetV3,提出的分割头部,Lite R-ASPP,在保持快速语义分割结果的同时,融合了多个分辨率的特征

MobileNet v3 的网络我们在之前有讲过,所以在此就不再赘述了,详情见 MobileNet系列 (v1 ~ v3) 理论讲解。在语义分割任务中,Backbone 为 MobileNet v3,但进行了一些改动:

  1. Backbone 不再进行 32 倍下采样,而是仅进行 16 倍下采样
  2. Backbone 中最后的几个 BottleNet 中使用膨胀卷积

在一般的语义分割任务,Backbone 通常会进行 8 倍下采样,而 MobileNet v3 LR-ASPP 为了使模型更加轻量化,于是进行了 16 倍 下采样。

接下来我们看一下分割头(Segmentation Head),也就是 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 的输出特征图。
  4. 之后需要进行 8 倍双线性插值上采样得到和我输入图片一样大小的单通道图片,即 F o u t \mathcal{F}_{\mathrm{out}} Fout

3. MobileNet v3 Large LR-ASPP 网络模型

在这里插入图片描述

在 Backbone 中不同字母的含义如下:

  • Input:输入特征图大小
  • Operator:算子名称
  • exp size:Bneck 中 Channel 提升大小
  • #out:输出特征图 Channel 大小
  • SE:是否使用 SE 注意力模块
  • NL:使用哪种激活函数
    • HS:Hard Sigmoid
    • RE:ReLU
  • s:stride 步长大小
    • s=1:不进行下采样
    • s=2:进行 2 倍下采样
  • d:Bneck 中的膨胀系数
    • d=1:普通卷积
    • d=2:膨胀卷积(dilate=2)

4. LR-ASPP 模型训练效果

在这里插入图片描述

学习率设置可能有些问题,跑了 100 个Epoch(没有使用预训练模型),mIoU 不太行。

知识来源

  1. https://www.bilibili.com/video/BV1LS4y1M76E

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

golang interface类型的nil

golang中interface变量,底层两个对象来存,一个是type、一个是value,只有type、value都为nil时,interface变量才是nil package mainimport ("fmt""reflect" )type People interface {Show() }type Student str…

【数据结构】带头+双向+循环链表(DList)(增、删、查、改)详解

一、带头双向循环链表的定义和结构 1、定义 带头双向循环链表,有一个数据域和两个指针域。一个是前驱指针,指向其前一个节点;一个是后继指针,指向其后一个节点。 // 定义双向链表的节点 typedef struct ListNode {LTDataType dat…

LeetCode[面试题04.08]首个共同祖先

难度:Medium 题目: 设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。 例如,给定如下二叉树: root [3,5,1,6,2,0,8,null,null,7,…

Shiro框架基本使用

一、创建maven项目&#xff0c;引入依赖 <dependencies><dependency><groupId>org.apache.directory.studio</groupId><artifactId>org.apache.commons.codec</artifactId><version>1.8</version></dependency><!-- …

【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群指令分析—上篇)

探究Redis服务启动的过程机制的技术原理和流程分析的指南&#xff08;Redis集群管理&#xff09; Redis集群管理查看集群中各个节点状态集群(cluster)cluster info的执行效果指令结果分析 cluster nodes的执行效果指令结果分析 节点(node)CLUSTER MEETCLUSTER FORGETCLUSTER RE…

Excel透视表与python实现

目录 一、Excel透视表 1、源数据 2、数据总分析 3、数据top分析 二、python实现 1、第一张表演示 2、第二张表演示 一、Excel透视表 1、源数据 1&#xff09;四个类目&#xff0c;每类50条数据 2&#xff09;数据内容 2、数据总分析 1&#xff09;选择要分析的字段&…

TCP的三次握手以及四次断开

TCP的三次握手和四次断开&#xff0c;就是TCP通信建立连接以及断开的过程 目录 【1】TCP的三次握手过程 ---- TCP建立连接的过程 【2】TCP的四次挥手 ---- TCP会话的断开 注意&#xff1a; 【1】TCP的三次握手过程 ---- TCP建立连接的过程 三次握手的过程&#xff1a…

TPC-DS 标准介绍、工具下载地址

目录 一、TPC-DS标准介绍 1. DMS介绍 2. TCP-DS概念 二、数据库模型 1. 数据库模型介绍 2. 数据库模型包含内容 三、数据生成器 1. 数据生成器介绍 2. 数据生成器包含内容 四、查询集合 1. 查询集合介绍 2. 查询集合包含的88个标准化查询和17个基准统计函数 五、性…

easyui实用点

easyui实用点 1.下拉框&#xff08;input框只能选不能手动输入编辑&#xff09; data-options"editable:false"//不可编辑2.日期框&#xff0c;下拉框&#xff0c;文本框等class class"easyui-datebox"//不带时分秒 class"easyui-datetimebox"…

【C++】C++入门

1.C关键字 2.命名空间 变量、函数和后面学到的类都是大量存在的&#xff0c;这些变量、函数和名称都将存在于全局作用域中&#xff0c;可能会导致一些冲突&#xff0c;比如命名冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名冲突和名字污染。 2.1…

Oracle设置某个表字段递增

当Oracle设置字段递增创建触发器 先建一个序列&#xff0c;打开PLSQL 找到Sequences&#xff0c;右击新建 根据自己的需要填写 然后添加触发器&#xff0c;点新建-程序窗口-空白 --TEST_ID为触发器的名字&#xff0c;TEST是添加触发器的表名 CREATE OR REPLACE TRIGGER &qu…

【Ubuntu 18.04 搭建 DHCP 服务】

参考Ubuntu官方文档&#xff1a;https://ubuntu.com/server/docs/how-to-install-and-configure-isc-dhcp-server dhcpd.conf 手册页 配置&#xff1a;https://maas.io/docs/about-dhcp 实验环境规划 Ubuntu 18.04&#xff08;172.16.65.128/24&#xff09;dhcp服务端Ubuntu…

记录--一个好用的轮子 turn.js 实现仿真翻书的效果

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 国际惯例&#xff0c;官网链接 官网传送门 Github地址 github上有几个demos例子&#xff0c;介绍了基础用法。 我参考官网的例子&#xff0c;写了一个demo示例 安装 turn.js 依赖 jquery 库&#xff0…

InnoDB引擎底层逻辑讲解——架构之磁盘架构

1. System Tablespaces区域 系统表空间是change buffer&#xff08;更改缓冲区&#xff09;的存放区域&#xff0c;这是在8.0之后重新规划的&#xff0c;在5.x版本的时候&#xff0c;系统表空间还会存放innodb的数据字典undolog日志等信息&#xff0c;在8.0之后主要主要存放更…

APP开发入门:了解主流的编程语言

在过去的几年里&#xff0c;有许多程序员开始学习和使用编程语言。这其中包括C、C、 Java和 Python。尽管有许多语言可供选择&#xff0c;但大多数程序员都会选择最容易学习的编程语言。 如今&#xff0c;有很多编程语言供选择。程序员们在学习这些语言时可以自由地选择他们喜…

原子操作的重要性

原子操作&#xff1a;要么不做&#xff0c;要么一次性做完 非原子操作 其实ABCD都是对的。 B选项&#xff1a;正常执行&#xff0c;I线程执行2条语句全部执行完毕,再执行II线程重新执行一遍foo函数。 C选项&#xff1a;先执行I线程foo函数第一行代码&#xff0c;然后跳转执行…

蓝牙、GPS定位学习

启动状态&#xff08;APP&#xff09; 冷启动 指在启动应用时&#xff0c;后台没有应用的进程或者进程被杀死的情况下&#xff0c;系统会重新创建一个新的进程&#xff0c;并按照一定的顺序创建和初始化Application类和MainActivity类&#xff0c;最后显示在界面上。这个过程需…

深度学习技巧应用24-深度学习手撕代码与训练流程的联系记忆方法

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用24-深度学习手撕代码与训练流程的联系记忆方法,大家都知道深度学习模型训练过程是个复杂的过程,这个过程包括数据的收集,数据的处理,模型的搭建,优化器的选择,损失函数的选择,模型训练,模型评估等步骤,其中缺少…

/bin/bash: Resource temporarily unavailable

有现场反馈plsql无法连接数据库了&#xff0c;登录环境查看时发现从root切换到grid时报错/bin/bash: Resource temporarily unavailable [rootdb1 ~]# su - grid Last login: Thu Jul 27 18:45:04 CST 2023 su: failed to execute /bin/bash: Resource temporarily unavailab…

springboot 入门

前提是已安装java环境&#xff0c;分为三部分 一、项目构建 二、项目组成 三、常用注解 Demo源码 spring-demo: springboot 入门项目 一、springboot-stater 使用IDEA快速构建springboot项目 1、新建项目 2、选择maven&#xff0c;在选择next 3、填写好项目信息 4、pom…