实时语义分割模型PP-LiteSeg论文解读

paper:PP-LiteSeg: A Superior Real-Time Semantic Segmentation Model

official implementation:https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.8/paddleseg/models/pp_liteseg.py

本文的创新点 

  • 提出了一种灵活的轻量级解码器(Flexible and Lightweight Decoder, FLD),减轻了解码器的冗余性,平衡了encoder和decoder的计算成本。
  • 提出了一个新的注意力融合模块(Unified Attention Fusion Module, UAFM),利用空间和通道注意力来加强特征表示。
  • 提出了Simple Pyramid Pooling Module(SPPM)来聚合全局上下文。

方法介绍

Flexible and Lightweight Decoder

encoder-decoder结构是常用的语义分割结构,一般来说,encoder通过分组为几个stage的若干卷积层来提取层级特征,从低层到高层,特征通道数逐渐增加,空间尺寸逐渐减小,这种设计平衡了各阶段的计算成本,保证了encoder的效率。decoder也分为几个stage,负责融合和上采样。尽管从高层到低层,特征的空间尺寸逐渐增加,但在最近的轻量模型中,decoder中的通道数保持不变。因此低层的计算成本远大于高层,为了提高decoder的效率,本文提出了一种灵活的轻量解码器FLD,如图3所示,从high-level到low-level,FLD逐渐减少通道数量,FLD可以很容易的调整计算成本实现编码器和解码器之间的平衡。

Unified Attention Fusion Module

融合多尺度特征是实现高精度分割的关键,本文提出了一个新的注意力融合模块(Unified Attention Fusion Module, UAFM),它应用通道和空间注意力来丰富融合特征的表示。

UFAM framework

如图4(a)所示,UFAM利用一个注意力模块得到权重 \(\alpha\),并通过Mul和Add操作用权重 \(\alpha\) 融合输入特征。具体而言,输入特征表示为 \(F_{high}\) 和 \(F_{low}\),\(F_{high}\) 是深层模块的输出,\(F_{low}\) 是encoder中的对应输出,它们通道数相同。UFAM首先通过双线性插值上采样 \(F_{high}\) 和 \(F_{low}\) 相同尺度大小得到 \(F_{up}\)。然后注意力模块以 \(F_{up}\) 和 \(F_{low}\) 作为输入得到权重 \(\alpha\),这里注意力模块是一个plugin,可以是通道注意力模块、空间注意力模块等。然后分别对 \(F_{up}\) 和 \(F_{low}\) 进行element-wise Mul操作最后两者进行element-wise Add得到最终输出。如下

Spatial Attention Module

空间注意力模块利用inter-spatial关系得到一个权重,它表示的是输入特征中每个像素位置的重要性。如图4(b)所示,给定输入 \(F_{up}\in R^{C\times H\times W}\) 和 \(F_{low}\in R^{C\times H\times W}\),首先沿通道维度计算mean、max得到四个维度 \(R^{1\times H\times W}\) 的特征,然后拼接得到 \(F_{cat}\in R^{4\times H\times W}\),然后接一层卷积和sigmoid得到权重 \(\alpha\in R^{1\times H\times W}\)。具体如式2,这里具体的实现方式是灵活的,比如可以去掉max操作来降低计算成本。

Channel Attention Module

通道注意力模块的关键是利用inter-channel关系得到一个权重,它表示的是输入特征中每个通道的重要性。如图4(c)所示,首先利用average-pooling和max-pooling得到四个维度为 \(R^{C\times 1\times 1}\) 的输出,然后沿通道拼接并接一层卷积和sigmoid得到权重 \(\alpha \in R^{C\times 1\times 1}\),具体过程如下

Simple Pyramid Pooling Module

如图5所示,本文提出的SPPM,它首先利用金字塔池化模块来融合输入特征,其中包含三个average pooling,bin size分别为1x1、2x2、4x4。然后分别进行卷积和上采样,卷积大小为1x1,输出通道数小于输入通道,最后将三个特征相加再接一层卷积得到输出特征。和原始的PPM相比,SPPM减少了中间和输出的通道数,去掉了short-cut,将concatenate替换为add,因此SPPM更高效也更适合实时模型。 

实验结果

PP-LiteSeg和其它sota模型在Cityscapes数据集上的结果比较如下

在CamVid测试集上的结果对比如下

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

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

相关文章

Maven pom.xml 添加本地jar包依赖以及打包方法

1. 安装到本地仓库 mvn install:install-file -DfileD:\XX.jar -DgroupIdXX -DartifactIdXX -Dversion1.11 -Production -Dpackagingjar 2.dependency中指定scope"system"和本地jar包路径 (1)配置本地jar包依赖(systemPath指向本…

SpringBoot+Vue轻松实现考试管理系统

简介 本系统基于 Spring Boot 搭建的方便易用、高颜值的教学管理平台,提供多租户、权限管理、考试、练习、在线学习等功能。主要功能为在线考试、练习、刷题,在线学习。课程内容支持图文、视频,考试类型支持考试、练习、问卷。 源码下载 网…

Linux|服务器|简单记录备忘VMware虚拟机开启桌面失败报错:VMware: No 3D enabled (0, Success).的解决

一, VMware虚拟机 Linux操作系统,centos7版本,安装完桌面后,执行startx 命令后 ,报错:VMware: No 3D enabled (0, Success). 桌面没有启动成功 完整日志输出如下: [rootnode4 ~]# startx x…

上传自己的依赖到maven仓库 -- 保姆级复盘

上传自己的依赖到maven仓库 -- 保姆级复盘 1、准备工作1.1、安装Git1.2、将需要上传的代码先上传到Gitee中1.2.1、上传步骤1.2.2、如果出现以下错误(主要原因是gitee中README.md文件和本地不一致,或者不在本地代码目录中) 2、sonatype注册登录…

文件批量重命名:高效整理文件的技巧,随机汉字重命名文件

在数字化时代,每天都要处理大量的文件,无论是文档、图片还是音频、视频。随着时间的推移,文件库可能会变得混乱不堪,难以找到想要的文件,可见文件名有着重要的作用。现在一起来看云炫文件管理器高效的文件整理方法&…

【IC前端虚拟项目】MVU FS文档编写与注意事项

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 FS文档即模块特性说明文档: FS - Functional Specification(功能规格):"FS" 表示功能规格,它是芯片设计和开发的早期阶段的一个文档。功能规格详细描述了芯片的功能、性能和特性,以及各…

网络调试 TCP,开发板用静态地址-入门7

用两台电脑(无线网络)做实验 1.1, 在电脑A上设置为Server如下: 选择TCP Server后,直接跳出用本机IP做为“本地主机地址” 1.2在 电脑B上设置为Client, 远程主机地址设置为Server的 IP 1.3, 在A, B两台电脑上能够互相发送数据 用…

构建自己的私人GPT

创作不易,请大家多鼓励支持。 在现实生活中,很多人的资料是不愿意公布在互联网上的,但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢?于是我们构建自己或公司的私人GPT变得非常重要。 一、本地部署…

面试指南:指针

目录 前言 指针基础 指针实战 数组与指针比较 sizeof、strlen与指针 指针 函数传递指针的时候是副本 指针要分配给足够的空间 指针定义描述 this指针 前言 在我的博客C高质量编程-CSDN博客内存管理章节里面讲了一些内存的基础知识,内存管理涉及最多的就是…

每天一杯羊奶,让身体更健康

每天一杯羊奶,让身体更健康 羊奶作为一种天然的健康饮品,越来越受到人们的关注和喜爱。它不仅口感醇厚,营养丰富,而且具有独特的保健功效。今天,小编羊大师带大家详细介绍一下每天喝一杯羊奶对身体的好处。 羊奶中的…

Python基础知识总结3-面向对象进阶知识

面向对象三大特征介绍 继承子类扩展父类语法格式关于构造函数:类成员的继承和重写查看类的继承层次结构 object根类dir() 查看对象属性重写 __str__() 方法 多重继承MRO方法解析顺序super()获得父类定义多态特殊方法和运算符重载特殊属性 对象的浅拷贝和深拷贝组合_…

如何利用MiniTab的命令行来提高数据建模效率

使用MiniTab进行数据建模时,如果涉及到需要多次更改数据、多次查看模型,感兴趣的同学可以尝试一下,把命令行显示出来,通过命令行的形式来执行,避免在繁多的菜单中到处查找。 操作方式如下图: 点击菜单“查…

junit单元测试:使用@ParameterizedTest 和 @CsvSource注解简化单元测试方法

在平常的开发工作中,我们经常需要写单元测试。比如,我们有一个校验接口,可能会返回多种错误信息。我们可以针对这个接口,写多个单元测试方法,然后将其场景覆盖全。那么,怎么才能写一个测试方法,…

业务项目中Echarts图表组件的封装实践方案

背景:如果我们的项目是一个可视化类/营销看板类/大屏展示类业务项目,不可避免的会使用到各种图表展示。那在一个项目中如何封装一个图表组件既能够快速复用、UI统一,又可以灵活扩充Echarts的各种复杂配置项配置就变得极为重要。 封装目标 符…

算法第十二天-矩形区域不超过K的最大数值和

矩形区域不超过K的最大数值和 题目要求 解题思路 来自[宫水三叶] 从题面来看显然是一道[二维前缀和]的题目。本题预处理前缀和的复杂度为O(m* n) 搜索所有子矩阵需要枚举[矩形左上角]和[矩形右下角],复杂度是 O ( m 2 ∗ n 2 ) O(m^2 * n^2) O(m2∗n2)&#xff0c…

【数据库原理】(5)关系数据库的关系数据结构

关系及相关概念 在关系模型中,无论是实体还是实体之间的联系均由关系(二维表)来表示。 1.域(Domain) 定义:域是一组具有相同数据类型的值的集合。例子:实数集合、整数集合、英文字母集合等。 2.笛卡儿积(Cartesian…

Spring之事务

当我们在某个方法上加了Transactional注解后,就表示该方法在调用时会开启Spring事务,而这个方法所在的类所对应的Bean对象会是该类的代理对象。 Spring事务的代理对象执行某个方法时的步骤: 1. 判断当前执行的方法是否存在Transactional注解…

mysql进阶-不同的count()性能

目录 一.count() 的含义 二.性能比较 三.结论 统计数据的四种count()方式包括:count(1) 、count(*)、count(id)、count(字段)。 假设数据库的存储引擎是InnoDB,如果是MyISAM,则表的总行数是已经存储的(没有where条件的情况下),可以直接返回。 一.cou…

YOLOv5改进 | 卷积篇 | SAConv轻量化的可切换空洞卷积(附修改后的C3+Bottleneck)

一、本文介绍 本文给大家带来的改进机制是可切换的空洞卷积(Switchable Atrous Convolution, SAC)是一种创新的卷积网络机制,专为增强物体检测和分割任务中的特征提取而设计。SAC的核心思想是在相同的输入特征上应用不同的空洞率进行卷积,并通过特别设计的开关函数来融合这…

2023-应用开发中遇到的问题与解决方案

随着科技的不断发展,应用开发已经成为了当今社会中不可或缺的一部分。无论是手机应用、网页应用还是桌面应用,它们都为我们的生活带来了极大的便利。然而,在应用开发的过程中,我们往往会遇到各种各样的问题。作者将针对应用开发过…