PVT重磅升级:三点改进,性能大幅提升

2023-11-09 17:20

本文主要是介绍PVT重磅升级:三点改进,性能大幅提升,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编辑:Happy
首发:AIWalker

标题&作者团队

标题&作者团队

本文是南京大学&港大&南理工&商汤团队针对PVT的升级,针对PVT存在的不足提出了三点改进(1)采用卷积提取局部连续特征;(2)带zero-padding 的重叠块嵌入提取位置信息编码;(3)带均值池化、线性复杂度的注意力层。受益于上述三点改进措施,所得PVTv2取得了显著优于PVTv1的性能,同时具有比Swin更佳的性能。

Abstract

Transformer在CV领域取得了喜人的进展。在本文工作中,我们在PVT(后称PVTv1)的基础上引入了如下三个改进得到了PVTv2:

  • 采用卷积提取局部连续特征;

  • zero-padding的位置编码;

  • 带均值池化的线性复杂度的注意力层。

基于上述改进,所提PVTv2在分类、检测以及分割方面取得了显著优于PVTv1的性能,比如,PVTv2-B5在ImageNet上取得了83.8%的top1精度,优于Swin-B于Twins-SVT-L同时具有更少参数量与计算量;GFL+PVT-B2的组合在COCO-val2017数据集取得了50.2AP指标,显著优于Swin-T(高2.6AP)与ResNet50(高5.7AP)。更进一步,基于ImageNet-1K预训练,相比近期的工作(包含Swin Transformer)所提PVTv2取得了更佳的性能。

前情回顾

上图给出了PVT的架构示意图,PVT旨在将金字塔结构嵌入到Transformer结构用于生成多尺度特征,并最终用于稠密预测任务。类似与CNN骨干结构,PVT同样包含四个阶段用于生成不同尺度的特征,所有阶段具有相类似的结构:Patch Embedding+Transformer Encoder

在第一个阶段,给定尺寸为的输入图像,我们按照如下流程进行处理:

  • 首先,将其划分为的块(这里是为了与ResNet对标,最大输出特征的尺寸为原始分辨率的1/4),每个块的大小为;

  • 然后,将展开后的块送入到线性投影曾得到尺寸为的嵌入块;

  • 其次,将前述嵌入块与位置嵌入信息送入到Transformer的Encoder,其输出将为reshap为.

采用类似的方式,我们以前一阶段的输出作为输入即可得到特征。基于特征金字塔,所提方案可以轻易与大部分下游任务(如图像分类、目标检测、语义分割)进行集成。

对PVT一文感兴趣的朋友,可移步笔者之前的解读:

金字塔Transformer,更适合稠密预测任务的Transformer骨干架构

Improved Pyramid Vision Transformer

类似ViT,PVTv1同样将图像视作非重叠块序列,而这种处理方式会在一定程度上破坏图像的局部连续性。此外,PVTv1中采用了定长位置编码,这对于任意尺度图像处理不够灵活。这些问题均限制了PVTv1在视觉任务方面的性能。

为解决上述问题,我们提出了PVTv2,它主要针对PVTv1进行了以下三个方面的改进。

Overlapping Patch Embedding

下图对比了PVTv1与PVTv2在块嵌入方面的差异示意图。也就是说,在PVTv2中,我们采用重叠块嵌入对图像进行序列化。下上图a为例,我们扩大了块窗口,使得近邻窗口重叠一半面积。在这里,我们采用带zero-padding的卷积实现重叠块嵌入。具体来说,给定尺寸为的输入,我们采用stride=S,核尺寸为,padding为S-1的卷积进行处理,输出尺寸为。

Convolutional Feed-Forward

受启发于LocalViT、CPVT,我们移除了定长位置编码,将zero-padding位置编码引入到PVT,见上图b。我们采用了深度卷积、全连接层以及GELU构建了前馈网络。

Linear Spatial Reduction Attention

为进一步减少PVT的计算量,我们提出了LSRA(Linear Spatial Reduction Attention),见上图。与SRA不同之处,LSRA具有线性复杂度、内存占用与卷积类似。具体来说,给定的输如,SRA与LSRA的复杂度分别如下:

其中,R表示SRA的空间分辨率下降比例,P为LSRA的池化尺寸,默认为7。

Details of PVTv2 Seris

组合上述三点改进即得到了本文的PVTv2,它具有以下三个特性:

  • 包含图像/特征更多的局部连续性;

  • 更灵活的处理可变分辨率图像;

  • 具有类似CNN的线性复杂度

通过改变如下超参数,我们构建了不同版本的PVTv2(B0-B5)。

  • :表示阶段i的重叠块嵌入的stride;

  • :表示阶段i的输出通道数;

  • :表示阶段i的编码器层数;

  • :表示阶段i的SRA的下降比例;

  • :表示阶段i的LSRA的自适应均值池化尺寸;

  • :表示阶段i的Efficient Self-Attention的头数;

  • :表示阶段i的前馈层的扩张比例。

上表给出了PVTv2的结构信息,该设计参考ResNet的设计原则:

  • 通道维度随空间分辨率收缩而提升;

  • Stage-3被赋予更多的计算量。

Experiments

在实验方面,我们主要在ImageNet分类、COCO检测与实例分割方面进行了对比。

ImageNet

上表给出了ImageNet上的性能对比,从中可以看到:

  • 相比PVT,PVTv2具有相似的FLOPs与参数量,但性能取得了显著提升。比如,相比PVTv1-tiny,PVTv2-B1指标高3.6%;相比PVT-large,PVTv2-B4指标高1.9%;

  • 性比其他方案,PVTv2同样具有显著优势(精度、模型大小)。比如,相比Swin与Twins,所提PVTv2-B5取得了83.8%top1精度,指标更高、参数量与FLOPs更低。

COCO

上表给出了COCO目标检测与实例分割方面的性能对比,从中可以看到:在单阶段与双阶段目标检测方面,PVTv2均比PVTv1具有更好的性能:相同模型大小,更高的指标。比如,基于RetinaNet,PVTv2-B4取得了46.4AP指标,以3.5AP超过了PVTv1;基于Mask R-CNN,PVTv2-B4取得了47.5AP指标,以3AP优于PVTv1。

为了与Swin更公平的对比,我们确保所有配置相同(包含预训练与微调)并在四种不同的检测器框架下进行了对比,结果见上表。从中可以看到:PVTv2在四种检测器框架下均取得了比Swin更佳的 AP指标,证实了其优异的特征表达能力。比如,基于ATSS框架,相比Swin-T,所提PVTv2取得了2.7指标提升且具有相似参数量与计算量;所提PVTv2-Li可以将计算量从258G减少到194G,而精度仅轻微下降(约1AP)。

推荐阅读

  1. “重参数宇宙”再添新成员:RepMLP,清华大学&旷视科技提出将重参数卷积嵌入到全连接层

  2. 新坑!谷歌提出MLP-Mixer:一种无卷积、无注意力,纯MLP构成的视觉架构

  3. CVPR2021 | 动态滤波器卷积新高度!DDF:同时解决内容不可知与计算量两大缺陷

  4. CVPR2021|“无痛涨点”的ACNet再进化,清华大学&旷视科技提出Inception类型的DBB

  5. TNT|为充分利用局部与全局结构信息,华为诺亚提出全新Transformer:TNT

  6. 金字塔Transformer,更适合稠密预测任务的Transformer骨干架构

  7. 来自Transformer的降维打击:ReID各项任务全面领先,阿里&浙大提出TransReID

  8. ResNet被全面超越了,是Transformer干的:依图科技开源“可大可小”T2T-ViT,轻量版优于MobileNet

  9. CNN与Transformer的强强联合!谷歌最新开源BoTNet,ImageNet达84.7%准确率

  10. Transformer再下一城!low-level多个任务榜首被占领,北大华为等联合提出预训练模型IPT

- END -

这篇关于PVT重磅升级:三点改进,性能大幅提升的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭