论文精读:Swin Transformer V2: Scaling Up Capacity and Resolution

news/2024/5/15 22:55:49/文章来源:https://blog.csdn.net/qq_52053775/article/details/127771922

论文地址:https://arxiv.org/pdf/2111.09883.pdf 

代码地址: GitHub - microsoft/Swin-Transformer: This is an official implementation for "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows".

Abstract

        本篇论文主要致力于解决大型视觉模型的训练和应用中的三个主要问题,包括训练的不稳定性、训练前和微调之间的分辨率差距,以及transformer需要高数据量。 提出了三种主要方法: 1)结合余弦注意的残差连接后进行归一化提高训练稳定性;2)对数间隔连续位置偏差方法,有效地将低分辨率图像预训练的模型转移到具有高分辨率输入的下游任务中;3)自监督预训练方法SimMIM,以减少对大量数据的需求。通过这些方法,本文训练了一个30亿参数的Swin transformer V2模型,这是迄今为止最大的密集视觉模型,并使其能够用高达1536×1536分辨率的图像进行训练。

1. Introduction

        为了成功地训练大型和通用的视觉模型,需要解决几个关键问题。首先,我们的大视觉模型实验揭示了训练中的一个不稳定性问题我们发现,在大型模型中,跨层的激活振幅的差异显著增大。仔细观察原始架构就会发现,这是由直接添加到主分支的残差单元的输出造成的。结果表明,激活值是逐层积累,因此深层的振幅明显大于早期层。为了解决这个问题,我们提出了一种新的标准化配置,称为res-post-norm,它将LN层从每个残差单元的开始移动到后端,如图1所示。 我们发现这种新配置在网络层中产生更温和的激活值。我们还提出了一个缩放的余弦注意来取代以前的点积注意。缩放的余弦注意使得计算与块输入的振幅无关,并且注意值不太可能落入极端值。在我们的实验中,所提出的两种技术不仅使训练过程更加稳定,而且提高了精度,特别是对于更大的模型。

         检测和语义分割需要高分辨率的输入图像或较大的注意窗口。低分辨率预训练和高分辨率微调之间的窗口大小变化可能相当大。目前常见的做法是对位置偏置映射[22,46]进行双三次插值。这个简单的修复是有些特别的,而且结果通常是次优的。我们引入了一个对数间隔的连续位置偏差(Log-CPB),它通过对对数间隔的坐标输入应用一个小的元网络来生成任意坐标范围的偏差值。由于元网络可以处理任何坐标,所以一个预先训练好的模型将能够通过共享元网络的权值来自由地跨窗口大小进行传输。我们的方法的一个关键设计是将坐标转换为对数空间,这样即使目标窗口大小明显大于训练前,外推比也可以很低。模型容量和分辨率的扩大也导致了现有视觉模型的高GPU内存消耗。为了解决内存问题,我们结合了几个重要的技术,包括zero-optimizer[54],activation checkpointing [12]和一个新的sequential self-attention computation

的实现。使用这些方法,大模型和分辨率的GPU内存消耗显著降低,而对训练速度的影响很小。

3. Swin Transformer V2         

3.1. A Brief Review of Swin Transformer         

在扩大模型容量和窗口分辨率方面存在的问题:

        在扩大模型容量时出现的不稳定性问题。如图2所示,当我们将原始的Swin transformer模型从小尺寸扩展到大尺寸时,更深层的激活值显著增加。最高振幅和最低振幅层之间的差异达到了极值10^4。当我们进一步扩展到一个巨大的规模(6.58亿个参数)时,它无法完成训练,如图3所示。         

 

        在跨窗口分辨率传输模型时,性能下降。如表1第一行所示,当我们通过双立方插值方法直接测试预先训练好的ImageNet-1K模型(256×256×,8×8窗口尺寸)在更大的图像分辨率和窗口尺寸下的精度时,精度显著下降。有必要重新研究相对位置偏差方法 

3.2. Scaling Up Model Capacity          

        如第3.1节所述,原始的Swin变压器(和大多数视觉变压器)在每个块的开始都采用了一层规范层,继承了ViT。当我们扩大模型容量时,在更深的层次上观察到激活值的显著增加。实际上,在预归一化配置中,每个残差块的输出激活值直接合并到主分支,并且主分支的振幅在更深的层次上越来越大。不同层的振幅差异较大,导致训练不稳定。 

        Post normalization  为了缓解这个问题,我们建议在残差连接后进行标准化,如图1所示。在这种方法中,每个残差块的输出在合并回主分支之前被归一化,当层越深时,主分支的振幅不会累积。如图2所示,这种方法的激活振幅比原始的预归一化配置要温和得多。

        在我们最大的模型训练中,我们每6个transformer块在主分支上引入一个额外的层归一化层,以进一步稳定训练。

        Scaled cosine attention   在原始的自注意计算中,像素对的相似度项被计算为query和key向量的点积。我们发现,当这种方法用于大型视觉模型时,一些block和head的注意力经常被少数像素对所主导,特别是在res-post-norm配置中。为了缓解这个问题,我们提出了一种缩放余弦注意方法,通过缩放余弦函数计算像素对i和j的注意logit:

         其中,B_{ij}是像素i和像素j之间的相对位置偏差;τ是一个可学习的标量,在头部和层之间不共享。τ被设置为大于0.01。余弦函数是自然归一化,因此可以有较温和的注意值。

3.3. Scaling Up Window Resolution         

        在本小节中,我们引入了一种对数间隔的连续位置偏差方法,以便相对位置偏差可以在窗口分辨率之间平滑地转移。

        Continuous relative position bias  连续位置偏差方法没有直接优化参数化偏差,而是在相对坐标上采用了一个小的元网络:

 

         其中G是一个小网络,例如,一个2层MLP,默认之间有一个ReLU激活。

        元网络G为任意的相对坐标生成偏差值,因此可以自然地转移到具有任意变化的窗口大小的微调任务中。在推理中,可以预先计算每个相对位置的偏差值,并作为模型参数存储,使推理与原始参数化偏差方法相同。

        Log-spaced coordinates  当跨很大程度上不同的窗口大小进行传输时,需要外推大部分相对坐标范围。为了缓解这个问题,我们建议使用对数间隔的坐标,而不是原来的线性间隔的坐标:

 

        其中,∆x、∆y和∆cx、∆cy分别为线性尺度坐标和对数间隔坐标。通过使用对数间隔坐标,当我们在窗口分辨率之间转移相对位置偏差时,所需的外推比将比使用原始的线性间隔坐标要小得多。

3.4. Self-Supervised Pre-training          

        为了解决transformer对数据量的需求,我们利用了一种自监督的预训练方法,SimMIM [72],来缓解对标签数据的需求。 

3.5. Implementation to Save GPU Memory        

        另一个问题是,当容量和分辨率都很大时,常规GPU无法支持其内存消耗。为了解决内存问题,我们采用了以下实现: 

        Zero-Redundancy Optimizer (ZeRO) [54]. 在优化器的一般数据并行实现中,模型参数和优化状态被广播到每个GPU。这种实现对GPU内存消耗非常不友好,例如,当使用AdamW优化器和fp32时,一个包含30亿个参数的模型将消耗48G GPU内存。使用ZeRO优化器,模型参数和相应的优化状态将被分割并分配到多个gpu中,这大大降低了内存消耗。我们采用了深度速度框架,并在实验中使用了在stage 1使用ZeRO。这种优化对训练速度的影响不大。

        Activation check-pointing [12]. transformer层中的特征图也消耗了大量的GPU内存,当图像和窗口分辨率较高时,这可能会造成瓶颈。 Activation check-pointing [12].技术可以显著降低内存消耗,而训练速度要慢30%。

        Sequential self-attention computation.  例如,为了在非常大的分辨率上训练大型模型,一个1536×1536分辨率的图像,窗口大小为32×32,常规的A100gpu(40GB内存)仍然负担不起,即使使用上述两种优化技术。我们发现,在这种情况下,自注意模块构成了一个瓶颈。为了缓解这一问题,我们按顺序实现了自注意计算,而不是使用之前的批处理计算方法。这种优化应用于前两个阶段的层,对整体训练速度的影响很小。

3.6. Model confifigurations

   

 

 4. Experiments

4.2. Scaling Up Experiments          

ImageNet-1K image classifification results          

 

COCO object detection results

 

ADE20K semantic segmentation results

 

Kinetics-400 video action classifification results

 

4.3. Ablation Study  

Ablation on res-post-norm and scaled cosine attention  

        post-norm和余弦注意力提升了模型的性能,更重要的是,他使模型稳定下来。 

 

 Scaling up window resolution by different approaches

         1)不同的方法在训练前(81.7%-81.8%)中具有相似的准确性;2)当转移到下游任务时,两种连续位置偏差(CPB)方法的表现始终优于Swin transformer V1中使用的参数化位置偏差方法。与线性间隔方法相比,对数间隔版本略好一些;3)训练前和微调之间的分辨率变化越大,所提出的对数间隔CPB方法的好处就越大。 

 

 

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

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

相关文章

TCP三次握手和四次挥手基本知识

一、概述 TCP是面向连接、可靠的、基于字节流的传输层通讯协议。 如何确定一个TCP连接: 目的IP目的端口源IP源端口 二、TCP建立连接 序列号client_isn和server_isn是随机初始化,可以通过netstat -napt来查看网络状态。 为什么建立连接需要三次握手&…

c++哈希(哈希表闭散列线性探测实现)

文章目录0. 前言1. 线性探测2. 线性探测的代码实现2.0 定义2.1 插入实现--Insert2.2 查找实现--Find2.3 删除实现--Erase2.4 仿函数3. 完整代码实现4. 代码测试并运行结果:0. 前言 闭散列:也叫开放定址法,当发生哈希冲突时,如果哈…

Python画爱心——谁能拒绝用代码敲出来会跳动的爱心呢~

还不快把这份浪漫拿走!!节日就快到来了,给Ta一个惊喜吧~ 今天给大家分享一个浪漫小技巧,利用Python制作一个立体会动的心动小爱心 成千上百个爱心汇成一个大爱心,从里到外形成一个立体状,给人视觉上的冲击…

年轻人不用太过于努力

周末和一个毕业一年多的朋友聊天,我随口问了一句「你有什么想跟我分享的」,然后他就说了上面的那句话。「年轻人不用太过于努力」和读者聊天会做成我的一个公众号专栏,内容有也会越来越丰富,全部的内容都会收录到我的程序人生专栏…

采购管理主要流程有哪些?

采购管理流程是很多企业用于获取物资或服务的一种关键步骤。采购管理流程对企业至关重要,因为它们可以对利润和支出产生会有直接的影响。 由于各个企业有不同的需求和目标,采购管理流程可能会有所不同。虽然与其采购流程相关的细节可能有所不同&#xf…

web前端课程设计——动漫网页2个网页HTML+CSS web前端开发技术 web课程设计 网页规划与设计

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

便宜又大碗!AI将画廊轻松搬到自家墙壁;用隐写术在图像中存储文件;免费书·算法高维鲁棒统计;关节式手部模型数据集;前沿论文 | ShowMeAI资讯日报

👀日报合辑 | 📆电子月刊 | 🔔公众号下载资料 | 🍩韩信子 📢 Mixtiles:将画廊搬到自家墙壁,“便宜又大碗”的艺术平替 https://www.mixtiles.com/ Mixtiles 是一家快速发展的照片创业公司&…

JavaScipt基础(持续更新三)

JavaScipt基础 JavaScipt基础 九、对象(Object) 9.1什么是对象 9.2JavaScript中的对象 9.3如何得到一个对象 9.4this的指向 9.5对象的使用 十、标准库对象(内置对象) 10.1Math对象 10.1.1常用属性和方法 10.1.2案例 1…

什么是蜂窝移动网络?

文章目录前言移动网络 vs WIFI蜂窝移动通信网产生过程蜂窝网络实现移动上网通信网架构总结前言 本博客仅做学习笔记,如有侵权,联系后即刻更改 科普: 移动网络 vs WIFI 计网课外实验月,我走在宿舍一楼正数着AP有多少个&#xff…

F. Rats Rats(二分 or 预处理)[UTPC Contest 09-02-22 Div. 2 (Beginner)]

题面如下: 思路 or 题解 xkaix ^ k a_ixkai​ 我们可以去想办法去找到 最小的xxx 为什么去寻找xminx_{min}xmin​ 看样例: 52183521 8^352183 52129521 2^952129 一个数如果满足式子 xkaix ^ k a_ixkai​ 至少我们可以找到一个xxx 如果有多个xxx我们…

国考省考行测:问题型材料主旨分析,有问题有对策,主旨是对策,有问题无对策,要合理引申对策

国考省考行测:问题型材料主旨分析,有问题有对策,主旨是对策,有问题无对策,要合理引申对策 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考…

FusionSphere虚拟化解决方案介绍

FusionSphere虚拟化解决方案介绍 Fusionsphere 云管理层:FusionManager 虚拟化层: 华为: Fusioncompute(计算虚拟化,存储虚拟化,网络虚拟化)Fusionstorage(分布式块存储)ebackup…

Python制作GUI学生管理系统毕设,大学生总会用得到

有很多可爱的大学生跟我吐槽: 咋这个大学跟我想象的不一样呢? 老师叫我们自己做… 还是那句话,技术才是硬道理 源码、资料电子书文末名片获取 有个经典案例就是 学生管理系统 写完了放在那也是放着,所以今天分享给大家吧&…

JAVA微信小程序实验室教室预约小程序系统毕业设计 开题报告

本文给出的java微信小程序系统毕业设计开题报告,仅供参考!(具体模板和要求按照自己学校给的要求修改) 选题目的和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序实验室预约系统,前台用户使…

Python之魔幻切片——万物可切(只要是序列对象)。负整数步长一出,序列瞬间倒置,可以玩儿更多花样。

【点击此处跳转笔记正文】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… My CSDN主页、My HOT博、My Python 学习个人备忘录好文力荐、 老齐教室 自学并不是什么神秘的…

css:详解BFC块级格式化上下文

定义 BFC(Block Formatting Context)块级格式化上下文 一个BFC区域包含创建该上下文元素的所有子元素,但是不包括创建了新的BFC的子元素的内部元素,BFC是一块块独立的渲染区域,可以将BFC看成是元素的一种属性&#xf…

云原生之K8S------list-watch机制,调度约束以及故障排查

一,list-watch机制 1,list-watch介绍 1,kubernetes是通过list-watch的机制进行每个组件的动作,保持数据同步的,每个组件之间的设计实现了解耦。 2,用户是通过kubelet根据配置文件,向apiserve…

人工智能--机器学习概述、motplotlib的使用-折线图、散点图、柱状图、饼图

机器学习 步骤: 获取数据–数据基本处理–特征工程–机器学习(算法)–模型评估与调优 人工智能三要素:数据、算法、计算力 CPU 控制单元多,计算单元少—更适合IO密集型任务 GPU计算单元多----更适合计算密集型任务 …

IDA详细使用教程

文章目录软件介绍目录结构启动页面IDA文件加载界面介绍常用快捷键操作概述函数操作数据类型操作导航操作类型操作关闭数据库软件介绍 Ollydbg 仅仅是运行于 Windows 用户模式下的一种 32 位调试器,而 IDA 是运行于 32/64 位下,可用作反编译和调试的一个…

现在Web前端工程师年薪区间是多少?

对于互联网公司来说用户就是上帝,做好客户体验一切才有可能。所以互联网公司都会把钱砸向前端,Web前端程序员也越来越受到企业争相聘用。但web前端工程师真的那么值钱吗? 1web前端不同阶段薪资待遇如何? 目前Web前端工程师可谓是佼…