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

news2024/11/19 16:44:18

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一键生成迷宫-Word插件-大珩助手新功能

Word大珩助手是一款功能丰富的Office Word插件,旨在提高用户在处理文档时的效率。它具有多种实用的功能,能够帮助用户轻松修改、优化和管理Word文件,从而打造出专业而精美的文档。 【新功能】迷宫生成器 1、可自定义迷宫大小; …

【第二节】C/C++数据结构之线性表

目录 一、线性表基本说明 1.1 基本概念 1.2 抽象数据类型 1.3 存储结构 1.4 插入与删除的区别 1.5 顺序存储和链式存储的优缺点 二、链表 2.1 基本概念 2.2 抽象数据类型 2.3 单链表的定义 2.4 单链表的基本操作 2.5 单链表模板形式的类定义与实现 三、单向循环链…

SpringBoot高手之路03-事务传播行为

那么就是 a事务调用了b事务 日志技术 当解散部门的时候,那么就直接进行 操作日志 就是什么时间点吧部门解散 成功失败都需要记录日志 首先一个日志表 那么日志技术,在电商平台,不论是否支付订单,那么都需要保存订单信息 这个时候我们就使用传播事务 传播事务首先是出现在两…

AI重塑搜索和浏览器,360打造AIPC轻量化方案

6月6日,360AI新品发布会暨开发者沟通会在京举办,360集团发布全新360AI搜索、360AI浏览器,360集团创始人周鸿祎在现场使用360AI搜索为2024年高考语文作文押题。同时,“360AI甄选”平台及会员体系“360AI大会员”正式上线&#xff0…

前端开发常用的工具和软件,提高编程效率

目录 1. 文本编辑器与IDE (集成开发环境)2. 版本控制工具3. 构建工具与包管理器4. 前端框架与库5. 设计与原型工具6. 测试与调试工具7. 代码协作与项目管理8. 自动化部署与持续集成/持续部署(CI/CD)相关链接: 前端开发过程中使用的工具和软件种类繁多,可…

「动态规划」如何求地下城游戏中,最低初始健康点数是多少?

174. 地下城游戏https://leetcode.cn/problems/dungeon-game/description/ 恶魔们抓住了公主并将她关在了地下城dungeon的右下角。地下城是由m x n个房间组成的二维网格。我们英勇的骑士最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士…

PLC通过Profinet转Modbus网关与流量计通讯案例

1、案例背景 在工业自动化系统中,PLC(可编程逻辑控制器)与流量计之间的通信是保证以后设备生产数据准确传输和实现控制功能的关键。但是,由于PLC和流量计可能使用不同的通信协议(如Profinet和Modbus),因此需要一种转换机制来实现它们之间的通…

python tqdm怎么安装

tqdm是一个显示循环的进度条的库。taqadum, تقدّم)在阿拉伯语中的意思是进展。tqdm可以在长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator),是一个快速、扩展性强的进度条工具库。 tqdm库的安装 在CMD窗口下输…

Day14:响应式网页

通过媒体查询、Bootstrap 框架完成腾讯全端网页响应式布局。 一、响应式布局方案 1、什么是响应式布局 它的主要特点是能够使网页根据不同的设备屏幕尺寸(如桌面电脑、平板电脑、手机等)和分辨率自动调整布局和显示效果,以提供最佳的用户体…

Django 里的表格内容做修改

当Django里表格内容需要做修改&#xff0c;可以这么操作。 先看效果图 修改后的表格 1. 先得在 asset_list.html 里修改。你们的html有可能跟我不一样 <table border"1px"><thead><tr><th>ID</th><th>标题</th><th…

千问Qwen7B chat:本地部署及网页端使用

基于前面的安装经验&#xff0c;千问大模型的本地部署并不算难&#xff0c;主要时间用在大模型文件的下载上。同时系统运行对硬件也有较高的要求&#xff0c;本机的硬件配置为N卡3060&#xff0c;显存12G。 使用conda创建虚拟环境&#xff0c;主要版本如下&#xff1a; Pyth…

代码随想录算法训练营第30天|回溯复习篇

回溯基础理论 1.回溯的本质是利用递归进行暴力搜索&#xff0c;将符和条件的结果集搜索出来 2.回溯法常见的问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合排列问题&#xff1a;N个数按一定规则全排列&#xff0c;有几种排列方式切割问题&#x…

算法003:快乐数

这道题采用快慢双指针的方法。 为了弄清楚这个题到底是要我们干嘛&#xff0c;我们把整个过程类比一下&#xff1a; 不管是n19还是n2&#xff0c;我们都把它当成一种判断链表是否有环的方式。 对于n19&#xff0c;题干是这样解释的&#xff1a; 我们把它当成链表&#xff0c…

麒麟v10系统arm64架构openssh9.7p1的rpm包

制作openssh 说明 理论上制作的多个rpm在arm64架构&#xff08;aarch64&#xff09;都适用 系统信息&#xff1a;4.19.90-17.ky10.aarch64 GNU/Linux 升级前备份好文件/etc/ssh、/etc/pam.d等以及开启telnet 升级后确认正常后关闭telnet 在之前制作过openssh-9.5p1基础上继续…

算法题--华为od机试考试(围棋的气、用连续自然数之和来表达整数、亲子游戏)

目录 围棋的气 题目描述 输入描述 示例1 输入 输出 解析 答案 用连续自然数之和来表达整数 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入 输出 解析 答案 亲子游戏 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入…

SpringBoot项目启动后访问网页显示“Please sign in“

SpringBoot启动类代码如下 SpringBoot项目启动后访问网页显示"Please sign in"&#xff0c;如图 这是一个安全拦截页面&#xff0c;即SpringSecurity认证授权页面&#xff0c;因为SecurityAutoConfiguration是Spring Boot提供的安全自动配置类&#xff0c;也就是说它…

使用onnxruntime加载YOLOv8生成的onnx文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…

React 18

创建 React 18 脚手架项目 全局安装 create-react-app npm install -g create-react-app yarn global add create-react-app . 确认是否已安装 create-react-app npm list -g create-react-app yarn global list | grep create-react-app . 如果安装失败 有时&#xff0…

Vue3整合Tailwindcss之padding样式类

04 常用基础样式 padding 样式类 什么是内边距 基础样式 ClassPropertiesp-0padding: 0px;px-0padding-left: 0px; padding-right: 0px;py-0padding-top: 0px; padding-bottom: 0px;ps-0padding-inline-start: 0px;pe-0padding-inline-end: 0px;pt-0padding-top: 0px;pr-0pa…

JVM 运行流程

JVM 是 Java 运行的基础&#xff0c;也是实现一次编译到处执行的关键&#xff0c;那么 JVM 是如何执行的呢&#xff1f; JVM 执行流程 程序在执行之前先要把java代码转换成字节码&#xff08;class 文件&#xff09;&#xff0c; JVM 首先需要把字节码通过一定的 方式 类加…