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

Swin Transformer V2 Scaling Up Capacity and Resolution(CVPR2022)


文章目录

  • Abstract
  • Introduction
    • 不稳定性问题
    • 下游任务需要的高分辨率问题
    • 解决内存问题
    • -
  • Related Works
    • Language networks and scaling up
    • Vision networks and scaling up
    • Transferring across window / kernel resolution
  • Swin Transformer V2
    • Swin Transformer简介
    • Scaling Up Model Capacity
      • Post normalization
      • Scaled cosine attention
    • Scaling Up Window Resolution
    • Self-Supervised Pre-training
    • Implementation to Save GPU Memory
  • Experiment
  • Conclusion

原文
代码

Abstract

大规模NLP模型已被证明可以显著提高语言任务的性能,而不会出现饱和的迹象,他们还展示了像人类一样的惊人的few-shot能力.本论文旨在探索计算机视觉中的大规模模型
我们解决了大视觉模型训练和应用中的三个主要问题,包括训练不稳定性、预训练和微调之间的分辨率差距以及对标记数据的饥渴
提出了三种主要技术:
1)残差-后范数法结合余弦注意提高训练稳定性;
2)采用对数空间连续位置偏差方法,将低分辨率图像预训练的模型有效地转移到具有高分辨率输入的下游任务中
3)一种自监督预训练方法SimMIM,以减少对大量分类图像的需求
通过这些技术,本文成功训练了一个30亿个参数的Swin Transformer V2模型,这是迄今为止最大的密集视觉模型,并使其能够使用分辨率高达1,536×1,536的图像进行训练
在ImageNet-V2图像分类、COCO目标检测、ADE20K语义分割、Kinetics-400视频动作分类等4项代表性视觉任务上创造了新的性能记录
我们的训练比b谷歌的十亿级视觉模型更有效,后者消耗的标记数据少了40倍,训练时间也少了40倍

Introduction

为了成功地训练大型和通用的视觉模型,我们需要解决几个关键问题

不稳定性问题

首先,我们对大视觉模型的实验揭示了训练中的不稳定性问题:我们发现,在大型模型中,不同层间的激活振幅差异显著增大,仔细观察原始架构就会发现,这是由直接添加回主分支的剩余单元的输出引起的,结果表明,激活值是逐层累积的,较深层的振幅明显大于早期的
为了解决这个问题,我们提出了一种新的规范化配置,称为res-post-norm,它将LN层从每个剩余单元的开始移动到后端,如图1所示
为了更好地扩展模型容量和窗口分辨率,对原始Swin Transformer架构(V1)进行了一些调整,我们发现,这种新配置在网络层上产生的激活值要温和得多,我们还提出了一种缩放余弦注意来取代之前的点积注意,缩放余弦注意使得计算与块输入的幅度无关,并且注意值不太可能陷入极端。在我们的实验中,这两种技术不仅使训练过程更加稳定,而且提高了训练精度,特别是对于更大的模型
为了更好地扩展模型容量和窗口分辨率,对原始Swin Transformer架构(V1)进行了一些调整:
1)用 res-post-norm 取代前规范配置;2)用缩放余弦方法代替原有的点积方法;3)用对数间隔连续相对位置偏差方法代替之前的参数化方法
(1)和(2)使模型更容易扩展容量。自适应(3)使模型更有效地跨窗口分辨率传输

下游任务需要的高分辨率问题

许多下游视觉任务,如目标检测和语义分割,需要高分辨率的输入图像或大的注意窗口,低分辨率预训练和高分辨率微调之间的窗口大小变化可能相当大
目前常见的做法是对位置偏置图进行双三次插值。这个简单的修复方法有些特别,结果通常不是最优的
我们引入了对数间隔连续位置偏置(Log-CPB),它通过在对数间隔坐标输入上应用一个小元网络来生成任意坐标范围的偏置值,由于元网络采用任意坐标,预训练模型将能够通过共享元网络的权重自由地跨窗口大小转移
我们方法的一个关键设计将坐标转换到对数空间中,这样即使目标窗口大小明显大于预训练的窗口大小,外推率也可以很低

解决内存问题

模型容量和分辨率的扩展导致现有视觉模型的GPU内存消耗过高
为了解决内存问题,我们结合了一些重要的技术,包括零优化器[54],激活检查指向[12]和一种新的自关注计算实现

-

使用这些技术,大模型和分辨率的GPU内存消耗显着降低,对训练速度只有边际影响。

Related Works

Language networks and scaling up

随着容量的增加,各种语言基准测试的准确性得到了显著提高。零样本或少样本性能也得到了显著提高,这是人类通用智能的基础

Vision networks and scaling up

可能是由于CNN架构中的归纳偏差限制了建模能力,绝对的性能并不是那么好
只有少数作品试图扩大ViT的规模[17,56,80]。然而,它们依赖于一个巨大的带有分类标签的图像数据集,即JFT-3B,并且仅用于图像分类问题

Transferring across window / kernel resolution

允许可变窗口大小在使用上更方便,以便被可能变化的整个特征映射所整除,并调整接受域以获得更好的交流精度
在本文中,我们提出了同间距连续位置偏差方法(Log-CPB),该方法可以更平滑地将低分辨率下的预训练模型权重转移到处理高分辨率窗口

Swin Transformer V2

Swin Transformer简介

Swin Transformer是一个通用的计算机视觉骨干,在区域级目标检测、像素级语义分割和图像级图像分类等各种粒度识别任务中取得了较强的性能。Swin Transformer的主要思想是在普通Transformer编码器中引入几个重要的视觉先验,包括层次、局部性和平移不变性,它结合了两者的优势:Transformer基本单元具有强大的建模能力,并且视觉先验使其对各种视觉任务友好

Scaling Up Model Capacity

当我们扩大模型容量时,在更深的层上观察到激活值的显著增加
事实上,在预归一化配置中,每个残差块的输出激活值直接合并回主支路,并且主支路的振幅在更深的层上变得越来越大。各层振幅差异大,导致训练失稳

Post normalization

为了缓解这个问题,我们建议使用残差后归一化方法,如图1所示
这种方法的激活幅度比原始的预归一化配置要温和得多,如图2

Scaled cosine attention

我们提出了一种缩放余弦注意方法,该方法通过缩放余弦函数计算像素对I和j的注意对数

Scaling Up Window Resolution

我们引入了一种对数间隔的连续位置偏置方法,使得相对位置偏置可以在窗口分辨率之间平滑地传递

Self-Supervised Pre-training

在这项工作中,我们利用了一种自我监督的预训练方法,SimMIM[72],以减轻对标记数据的需求

Implementation to Save GPU Memory

为了解决内存问题,我们采用了以下实现
Zero-Redundancy Optimizer (ZeRO)
Activation check-pointing
Sequential self-attention computation

Experiment

我们在ImageNet-1K图像分类(V1和V2)[18,55]、COCO目标检测[44]和ADE20K语义分割[85]上进行了实验。对于3B模型实验,我们也报告了kinect -400视频动作识别的准确性

Conclusion

我们已经提出了将Swin Trans- former缩放到30亿个参数的技术,并使其能够使用高达1,536×1,536分辨率的图像进行训练,包括res-post-norm和缩放余弦注意,使模型更容易在容量上缩放,以及对数间隔连续相对位置偏差方法,使模型更有效地跨窗口分辨率传输。
对改编后的体系结构进行命名Swin Transformer V2,通过扩大容量和分辨率,它在4个代表性视觉基准上创下了新的记录

相关文章:

Swin Transformer V2 Scaling Up Capacity and Resolution(CVPR2022)

文章目录 AbstractIntroduction不稳定性问题下游任务需要的高分辨率问题解决内存问题- Related WorksLanguage networks and scaling upVision networks and scaling upTransferring across window / kernel resolution Swin Transformer V2Swin Transformer简介Scaling Up Mod…...

rust学习——字符串、字符串字面量、切片(slice)、字符串 slice

文章目录 字符串、字符串字面量、切片(slice)、字符串 slice01、字符串02、字符串字面量03、切片 (slice)04、字符串 slice 字符串 slice注意要点String 与 &str 的转换字符串深度剖析字符串 slice 作为函数参数例子001例子00…...

SolidWorks模型导入到Gazebo中

首先建立好solidworks模型,然后另存为stl格式, 导出为STL文件时,文件名最好不要是中文,并且要将后缀STL改为stl,否则Gazebo无法识别 这是我创建好的机器人充电桩模型: 尺寸是单位是mm: 135mm …...

使用CMake构建一个简单的C++项目

文章目录 一. 构建一个简单的项目二. 构建过程1. 创建程序源文件2. 编写CMakeList.txt文件3. 构建项目并编译源代码 附件 一. 构建一个简单的项目 最基本的CMake项目是从单个源代码文件构建的可执行文件。对于像这样的简单项目,只需要一个包含三个命令的CMakeLists…...

图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例

文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引,初始值为…...

什么是卷积神经网络?解决了什么问题?

什么是卷积神经网络? 卷积神经网络(Convolutional Neural Network,CNN)是一种深度神经网络模型,主要用于图像识别、语音识别和自然语言处理等任务。它通过卷积层、池化层和全连接层来实现特征提取和分类。 解决了什么问…...

Golang数组:全面指南与实际示例

揭示Golang数组的威力:从基础到高级技巧 Golang数组是数据存储的基本构建块,为开发人员提供了多种可能性。在这篇正式的博客文章中,我们将探讨Golang数组,从基础知识到高级技巧。通过实际示例和正式的语气,我们将揭示…...

程序连接oracle查询数据的环境配置

连接oracle 数据库真麻烦,还是MySQL方便 Oracle Instant Client 这个东西的版本跟oracle的版本是有讲究的,引用文档的说明 Oracle 标准的客户端-服务器网络互操作性允许不同版本的 Oracle 客户端和 Oracle 数据库之间的连接。有关经过认证的配置&#…...

【BIGRU预测】基于双向门控循环单元的多变量时间序列预测(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

RDD算子操作(基本算子和常见算子)

目录 一、基本算子 1.map算子 2.flatMap算子 3.filter算子 4.foreach算子 5.saveAsTextFile算子 6.redueceByKey算子 二、常用Transformation算子 1.mapValues算子 2.groupBy算子 3.distinct算子 4.union算子 5.join算子 6.intersection算子 7.glom算子 8.groupByKey算…...

互联网Java工程师面试题·Java 面试篇·第五弹

目录 79、适配器模式和装饰器模式有什么区别? 80、适配器模式和代理模式之前有什么不同? 81、什么是模板方法模式? 82、什么时候使用访问者模式? 83、什么时候使用组合模式? 84、继承和组合之间有什么不同&#…...

常见的测试理论面试问题

请解释软件生存周期是什么? 软件生存周期是指从软件开发到维护的过程,包括可行性研究、需求分析、软件设计、编码、测试、发布和维护等活动。这个过程也被称为“生命周期模型”。 软件测试的目的是什么? 软件测试的目的是发现软件中的错误…...

把JS中的map方法玩出花来

一 map是什么 map(callbackFn) map(callbackFn, thisArg)map() 方法是一个迭代方法。它为数组中的每个元素调用一次提供的 callbackFn 函数,并用结果构建一个新数组。 参数 callbackFn 数组中的每个元素执行的函数。它的返回值作为一个元素被添加为新数组中。该…...

液晶显示计算器(延时程序)

#include "delay.h" /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请…...

线性代数2:梯队矩阵形式

图片来自 Europeana on Unsplash 一、前言 欢迎阅读的系列文章的第二篇文章,内容是线性代数的基础知识,线性代数是机器学习背后的基础数学。在我之前的文章中,我介绍了线性方程和系统、矩阵符号和行缩减运算。本文将介绍梯队矩阵形式&#xf…...

【JavaEE】网络编程(网络编程基础、Socket套接字)

一、网络编程基础 1.1、什么是网络编程? 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输) 注意:我们只要满足进程不同就行;所以即便是同一…...

Node学习笔记之模块化

一、介绍 1.1 什么是模块化与模块 ? 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他 模块使用 1…...

用matlab求解线性规划

文章目录 1、用单纯形表求解线性规划绘制单纯形表求解: 2、用matlab求解线性规划——linprog()函数问题:补充代码:显示出完整的影子价格向量 1、用单纯形表求解线性规划 求解线性规划 m i n − 3 x 1 − 4 x 2 x 3 min -3x_1-4x_2x_3 min−…...

antd获取/更改form表单数据(表单域数据)

创建ref引用 formRef React.createRef();表单和ref绑定 //ref{this.formRef} 先给Form <Form ref{this.formRef} name"control-ref" onFinish{this.onFinish}><Form.Item name"name" label"Name" rules{[{ required: true }]}>…...

Go学习第三章——运算符与进制

Go学习第三章——运算符与进制 1 算术运算符2 关系运算符3 逻辑运算符4 赋值运算符5 其他运算符5.1 位运算符5.2 跟指针有关的运算符 6 运算符的优先级7 获取用户终端输入8 进制转换8.1 进制基本使用8.2 进制之间的转换8.3 原码 反码 补码8.4 位运算符详解 运算符是—种特殊的符…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...