【Transformer】11、DPT: Vision Transformer for Dense Prediction

2023-11-02 07:40

本文主要是介绍【Transformer】11、DPT: Vision Transformer for Dense Prediction,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、背景和动机
    • 二、方法
      • 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 = 16 p=16 p=16

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

2.2 Convolutional decoder

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

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

在这里插入图片描述

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

主要过程:

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

该操作是为了处理 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}=256 D^=256

如何聚合多尺度的特征:

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

2.3 处理不同输入大小

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

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

三、效果

3.1 单目深度估计

在这里插入图片描述

在这里插入图片描述

3.2 语义分割

在这里插入图片描述

在这里插入图片描述

这篇关于【Transformer】11、DPT: Vision Transformer for Dense Prediction的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329122

相关文章

Transformer从零详细解读

Transformer从零详细解读 一、从全局角度概况Transformer ​ 我们把TRM想象为一个黑盒,我们的任务是一个翻译任务,那么我们的输入是中文的“我爱你”,输入经过TRM得到的结果为英文的“I LOVE YOU” ​ 接下来我们对TRM进行细化,我们将TRM分为两个部分,分别为Encoders(编码器)和Decoders(解码器) ​ 在此基础上我们再进一步细化TRM的

LLM模型:代码讲解Transformer运行原理

视频讲解、获取源码:LLM模型:代码讲解Transformer运行原理(1)_哔哩哔哩_bilibili 1 训练保存模型文件 2 模型推理 3 推理代码 import torchimport tiktokenfrom wutenglan_model import WutenglanModelimport pyttsx3# 设置设备为CUDA(如果可用),否则使用CPU#

逐行讲解Transformer的代码实现和原理讲解:计算交叉熵损失

LLM模型:Transformer代码实现和原理讲解:前馈神经网络_哔哩哔哩_bilibili 1 计算交叉熵目的 计算 loss = F.cross_entropy(input=linear_predictions_reshaped, target=targets_reshaped) 的目的是为了评估模型预测结果与实际标签之间的差距,并提供一个量化指标,用于指导模型的训练过程。具体来说,交叉

复盘高质量Vision Pro沉浸式视频的制作流程与工具

在探索虚拟现实(VR)和增强现实(AR)技术的过程中,高质量的沉浸式体验是至关重要的。最近,国外开发者Dreamwieber在其作品中展示了如何使用一系列工具和技术,创造出令人震撼的Vision Pro沉浸式视频。本文将详细复盘Dreamwieber的工作流,希望能为从事相关领域的开发者们提供有价值的参考。 一、步骤和工作流 构建基础原型 目的:快速搭建起一个基本的模型,以便在设备

[论文笔记]Making Large Language Models A Better Foundation For Dense Retrieval

引言 今天带来北京智源研究院(BAAI)团队带来的一篇关于如何微调LLM变成密集检索器的论文笔记——Making Large Language Models A Better Foundation For Dense Retrieval。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 密集检索需要学习具有区分性的文本嵌入,以表示查询和文档之间的语义关系。考虑到大语言模

深度学习每周学习总结N9:transformer复现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 多头注意力机制前馈传播位置编码编码层解码层Transformer模型构建使用示例 本文为TR3学习打卡,为了保证记录顺序我这里写为N9 总结: 之前有学习过文本预处理的环节,对文本处理的主要方式有以下三种: 1:词袋模型(one-hot编码) 2:TF-I

RNN发展(RNN/LSTM/GRU/GNMT/transformer/RWKV)

RNN到GRU参考: https://blog.csdn.net/weixin_36378508/article/details/115101779 tRANSFORMERS参考: seq2seq到attention到transformer理解 GNMT 2016年9月 谷歌,基于神经网络的翻译系统(GNMT),并宣称GNMT在多个主要语言对的翻译中将翻译误差降低了55%-85%以上, G

一键部署Phi 3.5 mini+vision!多模态阅读基准数据集MRR-Benchmark上线,含550个问答对

小模型又又又卷起来了!微软开源三连发!一口气发布了 Phi 3.5 针对不同任务的 3 个模型,并在多个基准上超越了其他同类模型。 其中 Phi-3.5-mini-instruct 专为内存或算力受限的设备推出,小参数也能展现出强大的推理能力,代码生成、多语言理解等任务信手拈来。而 Phi-3.5-vision-instruct 则是多模态领域的翘楚,能同时处理文本和视觉信息,图像理解、视频摘要

ModuleNotFoundError: No module named ‘diffusers.models.dual_transformer_2d‘解决方法

Python应用运行报错,部分错误信息如下: Traceback (most recent call last): File “\pipelines_ootd\unet_vton_2d_blocks.py”, line 29, in from diffusers.models.dual_transformer_2d import DualTransformer2DModel ModuleNotF

用最简单的话来解释大模型中的Transformer架构

开篇 我个人的观点是要想系统而又透彻地理解 Transformer,至少要遵循下面这样一个思路(步骤): 理解NLP基础 在探讨Transformers之前,了解自然语言处理(NLP)的一些基本知识至关重要。NLP使计算机能够理解和生成自然语言,文本的表征是其核心任务之一。传统的语言模型往往依赖于递归神经网络(RNN)处理序列数据,但RNN在长序列中表现较差。为了解决这一问题,必须引入先