Day 12: Twin Transformer by 美团

2023-11-18

这是美团和澳大利亚阿德莱德大学联合发表的新文章,也是和 Transformer 相关的,以下是一些要点。

  • Swin Transformer 的 Shifted Windows 虽然有效,但是由于尺寸不同,因此在用现有的深度学习模型来实现的时候会有一定的困难,因为大部分框架都希望输入的尺寸是相同的。
  • 另一种方案是 PVT 中提出来的。在普通的自注意力模块中,每个 query 都需要和所有的输入 token 计算注意力,但 PVT 中,每个 query 只需要和一些取样出来的输入 token 计算注意力。虽然理论上它的计算复杂度仍然是二次方的,但已经是在实际中可以接受的了。
  • 上面提到的视觉 Transformer 的核心是如何设计空间注意力(spatial attention),作者发现在 PVT 中提出的全局采样注意力(global sub-sampled attention)非常有效,而且当与位置编码一起使用的时候,它的效果可以与SOTA的视觉 Transformer 的表现持平,甚至更高。
  • 根据这些,作者提出了第一个模型架构:Twin-PCPVT。他们提出了一个仔细设计且简单有效的空间注意力机制,用来替换 PVT 中低效的全局采样注意力。这种注意力机制的灵感来源于可分离深度卷积(separable depthwise convolutions),因此作者将它命名为:空间可分离自注意力(spatially separable self-attention SSSA)
  • SSSA 由两种注意力操作组成,一种是局部分组自注意力(locally-grouped self-attention LSA),另一种是全局下采样注意力(global sub-sampled attention GSA)。其中 LSA 捕捉比较精细的短距离的信息,而 GSA 捕捉长距离和全局的信息。
  • 两种注意力操作都有效且实现起来很简单,这又带来了第二种结构:Twin-SVT

Related Work

这一章节的前两部分没有太多可讲,因为灵感主要是来源于后面两个部分,分组卷积和可分离卷积,以及位置编码。

分组卷积及可分离卷积

分组卷积最早在 AlexNet 中提出,二者在加速网络训练上都非常有效。深度卷积(depthwise convolution)则是分组卷积的一个极端例子,也即所分的组数与通道数相等,再后接一个通道卷积(point-wise convolution),将不同通道之间的信息聚合起来。

位置编码

本文用的位置编码是 PVT 中提出的条件位置编码(conditional positional emcodings),是根据输入进行动态调整的一种编码,它的表现要比绝对位置编码和相对位置编码好。

方法细节

作者提出两种简单且强大的视觉 Transformer 上的空间设计。第一种是基于 PVT 和 CPVT 的,只使用了全局注意力,因此称之为 Twins-PCPVT。第二种是基于上面提出的 SSSA ,交替使用局部注意力和全局注意力,称之为 Twin-SVT。

Twins-PCPVT

在这里插入图片描述

PVT 引入了金字塔型多层级设计,来更好地处理密集预测任务,比如目标检测和语义分割。它采用了 ViT 和 DeiT 里的绝对位置编码,而且所有层都使用了全局注意力机制,并依靠空间上的压缩来减少处理整个序列时的计算量。对于 Swin Transformer 的表现强于 PVT,作者是很惊讶的。

后来作者发现,PVT 的表现不佳仅仅是因为绝对位置编码的问题,因为它会使模型在处理不同尺寸的输入时遇到些麻烦。同时,这种编码方式也打破了平移不变性。然而 Swin 使用的是相对位置编码,因此规避了这个问题。

我们用在 CPVT 中提出的条件位置编码来替换掉原始的绝对位置编码。条件位置编码(CPE)是基于输入的,能天然地规避掉绝对位置编码遇到的问题。用来产生条件位置编码的位置编码生成器(position encoding generator),接在每个 stage 的第一个编码模块后面。作者使用最简单的位置编码生成器(比如没有 batch norm 的二维通道卷积)。对于图片分类任务,在 CPVT 后,全都移除了类 token,并在 stage 的最后使用全局池化。

作者也尝试过在 Swin 中使用条件位置编码来取代相对位置编码,但实验结果并不理想。

在这里插入图片描述

Twins-SVT

视觉 Transformer 在密集预测任务中,一直受到计算量太大这个问题的严重影响,当输入为 H × W H \times W H×W时,维度为 d d d的自注意力的计算复杂度为 O ^ ( H 2 W 2 d ) \hat{\mathcal{O}}\left(H^{2} W^{2} d\right) O^(H2W2d)。在此,我们提出一个空间可分离的自注意力,来减轻这个问题。SSSA 是由局部分组自注意力(LSA)和全局下采样注意力(GSA)组成。

局部分组自注意力(LSA)

受到可分离卷积的启发,我们首先将二维的特征图平均地分成几个窗口,让自注意力只发生在每个窗口内。具体点说,一个特征图被分成了 m × n m \times n m×n 个窗口。为了更好地范化,我们假设 H % m = 0  and  W % n = 0 H \% m=0 \text { and } W \% n=0 H%m=0 and W%n=0,每个组有 H W m n \frac{H W}{m n} mnHW 个元素,计算量为 O ( H 2 W 2 m 2 n 2 d ) \mathcal{O}\left(\frac{H^{2} W^{2}}{m^{2} n^{2}} d\right) O(m2n2H2W2d) ,总计算量则为: O ( H 2 W 2 m n d ) \mathcal{O}\left(\frac{H^{2} W^{2}}{m n} d\right) O(mnH2W2d) 。若设 k 1 , k 2 k_1, k_2 k1,k2分别为 k 1 = H m , k 2 = W n k_{1}=\frac{H}{m}, k_{2}=\frac{W}{n} k1=mH,k2=nW,则计算量可以表示为 O ( k 1 k 2 H W d ) \mathcal{O}\left(k_{1} k_{2} H W d\right) O(k1k2HWd),可以看出当 k 1 ≪ H  and  k 2 ≪ W k_{1} \ll H \text { and } k_{2} \ll W k1H and k2W 时,模型会更有效率,且当 k 1 和 k 2 k_1 和k_2 k1k2 为固定值时,与 H W HW HW呈线性增长。
在这里插入图片描述
尽管上面的设计在计算时比较友好,但可以发现不同的 window 之间缺乏信息交流。在 Swin 中是提出了一个滑动窗口的设计,作者则提出下面 GSA 的设计。

局部下采样注意力(GSA)

作者没有采用简单粗暴地加上全局注意力层的方式,因为会带来计算量上的问题。

作者用一个代表值来总结每个 window 中的重要信息,并用这个代表值来与其它 window 进行信息交流(作用就像自注意力中的 key),将计算量极大地减少为 O ( m n H W d ) = O ( H 2 W 2 d k 1 k 2 ) \mathcal{O}(m n H W d)=\mathcal{O}\left(\frac{H^{2} W^{2} d}{k_{1} k_{2}}\right) O(mnHWd)=O(k1k2H2W2d)。这其实等价于在注意力操作中,将下采样得到的特征图当作 key。

对于下采样过程,我们尝试了很多种方法,最后的实验发现还是普通的步幅卷积效果最好。因此,这个可分享的 Transformer 模块可以写成如下形式:

z ^ i j l =  LSA  (  LayerNorm  ( z i j l − 1 ) ) + z i j l − 1 z i j l =  FFN  (  LayerNorm  ( z ^ i j l ) ) + z ^ i j l z ^ l + 1 =  GSA  (  LayerNorm  ( z l ) ) + z l z l + 1 =  FFN  (  LayerNorm  ( z ^ l + 1 ) ) + z ^ l + 1 , i ∈ { 1 , 2 , … . , m } , j ∈ { 1 , 2 , … , n } \begin{array}{l}\hat{\mathbf{z}}_{i j}^{l}=\text { LSA }\left(\text { LayerNorm }\left(\mathbf{z}_{i j}^{l-1}\right)\right)+\mathbf{z}_{i j}^{l-1} \\\mathbf{z}_{i j}^{l}=\text { FFN }\left(\text { LayerNorm }\left(\hat{\mathbf{z}}_{i j}^{l}\right)\right)+\hat{\mathbf{z}}_{i j}^{l} \\\hat{\mathbf{z}}^{l+1}=\text { GSA }\left(\text { LayerNorm }\left(\mathbf{z}^{l}\right)\right)+\mathbf{z}^{l} \\\mathbf{z}^{l+1}=\text { FFN }\left(\text { LayerNorm }\left(\hat{\mathbf{z}}^{l+1}\right)\right)+\hat{\mathbf{z}}^{l+1}, \\i \in\{1,2, \ldots ., m\}, j \in\{1,2, \ldots, n\}\end{array} z^ijl= LSA ( LayerNorm (zijl1))+zijl1zijl= FFN ( LayerNorm (z^ijl))+z^ijlz^l+1= GSA ( LayerNorm (zl))+zlzl+1= FFN ( LayerNorm (z^l+1))+z^l+1,i{1,2,.,m},j{1,2,,n}

此外,我们用 CPVT 中提出的位置编码生成器来编码位置信息,且在程序进行中处理输入不同长度的输入(而不是提前处理好)。这个结构被插在每个 stage 的第一个模块后面。

在这里插入图片描述

在这里插入图片描述

与 Swin 的比较

Swin 使用了滑动窗口来让不同的窗口之间进行信息交流,但是这种方法比较复杂,而且没有办法根据不同的设备来进行优化。我们的方法更简单而且更友好,因为它是建立在目前常用的操作上的。此外,我们的局部-全局设计能够更好的利用全局的信息,这也是在视觉任务中非常重要的。

最后可能有人注意到,我们的两个网络结构有着细微的区别,比如深度隐藏层维度、头的个数、扩张系数等等。这是因为我们希望与那两个目前比较有名的模型之间,有一个公平的比较。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Day 12: Twin Transformer by 美团 的相关文章

  • drag diffusion中的gradio代码逐行解析

    gradio库是一个用于创建简单web应用程序的库 允许用户通过浏览器和程序进行交互 1 gr Blocks 使用with创建 在with中创建的任何组件都会自动添加到应用程序中 组件按创建顺序垂直显示在应用中 Blocks 模块用于组件在

随机推荐

  • Swoole从入门到入土(18)——WebSocket服务器[心跳ping]

    由于 WebSocket 是长连接 如果一定时间内没有通讯 连接可能会断开 这时候需要心跳机制 WebSocket 协议包含了 Ping 和 Pong 两个帧 可以定时发送 Ping 帧来保持长连接 1 心跳原理图 2 websocket协
  • 【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统

    这里写目录标题 1 WAMP环境简介 2 WAMP环境部署详细过程 2 1 要求 2 2 虚拟机安装win2008R2SP1 2 2 1 安装前准备 2 2 2 在VMware里创新新的虚拟机 2 2 3 在虚拟机里装win2008R2SP
  • 软件外包开发的流程图工具

    软件开发过程中需要画流程图 可以更清楚的表达软件业务流程 减少在开发过程中的业务理解偏差 因此在软件开发过程中流程图工具是必不可少的软件管理工具 今天和大家分享常见的一些软件流程图工具 每款工具都有其自身的特色 用户可以根据自身的需求选择合
  • OnEnable方法详解(Unity)

    OnEnable方法详解 介绍 在Unity中 OnEnable是一个生命周期方法 用于在脚本或组件被激活时执行特定的操作 当启用对象或启用脚本时 Unity会自动调用OnEnable方法 这使得我们可以在脚本激活时执行一些初始化任务或准备
  • mysql PXC集群脑裂及grastate.dat修改实验

    三台服务器做了 mysql PXC 集群 172 31 217 182 bd dev mingshuo 182 172 31 217 183 bd dev mingshuo 183 172 31 217 89 bd dev vertica
  • android 侦听apk安装成功,再执行界面的更新操作

    这是我项目里需要在安装完应用后 马上能侦听到新的应用安装成功 并且更新相应的界面用到的 1 项目里添加侦听类 然后配置文件加权限 就ok import android content BroadcastReceiver import and
  • 如何快速搭建全链路平台,展示服务拓扑以分析性能

    写在前面的话 限于本文作者水平 仅仅以node为web server和后端 数据库采用mongodb 来展示全链路的可视化 全链路可视化的必要性 微服务架构越来越流行 技术中台部 基础架构部等部门的分工也越来越精细化 原本一次请求可能只涉及
  • 计算机网络——应用层之电子邮件(E-mail)

    一 基本概念 电子邮件 E mail 是目前Internet上使用最频繁的服务之一 电子邮件是以电子方式发送传递的邮件 只要通信双方都有电子邮件地址 便可以电子传播为媒介 交互邮件 Internet上电子邮件系统采用客户机 服务器模式 信件
  • qt多线程使用方式

    有5个方式 可以参考这个博客 Qt 中开启线程的五种方式 qt 线程 lucky billy的博客 CSDN博客 注 为了实现更加灵活的线程管理 因为这5种都有一些不方便之处 QThread需要子类化且不能传参 moveToThread不能
  • 你准备好金九银十了吗?2020年总结上半年最全的Java面试专题,一共1259道(含答案)

    2020年的上半年的时间已经过去 不知道大家有没有为下半年的金九银十的跳槽做好准备 不管你到底准备好了没 小编通过各大网站平台 和一些面进BATJ这些大厂的朋友的交流 总结出了一份2020上半年的面试总结 共计1259道 最为全网首发 现在
  • 使用Postman抓取Chrome请求快速生成Request请求代码

    最近在练习爬虫的时候 爬取网站时常常需要模拟浏览器去访问 但是使用request发送请求时 需要填写headers也就是头部信息 但我又是一个懒得复制的人 尝试了很多软件 最后找到了一款特别适合我自己的 方便快捷 话不多说 放链接 下载地址
  • 打卡湘大OJ第二天

    1062 大小写转换 Description 接收一个字母 如果是小写 则将其转换成大写 如果是大写 就将其转换成小写 Sample Input b Sample Output B Hint 输出最后没有换行 题解 include
  • 英语学习对程序员得重要性!

    程序世界的主导语言是英文 编写程序时使用的开发文档和开发工具的帮助文件离不开英文 了解业界的最新动向 阅读技术文章离不开英文 同世界各地编程高手往往也离不开英文 提高英文水平 能大大促进一个程序员的发展 让你有更多的资源 在此 个人总结了几
  • css文本内容呈现两行呈现,超出部分用省略号代替

    标题仅显示两行 溢出内容省略号代替 overflow hidden text overflow ellipsis display webkit box webkit line clamp 2 webkit box orient vertic
  • CPU时钟周期、主频、CPI、MIPS

    主频 理解 主频是机器内部主时钟的频率 主频越高 完成指令的一个执行步骤所用的时间就越短 速度越快 比如跳绳 跳的越快 即频率越高 那么完成一次所用的时间就越短 单位 Hz 常见的有1 8GHz 2 4GHz CPU时钟周期 理解 跟上面的
  • 【华为OD机试真题 python】 字符统计及重排【2022 Q4

    前言 华为OD笔试真题 python 专栏含华为OD机试真题 华为面试题 牛客网华为专栏真题 如果您正在准备华为的面试 或者华为od的机会 有任何想了解的可以私信我进行交流 我会尽可能的给一些建议 和帮您解答 题目描述 字符统计及重排 给出
  • html网页如何将文字排版,【html】文字排版

    Web开发过程中文字排版 默认的情况下 行末的长单词会撑开容器 我们想要的是 像word一样 能够自动换行 既不撑大容器 也不强制拆开行末单词 并且不会隐藏行末单词的多余字母 不能撑开容器 完整的单词不能被强制拆开 如果行末是长单词的话 整
  • IDEA类文件后边有注释插件:Show Comment

    具体功能是在侧边文件树中 显示Java类的注释信息 IDEA文件树增强插件 Show Comment 使用方法 1 类上面加入javadoc注释 回车就可以了 2 在插件市场里面搜索Show Comment 3 重新idea即可 代码填写和
  • 电信客户流失预测----科大讯飞xDataWhale

    记录第一次参加正式的数据挖掘竞赛 由科大讯飞xDatawhale举办的 电信客户流失预测挑战赛 报名链接 2022 iFLYTEK A I 开发者大赛 讯飞开放平台 一 赛题概要 赛题背景 随着市场饱和度的上升 电信运营商的竞争也越来越激烈
  • Day 12: Twin Transformer by 美团

    这是美团和澳大利亚阿德莱德大学联合发表的新文章 也是和 Transformer 相关的 以下是一些要点 Swin Transformer 的 Shifted Windows 虽然有效 但是由于尺寸不同 因此在用现有的深度学习模型来实现的时候