文章目录

  • 一、背景和动机
  • 二、方法
    • 2.1 Transformer encoder
    • 2.2 Convolutional decoder
    • 2.3 处理不同输入大小
  • 三、效果
    • 3.1 单目深度估计
    • 3.2 语义分割


论文链接: https://arxiv.org/pdf/2103.13413.pdf
代码链接: https://github.com/intel-isl/DPT

一、背景和动机

现有的密集预测模型大都是基于卷积神经网络的模型,基本上都把网络分为两部分:

  • encoder:也就是 backbone
  • decoder:也就是 head

关于密集预测的研究,很多都集中在对解码头的改进中,backbone的结构没有大的突破,如果 encoder 中丢了很多信息,那么 decoder 再好也无法将其恢复。

卷积网络会通过下采样的方式来增大感受野并提取多尺度的图像特征,但是下采样会丢失掉图像的一些信息,decoder 也难以恢复。这些信息对分类等粗粒度的任务可能没那么重要,但对密集预测任务比较重要。

当然也有一些方法对这种信息丢失的问题做了改进,如使用高分辨率的输入,使用膨胀卷积来增大感受野,在 encoder 和 decoder 之间使用跳连等。但这些方法或者需要很多的卷积堆叠,或者需要很大的计算量。

所以,本文中,作者提出了一种 dense prediction transformer(DPT),是一种基于 transformer 的 encoder-decoder 结构的密集预测结构。本文中,作者基于深度预测和语义分割来进行实验对比。

二、方法

DPT 的总体结构如图1左侧所示,作者使用 ViT 作为 backbone。

2.1 Transformer encoder

作者使用 ViT 作为 encoder 结构,把原图切分为不重叠的 token,然后使用 MHSA 获得这些经过编码的 token 之间的 attention。

transformer 处理后,token 的数量是不变的,且它们之间的 attention 是一对一的,每个 token 都可以获得和其他 token 的关系,能够获得全局感受野下的特征,空间分辨率也不会改变。

作者使用三种 ViT 变体进行实验:

  • base:每个 patch 被拉平为 768 维
  • large:每个 patch 被拉平为 1024 维,
  • hybrid:将 ResNet50 的输出特征作为输入
  • patch size p=16p=16p=16

由于patch embedding 会将每个patch拉平至比其像素维度大的维度,这就表示 embedding 过程能够学习到一下有益于任务的特征。

2.2 Convolutional decoder

Decoder 过程是为了把这一系列的 token 转换成不同分辨率的 image-like 特征表达,然后将这些特征聚合起来进行最终的密集预测。

作者提出了一个 three-stage Reassemble operation 来从 transformer encoder 的任意层恢复 image-like 的特征表达:

  • sss:是恢复的特征表达相对于原始输入图像的比率
  • D^\hat{D}D^:输出特征维度

主要过程:

① 首先,将 token 从 Np+1N_p+1Np+1 映射为 NpN_pNp

该操作是为了处理 readout token(类似于 ViT 中的 cls token)

该 token 是为了分类而用的,能够提取全局信息,作者验证了三种不同的处理方式:

  • 直接忽略该 readout token
  • 将 readout token 加在其他token上
  • 将 readout token 直接 concat 到其他 token 上,然后再将其影射到 D 维

结果如表 7 所示:

② 之后,根据初始 patch 的position,将其分别放到对应的位置上,得到 image-like 的特征表达


③ 最后,使用 1x1的卷积改变通道,后面接一个 3x3 的卷积进行 resize

如何提取多尺度:

作者从 4 个不同的 stage 提取得到了 4 种不同分辨率的特征图。浅层的 stage 映射到大分辨率的特征图。

  • ViT Large:从 {5, 12, 18, 24} stage 来提取 token
  • ViT Base:从 {3, 6, 9 ,12} stage 来提取 token
  • ViT Hybrid:从 {9, 12} stage 来提取 token
  • D^=256\hat{D}=256D^=256

如何聚合多尺度的特征:

作者使用 RefineNet-based 特征融合block(图1右侧),然后在每个 fusion stage 逐渐进行2倍上采样,最终的分辨率为原始分辨率的 1/2,不同任务的 head 是不同的,如图 1 所示。

2.3 处理不同输入大小

类似于全卷积网络,DPT 能够接受不同大小的输入。

假设图像大小除以 p,embedding 过程会产生 NpN_pNp 个 tokens,NpN_pNp 会根据图像大小的不同而变化。transformer 可以处理不同尺寸的输入序列,但position是与图像大小有关的,作者参照 ViT 的方法,即使用插值的方法,将 position embedding 线性影射到需要的大小。

三、效果

3.1 单目深度估计


3.2 语义分割


【Transformer】DPT: Vision Transformer for Dense Prediction相关推荐

  1. CV-Model【6】:Vision Transformer

    系列文章目录 Transformer 系列网络(一): CV-Model[5]:Transformer Transformer 系列网络(二): CV-Model[6]:Vision Transfor ...

  2. 【神经网络】2021-ICCV-Pyramid Vision Transformer:用于无卷积密集预测的多功能骨干

    2021-ICCV-Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction Without Convolutions ...

  3. 【Timm】搭建Vision Transformer系列实践,终于见面了,Timm库!

    前言:工具用不好,万事都烦恼,原本真的就是很简单的一个思路实现,偏偏绕了一圈又一圈,今天就来认识认识Timm库吧! 目录 1.百度飞桨提供的-从零开始学视觉Transformer 2.资源:视觉Tra ...

  4. 【CVPR2022】Lite Vision Transformer with Enhanced Self-Attention

    论文:https://readpaper.com/paper/633541619879256064 代码:https://github.com/Chenglin-Yang/LVT 1.研究动机 尽管V ...

  5. 【AAAI2021】Dual-Level Collaborative Transformer for Image Captioning

    [AAAI2021]Dual-Level Collaborative Transformer for Image Captioning 附: 论文下载地址 附: 代码下载地址 论文主要贡献 提出了一种 ...

  6. 【NeurIPS2022】Cross Aggregation Transformer for Image Restoration

    [NeurIPS2022]Cross Aggregation Transformer for Image Restoration **研究动机:**当前方法 Transformer 方法把图像分成8x ...

  7. 【Swin Transformer原理和源码解析】Hierarchical Vision Transformer using Shifted Windows

    目录 前言 一.动机和改进点 二.整体架构:SwinTransformer 三.输入设置:PatchEmbed 四.4个重复的Stage:BasicLayer 4.1.SwinTransformerB ...

  8. 【图像分类案例】(10) Vision Transformer 动物图像三分类,附Pytorch完整代码

    大家好,今天和各位分享一下如何使用 Pytorch 构建 Vision Transformer 网络模型,并使用 权重迁移学习方法 训练模型并预测. Vision Transformer 的原理和 T ...

  9. 【ECCV2020】Spatio-Temporal Graph Transformer Networks for Pedestrian Trajectory Prediction

    [ECCV2020]用于行人轨迹预测的时空图 Transformer 网络 摘要 了解人群运动动力学对于现实世界的应用至关重要,例如监控系统和自动驾驶.这是具有挑战性的,因为它需要对具有社会意识的人群 ...

最新文章

  1. 【跃迁之路】【724天】程序员高效学习方法论探索系列(实验阶段481-2019.2.14)...
  2. Google Maps Android API v2官网例子使用说明
  3. 基于SSH实现医院在线挂号系统
  4. Spring Cloud Alibaba基础教程:Nacos的数据持久化
  5. golang 排序list_Go语言使用sort包对任意类型元素的集合进行排序的方法
  6. python三层装饰器-python 3层装饰器及应用场景
  7. MySQL体系结构和存储引擎概述
  8. Atitit 财政支出学习心得 attilax总结
  9. mac上安装mongoDb以及简单使用
  10. 第5章、解析Hello,world!知其然,更要知其所以然(从零开始学Android)
  11. tps在区块链是什么意思_一文读懂 TPS介绍!
  12. 任务栏优化工具TrueLaunchBar
  13. 算法导论 之 红黑树 - 添加[C语言]
  14. TM1621数码管驱动
  15. linux wget
  16. 如何下载宝坻区卫星地图高清版大图?
  17. 剑指offer快速回忆之面试的流程
  18. 微信小程序基础入门---登陆实现
  19. python做一个强大的随机姓名生成器
  20. jQuery页面刷新的一些方法

热门文章

  1. [20180808]exists and not exists.txt
  2. css文本居中的几种方式
  3. 新一代 Tor发布, 它牛在哪里
  4. LVS之VS/NAT搭建web集群实战!!!
  5. weblit渲染过程
  6. SMG12232A2标准图形点阵型液晶显示模块的演示程序[C51编程语言]
  7. Linux 帐户管理
  8. 智能电视系列(4)-高通,天才与极限
  9. Android事件处理之多点触摸与手势识别
  10. C#中搜索关键词高亮显示