重新思考语义分割范式——SETR

转载from:https://zhuanlan.zhihu.com/p/348418189   请多支持原创

一、论文信息

标题:《Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspectivewith Transformers

作者:Sixiao Zheng et al.(复旦大学 & 牛津大学 & 萨里大学 & 腾讯优图 & 脸书)

文章:https://arxiv.org/abs/2012.15840

源码:官方 & 第三方复现(Pytorch)

二、论文解读

2.1 动机

自全卷积神经网络(FCN)提出以来,现有的语义分割框架大都是基于编码器-解码器(Encoder-Decoder)范式,其中:

编码器用于压缩原始输入图像的空间分辨率并逐步地提取更加高级的抽象语义特征;

解码器则用于将编码器所提取到的高级特征上采样到原始输入分辨率以进行像素级的预测;

上下文(context)信息是提升语义分割性能最关键的因素,而感受野(respect-field)则大致决定了网络能够利用到多少的信息。通常,在编码器中,我们会在下采样的过程中逐层的降低空间分辨率,以减少计算资源的消耗同时有效的扩大了网络的感受野。如此一来,CNN中不仅由于卷积的参数共享使得网络具有平移等变性(translation equivalence),而且还因为引入池化操作在一定程度上为网络引入了平移不变性(translation invariant),使网络对目标位置不那么敏感,间接地增强了网络对未知数据的推理能力,同时又通过共享卷积核来达到控制模型的复杂度。理论上,通过堆叠足够深的卷积层网络的感受野能够覆盖到输入图像的全局区域,然而:

(1)相关研究表明,网络的实际感受野远小于其理论感受野;

(2)考虑到参数量激增和计算量消耗与性能之间的平衡;

(3)过多的下采样操作会导致小目标的细节信息被严重损失甚至完全丢失;

因此,由于网络中的有效感受野是有限的(limited),这将会严重制约模型的表示能力。

其实,对于语义分割乃至分类、检测等几大主流的视觉任务来说,近几年的工作大都是基于一个核心点出发,即如何在保证效率的同时尽可能的捕获有效的上下文信息。主流方法主要有两种——改造原始的卷积操作或者在网络中引入注意力机制。

对于改造原始的卷积操作方式主要是通过扩大感受野从而来捕获局部的上下文信息:

  • large kernel sizes,e.g., Inception block;
  • atrous/dialted convolution, e.g., DeepLab series;
  • image/feature pyramid, e.g., PSPNet;
  • deformable convolution;
  • ...

而注意力方法则更倾向于从不同维度建立长距离的依赖从而来捕获全局的上下文信息:

  • channel attention, e.g., SENet;
  • spatial attention, e.g., DANet;
  • self-attention, e.g., NonLocalNet;
  • ...

作者认为,上述的方法均是基于FCN架构,均无法摆脱编码器需要 对输入特征图进行降采样的操作。而我们知道,Transformer 的一个特性便是能够保持输入和输出的空间分辨率不变,同时还能够有效的捕获全局的上下文信息。因此,作者这里便采用了类似ViT的结构来进行特征提取同时结合Decoder来恢复分辨率。在一定程度上可以避免审稿人质问:(1)Transformer和其它的自注意力的方法有啥区别?(2)利用Transformer进行特征提取相比于CNN有何优势?——写论文就是要会讲故事,让reviewer挑不出你的毛病。当然,这只是其中一关,除了故事本身的逻辑性,实验设置得是否合理以及充分也是个可以挑刺的地方。除此之外,我们知道TF的一个显著缺陷便是对计算和存储的要求特别高,如果没有进行底层优化,很难在GPU端飞起来。作者也是很巧妙,避开刷精度的路子,题目起了个"Rethinking",意在告诉审稿人我这只是一种尝试,我告诉后来人这条路走得通,可以往这走,至于效率优化方面就留点工作给别人,你也不要死揪着我这点不放哈哈。如果TF在分割这条路能一直火下去的话,ViT、DETR和SETR这三篇文章的引用量估计会获得爆发式的增长。关于TF的底层GPU优化,可以参考快手异构团队的 工作。

为了避免给审稿人造成一种这就是一篇“ViT+Decoder”堆积木文章的错觉,作者还特地在引言末尾强调,话虽如此,但:

However, extending a pure transformer from image classification to a spatial location sensitive tasks of semantic segmentation is  non-trivial.

话说这句话我还是挺认同作者的。因此笔者在此之前基于Pytorch框架随手复现了下这个结构,基于ViT进行特征提取,然后把中间层间隔抽出来并结合Decoder进行输出,在利用多卡训练的过程种发现性能只不过跟UNet差不多,但是效率方面,额(⊙﹏⊙),而且会出现学习率稍微大点loss就nan等问题。本以为能一飞冲天,结果没两个epoch一言不合就给你搞到自闭。当然笔者也不是专门在研究这个只是跑着玩玩,没去了解过这方面的训练技巧和一些注意事项,可能我实现的姿势不对,说不定这家伙很好train呢?继续往下读读,看看有没有惊喜╰(*°▽°*)╯,毕竟作者在ADE20K这个数据集上过榜首,至少说明是能work的吧???

2.2 相关工作

主要介绍了下语义分割和Transformer这两大板块的内容。最后着重分析了与Axial-DeepLab的不同之处:

  • Axial有对输入图像进行下采样,而SETR则全程利用序列到序列的模式并没有降低分辨率;
  • Axial采用了专门的设计的轴向注意力(见下),这对于标准计算设备来说可扩展性差,而SETR则始终坚持使用纯正的TF模块,可以简化易用性;

说实话,这里给出的区别点有点牵强,不明白作者为何要在这里特别强调这个,可能是审稿人提出跟Axial的区别吧?要不然这里贸然的对比意义并不大。

Axial-DeepLab是发表于ECCV 2020的一篇spotlight文章《Axial-DeepLab: Stand-Alone Axial-Attention for Panoptic Segmentation》,其核心思想是利用轴向注意力,即通过将2D的自注意力分解为两个1D的自注意力来消除卷积操作种局部感受野的限制,在降低计算复杂度的同时建立远距离的依赖捕获全局的上下文信息。除此之外,作者还提出了一个对位置敏感的自注意力设计,两者共同结合开发出一个position-sensitive axial-attention layer。额,不仔细看还以为是CCNet的翻版,这操作明显跟CCNet很类似啊,作者并没比较,而是往Non-Local方向上去进行横向比较了。

2.3 方法

SETR主要由三部分组成:输入→转换→输出。

Schematic illustration of the proposed SEgmentation TRansformer (SETR) 。(a) 输入预处理及特征提取;(b)渐进式上采样;(c)多层级特征聚合。

2.3.2 Transformer

通过将序列输入到Transformer架构可进行特征的提取,其主要包含两个部分Multi-head Self-Attention (MSA) and Multilayer Perceptron (MLP) blocks。具体的没啥好讲,自注意力核心就是QKV操作,而多头只不过是将它分组进行计算而已,稍微看下应该挺好理解的。

这里linear projection layers一般是指全连接层,用于改变通道维度。

标准的Transformer结构

关于Transformer家族,可参考下图:

2.4 实验

  • 数据集

在Cityscapes[1]、ADE20K[2]以及PASCAL Context[3]这三个数据集上进行实验评估;

  • 实现细节

基于mmsegmentation框架里面默认的设置(如数据增强和训练策略):

(1) 先以0.5或2的比例随机resize原图,然后随机裁剪成768、512和480分别应用于上述三个数据集,紧接着执行随机的水平翻转;

(2) 对于Cityscapes数据集,采用的batch size为8;而两外两个数据集ADE20K和PASCAL 则分别采用batch size为8和16的大小迭代训练160k和80k次;

(3) 采用多项式的学习率衰减策略并基于SGD进行训练和优化,其中Momentum和Weight decay分别设置为0.9和0;

(4) 最后,对于上述三个数据集的初始学习率分别设置为0.01、0.001以及0.01.

  • 多尺度测试

首先将输入图像缩放到一个统一的尺寸,然后执行多尺度的缩放以及随机的水平翻转,尺度缩放因子分别为(0.5,0.75,1.0,1.25,1.5,1.75),紧接着采用滑动窗口的方式进行重叠的切片预测,最后再合并测试结果。如果移动的步长不足以得到一张完整的切片,那么以短边为例保持同等的aspect ratio。其中,由于采用的是多卡的分布式训练,因此Synchronized BN也被用于解码器和辅助损失头的训练过程中。为了简化训练过程,作者这里并没采用在线困难样本挖掘(OHEM)[4]之类的trick用于模型的训练。

  • 基准模型

采用mmsegmentation中自带的dilated FCN和Semantic FPN。注意到,考虑到计算的瓶颈,最终的FCN是8倍上采样回去,而本文所提出的SETF是进行16倍上采样。

  • SETR变体

SETR-Naive, SETR-PUP和SETR-MLA对应上述三种解码器。另外,对于编码器来说,采用的是M层的Transformer,这里根据M的大小划分为"T-Small"和"T-Large",分别对应12和24层。除非特别说明,本文默认采用的是24层的TF(这样一来就有3*2=6种组合)。初次之外,作者还涉及了一种结合CNN+TF的混合模型,即采用ResNet-50作为预编码器用于初步的特征提取,然后将所提取特征喂入SETR进行进一步的特征提取。为了降低GPU的计算开销,这里ResNet-50将原始输入图像下采样16倍,同时采用SETR-Naive-S的组合。

  • 预训练

作者将ViT训练出来的权重用于SETR的编码器进行权重初始化。额,说白了就是把它照搬过来微调了下(白嫖?)。值得注意,这里非常关键的一点是随机初始化和带ViT的预训练权重效果差别这么大:

  • 可视化

可以看出,在第1层的时候便可以捕获到全局的特征,越往后所提取到的特征越抽象。这足以证明Transformer建立长距离依赖的能力。

三、总结

总的来说,本文将Pure Transformer在自然图像的语义分割任务上进行了首次尝试,整体来说取得的效果是相当不错的。知乎貌似有许多人对其开炮,质疑其创新点不足或者没有放出参数量计算量等亦或是没跟基于自注意力的方法如CC-Net和EMA-Net等比较。然而,我个人的观点的是论文本身可以分为两种,一种是精度型,一种是探索型。大家纠结的原因就是将其归纳为前者,当然这里与作者反复强调在ADE-20k数据集上取得xx成绩也有关,很容易把节奏带进去。为了弥补,作者在题目又强调时Rethinking,即本文只是尝试可以这样做。且不论这个创新性有多强,这其实更应该被当成一篇实验性论文,告诉大家这条路可以走得通。其实,当看到这篇文章的时候,我最关注的地方并不是整体的结构,而是作者是如何将其训练到work的?毕竟这种结构我想绝大多数人都试到吐了,通过整篇文章读下来,才发现要训好这个网络步骤原来这么繁琐,难道笔者基于同样的结构训练一轮下来被直接摁在地下摩擦。最后,很好奇SETF是基于什么样的硬件设施下进行实验的?

Reference

[1] The cityscapes dataset for semantic urban scene understanding.

[2] Semantic understanding of scenes through the ade20k dataset.

[3] The role of context for object detection and semantic segmentation in the wild.

[4] Ocnet: Object context network for scene parsing

Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspectivewith Transformers相关推荐

  1. Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers

    Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers Abstract ...

  2. 【论文笔记】Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspectivewith Transformers

    声明 不定期更新自己精度论文,通俗易懂,初级小白也可以理解 涉及范围:深度学习方向,包括 CV.NLP.Data Fusion.Digital Twin 论文题目: Rethinking Semant ...

  3. 论文阅读笔记--Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers

    最近在阅读一些关于transformer的论文,在此记录是为了看看到底天天学了些什么.目前阅读这些论文感觉还是似懂非懂的阶段,还需要时间细细斟酌,共勉! Rethinking Semantic Seg ...

  4. 【论文翻译】SETR:Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformer

    SETR 摘要 介绍 相关工作 语义分割 Transformer 模型设计 FCN-based semantic segmentation Segmentation transformers (SET ...

  5. (SETR翻译)Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers

    作者:Sixiao Zheng et al.(复旦大学 & 牛津大学 & 萨里大学 & 腾讯优图 & 脸书) 论文:https://arxiv.org/abs/2012 ...

  6. 1、Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers

    简介 主页:https://fudan-zvg.github.io/SETR/ 在提交当天,在ADE20K测试服务器排行榜上取得了第一的位置. 多数语义分割方法都采用有编码器-解码器结构的全卷积网络( ...

  7. 论文阅读 CVPR2022《Rethinking Semantic Segmentation:A Prototype View》

    回顾一下语义分割,其实可以分为两种.一种是参数化的softmax投射,另一种是部分transformer的方法--query based的方法. 再回到论文的题目 关于prototype的类似定义,可 ...

  8. 【Lawin Transformer2022】Lawin Transformer: Improving Semantic Segmentation Transformer with Multi-Sc

    Lawin Transformer: Improving Semantic Segmentation Transformer with Multi-Scale Representations via ...

  9. FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation

    FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation (CVPR2019) 1.摘要 目前 ...

最新文章

  1. 满足极高读写性能需求的Key-Value数据库
  2. Mac-sublime text 3破解版
  3. 一文了解PL610-01-O96TC-R
  4. [笔记].关于Nios II的数据类型的一点想法
  5. Android开机画面~(自己还没试验)
  6. 文件描述符fd是什么?
  7. Auto_ml与TPOT的区别
  8. 超详攻略!Databricks 数据洞察 - 企业级全托管 Spark 大数据分析平台及案例分析
  9. 双11奇迹背后的大数据平台,不喧哗,自有声!
  10. 纳米颗粒C语言数值模拟_J.Hazard. Mater.当“金属纳米酶”邂逅“重金属离子”:机遇与挑战...
  11. CentOS 7 各个版本的区别
  12. 190513每日一句
  13. mac vulkan_基于 mac 的 ncnn vulkan iOS集成参考
  14. 白帽子讲web安全(一)
  15. 【026】国务院督查组莅临翼辉信息参观调研
  16. 《PWM整流器及其控制》读书笔记-第二章-PWM整流器拓扑结构及原理
  17. netbsd apache php mysql,NetBSD配置aria2的web前端YAAW笔记
  18. 十六进制字符串转中文
  19. 二维灰度地形图山脊线自动提取方法整理(MST)
  20. 操作教程:大华摄像头通过GB28181协议注册EasyCVR平台的详细配置

热门文章

  1. 初探数通网络开放可编程简介
  2. 洛谷 P2895 [USACO08FEB]Meteor Shower S C++ BFS 广搜
  3. jQuery效果-隐藏和显示
  4. Gulp插件之gulp-babel和gulp-uglify关于js代码的转换和压缩
  5. 最简单的理财:定投与资产配置
  6. 托管 非托管_托管的完整指南-第1部分
  7. 开源源码商城系统盘点
  8. 安装Ubuntu 16.04后要做的事
  9. 第一组 beta冲刺(2/3)
  10. cadence的parametric analysis设置