RTFormer: Efficient Design for Real-Time Semantic Segmentation with Transformer概述
0.前言
发表时间:NeurlPS2022(2022.10.13)
1.摘要
最近,基于Transformer的网络在语义分割方面取得了令人印象深刻的结果。然而在实时语义分割方面,由于Transformer的计算机制耗时,纯基于cnn的方法仍然在这一领域占主导地位。我们提出了一种高效的实时语义分割双分辨率TransformerRTprorr,它比基于CNN的模型在性能和效率之间实现更好的权衡。为了在GPU这类设备上实现高推理效率,我们的RTformer利用了线性复杂度的GPU友好注意力,并抛弃了多头机制。此外,我们发现交叉分辨率注意通过传播从低分辨率分支获得的高级知识,可以更有效地收集高分辨率分支的全局上下文信息。在主流基准上的大量实验证明了我们提出的RTformer的有效性,它在Cityscapes,CamVid和COCOStuff上取得了最先进的水平,并在ADE20K上显示出了良好的结果。
2.主要贡献
•提出了一种新的RTFormer块,它在GPU类设备上实现了语义分割任务的性能和效率之间更好的权衡。
•提出了一种新的网络架构RTFormer,该架构能够在不降低效率的前提下,深度利用注意力,充分利用全局上下文来改进语义分割。
•RTFormer在Cityscapes、CamVid和COCOStuff上达到了最先进的水平,并在ADE20K上显示出有前景的性能。此外,它为实时语义分割任务的实践提供了一个新的视角。
3.方法
RTFrormerer块包括两个分支,一个分支使用GPU友好型注意力,另一个使用跨分辨率注意力。
GPU友好型注意力是由External Attention(EA)衍生而来的。
EA基于两个外部的,小的,可学习的和共享的存储器,只用两个级联的线性层和归一化层就取代了现有流行的学习架构中的Self-attention,具体来说,通过两个由线性层实现的包含整个数据集特征的记忆单元,维度为Mxd,替换K和V,从而既使得每个样本能与其他样本交互,又减少了计算量。公式表示如下:

图中H表示头数,EA使用了多头机制,虽然通过共享K'和V'加快了计算速度,但是矩阵乘法操作依旧存在。DN表示double-normalization,分别对行和列进行归一化。

为了减少多头机制带来的计算量,作者提出了GPU-Friendly Attention,公式为:

其中Kg,Vg ∈RMg×d,Mg = M × H, GDN表示分组双归一化,将原双归一化的第二次归一化分成H组,EA和GFA对比如下图:

GFA有两个主要的改进。一方面,它能集成矩阵乘法,这对于gpu类设备来说是相当友好的。得益于此,可以将外部参数的大小从(M, d')扩大到(Mg, d),因此可以调优更多的参数来提高性能。另一方面,利用分组双归一化,在一定程度上保持了多头机制的优越性。为了直观理解,可以认为GFA也生成了H个不同的注意力图来捕捉不同的token之间的关系,但相似度计算涉及了更多的特征元素,且所有的注意力图都对最终的输出有贡献。
跨分辨率注意力 多分辨率融合已被证明对密集预测任务是有效的。而对于多分辨率架构的设计,可以直观地将GFA独立应用于不同分辨率的分支,并在执行卷积模块或注意力模块后交换特征。但在高分辨率分支中,像素更关注局部信息,而非高层次的全局上下文。因此,作者认为直接将注意力转移到高分辨率特征图上学习全局上下文是不够有效的。为了更有效地获取全局上下文,提出了跨分辨率注意力机制,旨在充分利用从低分辨率分支中学习到的高层语义信息。如下图所示,计算公式如下:

其中Xh, Xl分别表示高分辨率分支和低分辨率分支上的特征映射,φ是一组包括splitting,permutation和reshaping的矩阵操作,dh表示高分辨率分支的特征维数。Xc为交叉特征,θ函数由池化层和卷积层组成,Xc的空间大小表示从xl生成的token数。在实验上,只在注意力图的最后一个轴上使用softmax进行归一化,因为当key和value不是外部参数时,单个softmax比双归一化性能更好。此外,为了计算性能,这里没有使用多头机制。
Feed Forward Network 在以前的基于Transformer的分割方法中,前馈网络(FFN)通常由两个MLP层和一个深度3×3卷积层组成,其中深度3×3卷积用于补充位置编码或增强局部性。此外,两个MLP层将隐藏维度扩展为输入维度的2到4倍。这种类型的FFN可以用相对较少的参数获得更好的性能。但在应该考虑类GPU设备上的延迟的情况下,FFN的典型结构不是很有效。为了平衡性能和效率,在RTFormer块的FFN中采用了两个3×3卷积层,而没有进行维数扩展。与典型的FFN配置相比,它显示了更好的结果。
RTFrormerer块如下。对于低分辨率,采用GPU友好型注意来捕获高层次的全局上下文。对于高分辨率,使用跨分辨率注意力,将从低分辨率分支学习到的高层全局上下文传播到每个高分辨率像素,并通过stage布局将更有代表性的特征从低分辨率分支提供给交叉分辨率注意力。它从低分辨率分支中提取K和V。此外,用两个3×3卷积层组成FFN。

RTFrormer体系结构说明。将RTFrormer块放置在最后两个阶段,用粉色块表示,在早期阶段使用卷积块,用蓝色块表示。此外,利用DDRNet的成功经验,添加了一个针对分割头的DAPPM(Deep Aggregation Pyramid Pooling Module)模块。

为了提取高分辨率特征图所需的足够的局部信息,将卷积层与RTFormer块相结合来构造RTFormer。具体来说,让RTFormer从一个由两个3×3卷积层组成的stem块开始,用几个连续的基本残差块组成前两个阶段。然后,从第3阶段开始,使用双分辨率模块,实现高分辨率和低分辨率分支之间的特征交换。对于最后三个阶段的高分辨率分支,特征stride保持为8不变,而对于低分辨率分支,则特征stride分别为16、32、32。特别是,将双分辨率模块安排为阶梯式布局,以借助低分辨率分支的输出增强高分辨率特征的语义表示。最重要的是,用提出的RTFormer块构造了stage4和stage5,如图2所示,用于有效的全局上下文建模,而stage3仍然由基本残差块组成。
4.结论
在本文中,我们提出了可以有效地捕获全局上下文,以提高实时语义分割性能的RTFormer。大量的实验表明,我们的方法不仅在通用的实时分割数据集上取得了最新的结果,而且在具有挑战性的一般语义分割数据集上表现出了优越的性能。由于前者的效率,我们希望我们的方法可以鼓励新的实时语义分割设计。一个限制是,虽然我们的RTFormer Slim只有4.8M参数,但边缘设备芯片可能需要更高的参数效率。我们把它留给以后的工作吧。
5.补充
DAPPM(Deep Aggregation Pyramid Pooling Module)模块结构如下:

用于进一步从低分辨率的特征图中提取上下文信息。以层次-残差的方式融合不同尺度的上下文信息。
RTFormer: Efficient Design for Real-Time Semantic Segmentation with Transformer概述的更多相关文章
- Review of Semantic Segmentation with Deep Learning
In this post, I review the literature on semantic segmentation. Most research on semantic segmentati ...
- Fully Convolutional Networks for semantic Segmentation(深度学习经典论文翻译)
摘要 卷积网络在特征分层领域是非常强大的视觉模型.我们证明了经过端到端.像素到像素训练的卷积网络超过语义分割中最先进的技术.我们的核心观点是建立"全卷积"网络,输入任意尺寸,经过有 ...
- Fully Convolutional Networks for Semantic Segmentation 译文
Fully Convolutional Networks for Semantic Segmentation 译文 Abstract Convolutional networks are powe ...
- 论文笔记之:Decoupled Deep Neural Network for Semi-supervised Semantic Segmentation
Decoupled Deep Neural Network for Semi-supervised Semantic Segmentation xx
- 论文笔记之:Instance-aware Semantic Segmentation via Multi-task Network Cascades
Instance-aware Semantic Segmentation via Multi-task Network Cascades Jifeng Dai Kaiming He Jian Sun ...
- 目标检测--Rich feature hierarchies for accurate object detection and semantic segmentation(CVPR 2014)
Rich feature hierarchies for accurate object detection and semantic segmentation 作者: Ross Girshick J ...
- 论文学习:Fully Convolutional Networks for Semantic Segmentation
发表于2015年这篇<Fully Convolutional Networks for Semantic Segmentation>在图像语义分割领域举足轻重. 1 CNN 与 FCN 通 ...
- 论文笔记(3):STC: A Simple to Complex Framework for Weakly-supervised Semantic Segmentation
论文题目是STC,即Simple to Complex的一个框架,使用弱标签(image label)来解决密集估计(语义分割)问题. 2014年末以来,半监督的语义分割层出不穷,究其原因还是因为pi ...
- 论文阅读 | A Curriculum Domain Adaptation Approach to the Semantic Segmentation of Urban Scenes
paper链接:https://arxiv.org/pdf/1812.09953.pdf code链接:https://github.com/YangZhang4065/AdaptationSeg 摘 ...
- 2018年发表论文阅读:Convolutional Simplex Projection Network for Weakly Supervised Semantic Segmentation
记笔记目的:刻意地.有意地整理其思路,综合对比,以求借鉴.他山之石,可以攻玉. <Convolutional Simplex Projection Network for Weakly Supe ...
随机推荐
- STL vector常用API
1.容器:序列容器(时间决定).关联式容器(容器中的数据有一定规则) 2.迭代器:通过迭代器寻找.遍历容器中的数据 vetor的使用:数据遍历与输出 #define _CRT_SECURE_NO_WA ...
- Vue中实现自定义excel下载
目录 第一种:后端生成excel 第二种:前端合成excel 总结 参考资料 最近在工作中遇到一个需求,就是需要在前端实现一个错误模板Excel的下载功能. 实现下载有两种方式,一种是后端生成一个ex ...
- 第六节 FAF与GP不工作保护区的绘制
飞行程序设计软件实践 前一篇文章中,通过风标设计2023插件,我们在CAD中绘制了FAP方式下的精密进近保护区. 接着这个话题我们继续来看一下FAF方式下的保护区应该怎样绘制,以及OAS参数的其它用法 ...
- Input源码解读——从"Show tabs"开始
Input源码解读--从"Show tabs"开始 本文基于Android T版本源码,梳理当用户在开发者选项中开启Show tabs功能后显示第点按操作的视觉反馈的原理,来进一步 ...
- HttpServletRequest获取参数和文件
从HttpServletRequest中获取上传文件及参数的方法 try { //下面这句必须加,不然报错 MultipartResolver resolver = new CommonsMultip ...
- 题解 P5607 [Ynoi2013] 无力回天 NOI2017
简要题意 其实我觉得这个部分可以不要,因为这道题的题面还是很清晰的. 你需要维护一个数据结构,支持区间异或和区间求与 \(v\) 的最大异或和. 思路 对于这种区间问题,最容易想到的就是 分块 线段树 ...
- WPF-3D图形
WPF-3D图形 WPF的3D功能可以在不编写任何c#代码的情况下进行绘制,只需要使用xaml即可完成3D图形的渲染.本文主要讲述了WPF-3D中的关键概念, 以及常用到的命中测试.2d控件如何在3D ...
- 移动端微信小程序开发学习报错记录--toast.js:41 未找到 van-toast 节点,请确认 selector 及 context 是否正确
这个问题仔细检查了一下代码引入,是没有问题的, 根本原因是在页面上忘了加<van-toast id="van-toast" /> 具体引入代码如下: app.json ...
- 动力节点—day05
数组 Java语言当中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object 数组实际上是一个容器,可以同时容纳多个元素(数组是一个数据集合),多个数据元素的类型必须是一致的 数组当中 ...
- Unity屏幕永远保持为固定分辨率
Unity屏幕永远保持为固定分辨率 Unity屏幕永远保持为固定分辨率 前言 开题废话 Unity版本 正题: 打开一场景 创建脚本并且编写 挂在脚本到场景摄像机上边 以不同比的分辨率运行程序,并且观 ...