Pyramid Vision Transformer, PVT(ICCV 2021)原理与代码解读

paper:Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions

official implementation:GitHub - whai362/PVT: Official implementation of PVT series

存在的问题

现有的 Vision Transformer (ViT) 主要设计用于图像分类任务,难以直接用于像素级密集预测任务,如目标检测和分割。这是因为存在以下问题

  1. 低分辨率输出:传统的Vision Transformer(ViT)在处理密集预测任务(如目标检测和语义分割)时,输出分辨率较低,难以获得高质量的像素级别预测。
  2. 高计算和内存开销:ViT在处理大尺寸输入图像时,计算和内存开销较高,限制了其在实际应用中的效率。

本文的创新点

为了解决上述问题,作者提出了 Pyramid Vision Transformer (PVT), PVT结合了卷积神经网络的金字塔结构和Transformer的全局感受野,旨在克服传统Transformer在处理密集预测任务时遇到的分辨率低、计算和内存开销大的问题。它可以作为 CNN 骨干网络的替代品,用于多种下游任务,包括图像级预测和像素级密集预测。具体包括:

  1. 金字塔结构:PVT引入了金字塔结构,可以生成多尺度的特征图,这对于密集预测任务是有益的。
  2. 空间缩减注意力层(SRA):为了处理高分辨率特征图并减少计算/内存成本,作者设计了 SRA 层来替代传统的多头注意力 (MHA) 层。
  3. 纯Transformer骨干:PVT 是一个没有卷积的纯 Transformer 骨干网络,可以用于各种像素级密集预测任务,并与 DETR 结合构建了一个完全无需卷积的目标检测系统。

实际效果

  • PVT 在多个下游任务上进行了广泛的实验验证,包括图像分类、目标检测、实例和语义分割等,并与流行的 ResNets 和 ResNeXts 进行了比较。
  • 实验结果表明,在参数数量相当的情况下,PVT 在 COCO 数据集上使用 RetinaNet 作为检测器时,PVT-Small 模型达到了 40.4 的 AP(平均精度),超过了 ResNet50+RetinaNet(36.3 AP)4.1 个百分点。
  • PVT-Large 模型达到了 42.6 的 AP,比 ResNeXt101-64x4d 高出 1.6 个百分点,同时参数数量减少了 30%。
  • 这些结果表明 PVT 可以作为 CNN 骨干网络的一个有效的替代,用于像素级预测,并推动未来的研究。

方法介绍

Overall Architecture

PVT的整体结构如图3所示

和CNN backbone类似,PVT也有四个stage来生成不同尺度的特征图。所有stage都有一个相似的架构,包括一个patch embedding层和 \(L_i\) 个Transformer encoder层。

在第一个stage,给定大小为 \(H\times W\times 3\) 的输入图片,我们首先将其划分为 \(\frac{HW}{4^2}\) 个patch,每个大小为4x4x3。然后将展平的patch送入一个线性映射层得到大小为 \(\frac{HW}{4^2}\times C_1\) 的输出。然后将输出和位置编码一起进入有 \(L_1\) 层的Transformer encoder,得到的输出reshape成大小为 \(\frac{H}{4}\times \frac{W}{4}\times C_1\) 的特征图 \(F_1\)。同样的方式,以前一个stage的输出特征图作为输入,我们得到特征图 \(F_2,F_3,F_4\),相对于原始输入图片的步长分别为8,16,32。用了特征图金字塔 \(\{F_1,F_2,F_3,F_4\}\),我们的方法可以很容易地应用于大多数下游任务,包括图像分类、目标检测和语义分割。

Feature Pyramid for Transformer

和CNN backbone用不同stride的卷积来得到不同尺度特征图不同,PVT使用一个渐进式shrinking策略,通过patch embedding层来控制特征图的尺度。 

我们用 \(P_i\) 来表示第 \(i\) 个stage的patch size,在stage \(i\) 的开始,我们首先将输入特征图 \(F_{i-1}\in \mathbb{R}^{H_{i-1}\times W_{i-1}\times C_{i-1}}\) 均匀地划分成 \(\frac{H_{i-1}W_{i-1}}{P_i^2}\) 个patch,然后将每个patch展平并映射得到一个 \(C_i\) 维的embedding。在线性映射后,embedded patch的大小为 \(\frac{H_{i-1}}{P_i}\times \frac{W_{i-1}}{P_i}\times C_i\),其中宽高比输入小了 \(P_i\) 倍。

这样,我们就可以在每个stage灵活地调整特征图的尺度,从而将Transformer构建成金字塔结构。

Transforme Encoder

由于PVT需要处理高分辨率(stride-4)的特征图,我们提出了一种spatial-reduction attention(SRA)来替换encoder中传统的multi-head attention(MHA)。

和MHA类似,SRA的输入包括一个query \(Q\),一个key \(K\),一个value \(V\)。不同的是SRA在attention operation之前减小了 \(K\) 和 \(V\) 的大小,如图4所示,这大大减少了计算和内存的开销。

stage \(i\) 的SRA如下

其中 \(Concat(\cdot)\) 是拼接操作。\(W^{Q}_j\in \mathbb{R}^{C_i\times d_{head}},W^{K}_j\in \mathbb{R}^{C_i\times d_{head}},W^{V}_j\in \mathbb{R}^{C_i\times d_{head}},W^O\in \mathbb{R}^{C_i\times C_i}\) 是线性映射参数。\(N_i\) 是stage \(i\) 中attention层的head数量,所以每个head的维度(即\(d_{head}\))等于 \(\frac{C_i}{N_i}\)。\(SR(\cdot)\) 是降低输入序列(即 \(K\) 或 \(V\))空间维度的操作,如下:

其中 \(\mathbf{x}\in\mathbb{R}^{(H_iW_i)\times C_i}\) 表示一个输入序列,\(R_i\) 表示stage \(i\) 中attention层的reduction ratio。\(Reshape(\mathbf{x},R_i)\) 是将输入序列 \(\mathbf{x}\) reshape成大小为 \(\frac{H_iW_i}{R^2_i}\times (R^2_iC_i)\) 的序列的操作。\(W_S\in \mathbb{R}^{(R^2_iC_i)\times C_i}\) 是一个linear projection,它将输入序列的维度降低到 \(C_i\)。\(Norm(\cdot)\) 是layer normalization。和原始的Transformer一样,attention operation按下式计算

通过上述公式我们可以发现,MSA的计算/内存开销是MHA的 \(\frac{1}{R^2}\),因此MSA可以在有限的资源下处理更大的输入特征图或序列。

代码解析

见PVT v2的代码解析 PVT v2 原理与代码解析-CSDN博客

实验结果 

模型涉及到的一些超参总结如下:

  • \(P_i\):stage \(i\) 的patch size
  • \(C_i\):stage \(i\) 的输出通道数
  • \(L_i\):stage \(i\) 中的encoder层数
  • \(R_i\):stage \(i\) 中SRA的reduction ratio
  • \(N_i\):stage \(i\) 中SRA的head数量
  • \(E_i\):stage \(i\) 中FFN层的expansion ratio

作者设计了一系列的PVT模型,具体配置如表1

和其它SOTA模型在ImageNet的结果对比如表2所示

用RetinaNet上和其它backbone的结果对比如表3所示,可以看到PVT不同大小的模型与ResNet系列相比,参数更少精度更高。

在语义分割模型Semantic FPN上PVT也超越了对应的ResNet

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

豆包引领AI大模型PC端新潮流,预示行业薪资待遇与就业前景的广阔前景

前言 在AI大模型技术迅速发展的浪潮中,豆包AI助手凭借其独特的PC端布局,成为了行业的先行者。这一举措不仅体现了对市场需求和用户习惯的深度洞察,更预示着AI大模型领域薪资待遇和就业前景的广阔空间。 豆包AI助手通过推出PC客户端&#x…

tomcat-valve通过servlet处理请求

上一节说到请求url定位servlet的过程,tomcat会把请求url和容器的映射关系保存到MappingData中,org.apache.catalina.connector.Request类实现了HttpServletRequest,其中定义了属性mappingDataprotected final MappingData mappingData new M…

国产Sora免费体验-快手旗下可灵大模型发布

自从OpenAI公布了Sora后,震爆了全世界,但由于其技术的不成熟和应用的局限性,未能大规模推广,只有零零散散的几个公布出来的一些视频。昨日,快手成立13周年,可灵(Kling)大模型发布&am…

【vue3|第7期】 toRefs 与 toRef 的深入剖析

日期:2024年6月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xff…

vs2017中C2440错误:“初始化”:无法从const char[6]转换为char*问题解决

本文摘要:本文已解决 Python FileNotFoundError 的相关报错问题,并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。 😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领…

LLM系列: LLama2

推理流程 从输入文本,到推理输出文本,LLama2模型处理流程如下: step1 Tokenization 输入数据:一个句子或一段话。通常表示成单词或字符序列。 Tokenization即对文本按单词或字符序列切分,形成Token序列。Token序列再…

【Vue2源码学习分析】

# 文件结构 源码目录 # 调试环境搭建 安装依赖: npm i安装rollup: npm i -g rollup修改dev脚本,添加sourcemap,package.json "dev": "rollup -w -c scripts/config.js --sourcemap --environment TARGET:web- full-dev",运行开发命令…

LabVIEW阀性能试验台测控系统

本项目开发的阀性能试验台测控系统是为满足国家和企业相关标准而设计的,主要用于汽车气压制动系统控制装置和调节装置等产品的综合性能测试。系统采用工控机控制,配置电器控制柜,实现运动控制、开关量控制及传感器信号采集,具备数…

后端进阶-分库分表

文章目录 为什么需要分库为什么需要分表 什么时候需要分库分表只需要分库只需要分表 分库分表解决方案垂直分库水平分库垂直分表水平分表 分库分表常用算法范围算法hash分片查表分片 分库分表模式客户端模式代理模式 今天跟着训练营学习了分库分表,整理了学习笔记。…

Spring系统学习 -Spring IOC 的XML管理Bean之bean的获取、依赖注入值的方式

在Spring框架中,XML配置是最传统和最常见的方式之一,用于管理Bean的创建、依赖注入和生命周期等。这个在Spring中我们使用算是常用的,我们需要根据Spring的基于XML管理Bean了解相关Spring中常用的获取bean的方式、依赖注入值的几种方式等等。…

C++ Thread多线程并发记录(8)生产者-消费者模型与信号量(条件变量)

一.生产者-消费者模型 生产者-消费者模型是一个十分经典的多线程并发协作模式。所谓的生产者-消费者,实际上包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系&#xff…

苹果Safari怎么清理缓存?原来快速清除浏览器的历史记录那么容易

在数字化时代,互联网已经成为我们日常生活中不可或缺的一部分。我们使用各种设备,如智能手机、平板电脑和笔记本电脑来浏览网页、获取信息、娱乐和社交。而在这些设备中,iPhone无疑是最受欢迎的选择之一。iPhone搭载的Safari浏览器以其简洁的…

three.js官方案例(animation / multiple)webgl_animation_multiple.html学习笔记

目录 ​编辑 1 骨架工具(SkeletonUtils) 1.1 clone方法 2 蒙皮网格(SkinnedMesh) 3 自测 4 webgl_animation_multiple.html全部脚本 1 骨架工具(SkeletonUtils) 用于操控 Skeleton、 SkinnedMesh、和…

Spring AI 第二讲 之 Chat Model API 第八节Anthropic 3 Chat

Anthropic Claude 是一系列基础人工智能模型,可用于各种应用。对于开发人员和企业来说,您可以利用 API 访问,直接在 Anthropic 的人工智能基础架构之上进行构建。 Spring AI 支持用于同步和流式文本生成的 Anthropic 消息 API。 Anthropic …

因为宇宙一片漆黑,所以地球才有昼夜之分,宇宙为什么是黑的?

因为宇宙一片漆黑,所以地球才有昼夜之分,宇宙为什么是黑的? 地球为何会有昼夜之分? 乍一看,这个问题很是简单,当然是因为地球一直在自转了,当地球的一部分被太阳照射时就是白昼,而…

Servlet搭建博客系统

现在我们可以使用Servlet来搭建一个动态(前后端可以交互)的博客系统了(使用Hexo只能实现一个纯静态的网页,即只能在后台自己上传博客)。有一种"多年媳妇熬成婆"的感觉。 一、准备工作 首先创建好项目,引入相关依赖。具体过程在"Servlet的创建"中介绍了。…

【Vue】单页应用程序介绍

通常基于Vue去开发一整个网站,开发出来的这整个网站应用,我们都会叫做单页应用程序 概念 单页应用程序:SPA【Single Page Application】是指所有的功能都在一个html页面上实现 我们可以将页面共用的部分封装成组件,底下要切换的也…

A6500-LC LVDT 前置器,用于A6500-UM, 导轨安装

电源 22.5V to 32VDC <30mA <0.1%/V <60V( 使用SELV/PELV 供电电源) 约2.2Vrms,5kHz IP20 IEC 60529 -35C to 75C(-31F to 167F) -35C to 85C(-31F to 185F) 电流损耗 供电电压对 运行温度 存储温度 0.35mm(0.014 in ),10 to 55Hz 15g 根据 EN 60068-2-27 根据IEC 613…

nginx配置WebSocket参数wss连接

目录 一、原文连接 二、 配置参数 三、实践 四、重启nginx 五、连接websocket 一、原文连接 nginx配置websocket支持wss-腾讯云开发者社区-腾讯云 二、 配置参数 map $http_upgrade $connection_upgrade { default upgrade; close; } upstream websocket { se…

大数据处理学习笔记

sudo tar -zxvf hadoop-1.1.2.tar.gz -C / #解压到/usr/local目录下 sudo mv hadoop-1.1.2 hadoop #重命名为hadoop sudo chown -R python ./hadoop #修改文件权限 //java安装同上给hadoop配置环境变量&#xff0c;将下面代…