当前位置: 首页 > news >正文

ResT v2 论文解读

paper:ResT V2: Simpler, Faster and Stronger

official implementation:https://github.com/wofmanaf/ResT

出发点

ResTv2的设计目标是改进先前版本ResTv1的结构,以提高模型的效率和性能。ResTv1通过引入多尺度注意力机制(EMSA),在视觉识别任务中取得了良好的效果。然而,EMSA的下采样操作会损失部分重要信息,特别是在早期阶段。为了弥补这一问题,ResTv2引入了上采样操作,构建了独立的卷积沙漏结构,以更高效地捕捉局部信息。

创新点

  1. 简化的EMSA结构:ResTv2通过移除多头交互部分,简化了EMSA结构,减少了计算复杂度。
  2. 上采样操作:为了重建下采样操作丢失的中高频信息,ResTv2引入了多种上采样策略,如“nearest”、“bilinear”和“pixel-shuffle”等。其中,pixel-shuffle策略效果最好。
  3. 独立卷积沙漏架构:EMSA v2的“下采样-上采样”组合构建了一个独立的卷积沙漏架构,能够高效地捕捉局部信息,这些信息对长距离依赖关系是补充。

方法介绍

如图1所示,虽然EMSA中的降采样操作可以显著降低计算开销,但不可避免地会丢失一些重要信息,特别是在早期阶段。为了在不对实际运行速度产生较大影响的前提下,有效地重构丢失的信息,作者提出直接对values进行上采样操作。有多种上采样策略,比如“nearest”,“bilinear”,“pixel-shuffle”等,作者发现它们都能提高模型性能,但pixel-shuffle(首先利用一个DWConv来扩展通道维度,然后再使用pixel-shuffle来上采样空间维度)表现最好。这样得到的新的self-attention结构称为EMSA v2,如图2(b)所示。【注:代码中通过Pytorch中的nn.PixelShuffle来实现上采样,它是将通道维度的值重排列移动到空间维度,类似于Yolo v5中focus的逆操作】

EMSA v2中的“下采样-上采样”组合恰好组成了一个独立的卷积沙漏结构,它可以用较少的额外参数和计算开销有效地捕捉局部信息,作为长距离依赖的补充。此外作者发现,EMSA v2中的多头交互模块尽管可以提高最终性能,但会降低实际推理速度。并且性能提升会随着每个head的通道维度的增加而降低。因此为了更快的推理速度我们在默认设置中删去了它。但如果head维度很小(例如64或更小),multi-head interaction module的作用会更显著。EMSA v2可以表示如下

实验结果

基于EMSAv2,作者构建了不同大小的ResTv2,具体配置如下

在ImageNet上的结果如表1所示,可以看到ResT v2相较于v1获得了明显的提升,比如ResTv2-T比ResTv1-B精度提升了0.7%同时推理速度更快。和其它模型相比提升也很明显,例如ResTv2-T比Swin-T精度提升了1%。

在下游任务例如COCO上的目标检测、ADE20K上的语义分割上的提升也很明显。 

作者还进行了一些消融实验,例如本文采用的是对value进行上采样,还可以对下采样的结果 \(x'\) 或key进行上采样,结果如下表所示,可以看到对value上采样的效果是最好的。 

下面是不同上采样方法的对比,可以看到pixel-shuffle的效果最好。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python Formulas模型以JSON格式文件导出导入
  • 运行ruoyi
  • 秋招突击——7/23——百度提前批面试准备和正式面试
  • vivado IOSTANDARD
  • 计算机网络-配置双机三层互联(静态路由方式)
  • 独立游戏《星尘异变》UE5 C++程序开发日志8——实现敏感词过滤功能(AC自动机)
  • TCP服务器主动断开客户端
  • WPF项目实战视频《二》(主要为prism框架)
  • Hadoop3:大数据生态圈及相关工作岗位
  • 【python_将一个列表中的几个字典改成二维列表,并删除不需要的列】
  • 刷新当前页面
  • 【Vue】vue两个核心功能声明式渲染_响应式
  • React前端面试每日一试 1.虚拟DOM是什么?
  • GNU/Linux - Bazaar版本管理工具
  • Vue系列面试题
  • github从入门到放弃(1)
  • Git同步原始仓库到Fork仓库中
  • java8-模拟hadoop
  • Just for fun——迅速写完快速排序
  • Mybatis初体验
  • Node 版本管理
  • Redux 中间件分析
  • 关于springcloud Gateway中的限流
  • 做一名精致的JavaScripter 01:JavaScript简介
  • kubernetes资源对象--ingress
  • 说说我为什么看好Spring Cloud Alibaba
  • 组复制官方翻译九、Group Replication Technical Details
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #git 撤消对文件的更改
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (分布式缓存)Redis持久化
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转载)深入super,看Python如何解决钻石继承难题
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET CF命令行调试器MDbg入门(一)
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 反射的使用
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .net开发日常笔记(持续更新)
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @RequestBody与@ModelAttribute
  • [2669]2-2 Time类的定义
  • [Android] 修改设备访问权限
  • [C#] 如何调用Python脚本程序
  • [C++]运行时,如何确保一个对象是只读的
  • [FlareOn5]Ultimate Minesweeper
  • [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包
  • [JavaWeb]—前端篇
  • [JAVA设计模式]第二部分:创建模式