重磅!新增 13 种 Transformer 方法,火速收藏

简介: 如今,Transformer 这把火已经烧到了计算机视觉领域,可以说成为今年最大的热点。本着全心全意为社区服务的精神,OpenMMLab 当然不会对此无动于衷。为了方便大家研究学习,我们基于 MMCV ,在OpenMMLab 6个方向的 repo 中复现了 13 种基于 Transformer 的方法,快来看看有没有你需要的吧。

Transformer 是 Google 的团队在 2017 年提出的一种经典模型,一诞生就席卷了 NLP 领域。


如今,Transformer 这把火已经烧到了计算机视觉领域,可以说成为今年最大的热点。本着全心全意为社区服务的精神,OpenMMLab 当然不会对此无动于衷。


为了方便大家研究学习,我们基于 MMCV ,在OpenMMLab 6个方向的 repo 中复现了 13 种基于 Transformer 的方法,快来看看有没有你需要的吧。


本文内容



MMClassifcation

Vision Transformer(ViT)

Tokens-to-Token ViT(T2T)

Swin Transformer


MMDetection

DETR
Deform-DETR

PVT&PVTv2


MMDetection3D

Group-Free 3D


MMSegmentaion

SETR
SegFormer
VIT
Swin


MMEditing

TTSR


MMAction2

TimeSformer


1.  MMCV



https://github.com/open-mmlab/mmcv/blob/master/mmcv/cnn/bricks/transformer.py


简介


经过探索,我们在 mmcv 中实现了 FFN, MultiHeadAttention 等基本组件。同时,在 mmcv 中实现了 BaseTransformerLayer,TransformerLayerSequence 等基类,以增加代码复用性能。用户可以通过 Config 灵活的组合控制各个组件的结构,为了各个方向实现能够风格统一, 我们设计了一个统一的 data-flow,从而兼容各种各样的 transformer 结构


同时,对于 BaseTransformerLayer,我们允许通过指定 operation_order 来组合出各种各样的网络结构,并且其内置了ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE 中的pre norm 的功能,在operation_order 第一个为 norm 会自动启动。

640.png

比如,论文中这两种执行逻辑可以通过指定不同的operation_order 轻松实现


a. operation_order=('self_attn', 'norm', 'ffn', 'norm')b. operation_order=('norm', 'self_attn', 'norm', 'ffn')

右滑查看完整代码


限于篇幅,更多介绍不在此展开,大家可以在各个具体方向的代码中看到他们的应用。


2.  MMClassifcation


 Vision Transformer(ViT)

https://github.com/open-mmlab/mmclassification/pull/395


这项工作首次实现了 transformer 在图片分类领域的应用。实验结果表明,视觉领域并不一定要依赖于卷积神经网络( CNN ),将图片块(patch)序列输入 transformer 也可实现很好的图片分类效果。


作者认为虽然之前就有工作使用 multi-head self-attention 代替卷积操作应用在 cv 领域,但由于精心设计的注意力模式,他们很难在 GPU 上高效的运行。本文提出的这个模型只对传统的 transformer 做了微小的修改,目的是想要证明,当进行适当地扩展时,该方法足以超越当前最优的卷积神经网络

640.png

模型结构如图所示,输入一张图片,把它分为若干个patch,对每个 patch 做相同的线性映射得到一个低维的向量。并借鉴 BERT 的想法,另外引入了一个专门用于分类的向量 cls ,将他们拼接在一起再加上一个 position  embedding引入位置信息后,作为transformer encoder的输入。


最后,用于分类的 cls 向量对应的输出做一个 mlp ,即可实现分类任务。在大规模数据集上进行预训练后,在特定下游任务上做简单的 finetune,即可实现对应领域的图片识别。


 Tokens-to-Token ViT(T2T)

https://github.com/open-mmlab/mmclassification/pull/385


当在中型数据集(如 ImageNet )上做预训练时,ViT的性能会低于卷积神经网络。本文作者认为主要有以下两点原因


1. 输入图像的简单 token 化无法对相邻像素之间的重要局部结构(如边、线)进行建模,导致其训练样本效率低下;


2. ViT中存在冗余的注意力机制,导致在有限的计算资源和训练样本下,特征丰富度欠缺。


为了克服这些限制,作者提出了 Tokens-to-Token Vision Transformer ,引入了:


1. Tokens-To-Token Layer,递归地将相邻的 tokens 聚合为一个 token ,将图像逐步结构化为 tokens ,这样,可以对邻居 tokens 呈现的局部结构进行建模,并且可以减少 tokens 的长度;


2. 一个拥有更瘦长的结构的高效 backbone 网络,这是受到CNN的启发。

640.png

文章的主要创新是提出了这种 Tokens-to-Token 变换( T2T Layer )。如上图所示,该模块的输入是一个 tokens 序列 T'i  ,首先把他们reshape为Ii  这种形式,还原了tokens在原图中的相对位置,之后对他进行 soft split ,与 ViT 中的 hard split 不同,这一过程得到的patch之间存在重叠。


之后将一个 patch 中的元素 Unfold 起来,得到 T'i+1,再输入常规的 transformer 结构中执行 MSA 和 FFN 。


 Swin Transformer

https://github.com/open-mmlab/mmclassification/tree/master/configs/swin_transformer


这项工作在 ViT 的基础上,实现了一种新的处理视觉任务的 Transformer 架构


Swin-Transformer 提出了一种分层的 Transformer 结构,这种分层结构有利于将网络应用于各种尺度的任务中,如检测和分割。


同时,Swin-Transformer 还提出了移位窗口多头自注意力机制(Shift Window Multihead Self Attention),相比于之前研究中使用的窗口多头注意力,移位机制允许了相邻的不重叠窗口之间交换信息,提高了信息提取的效率


模型结构如图所示,图右为其中两个接连的 block 结构,可以看到两个接连的 block,一个使用了普通的窗口自注意力,另一个则进行了移位,两个 block 相结合,从而实现了上文提到的不重叠窗口间的信息交换。


图左为 tiny 架构的结构,可以看到 Swin-Transformer 沿用了 ViT 的 patch 嵌入思想,对输入图像进行分区和嵌入映射,从而将各种尺寸的图像都能映射到相同长度的低维向量


但 Swin-Transformer 并没有使用 ViT 中绝对位置嵌入(position embedding)和分类向量(cls token)机制。没有绝对位置嵌入,网络是如何保留 patch 位置信息的呢?


Swin-Transformer 在计算注意力的时候,用一张表保存了各种 patch 相对位置对应的偏置(relative position bias),通过在注意力中引入这一可学习的位置偏置,从而保留 patch 之间的位置信息。


没有分类向量,是如何进行分类任务的呢?Swin-Transformer 利用分层机制,在每个 stage 之间加入 patch merging,对 patch 进行融合,从而使网络的最终输出能够融合全局信息,直接进行分类。同时这种分层机制也能够保留图像的多尺度信息,进行目标检测和分割。


Swin-Transformer 中有两处对图像/特征图进行分片的操作——Patch Embed和Patch Merging。在原始的实现中,这两种操作都是对图像进行不重叠的分区,可扩展性有限,而在 mmclassification 中,我们将Patch Embed抽象为Conv2d 的一种特殊形式,而Patch Merging 抽象为 Unfold,Norm 和 Linear 的组合,从而支持了分区的重叠,以及高可配置的stride、dilation、padding等参数。


3.  MMDetection



(DETR) DE⫶TR:

End-to-End Object Detection with Transformers

https://github.com/open-mmlab/mmdetection/tree/master/configs/detr


DETR 提出了检测的一种新的范式,通过 set loss,二分图匹配,以及将 Head 结构换为 Transformer,成功实现了一对一的正负样本匹配,从而去掉了 NMS 这一后处理,检测任务的逻辑结构第一次变得如此简单

640.png

其骨干网络依旧使用的是 CNN, 提取基本特征后加上 Position Encoding 进行进一步的特征提取,通过 100 个 query 从 feature map 上不断提取需要的信息,在 6 层 decoder layer 后,以每个 query 的 分类loss 与 回归 loss 为代价与 Ground Truth 进行匈牙利匹配,从而实现一对一的正负样本匹配


Deformable DETR:

Deformable Transformers for End-to-End Object Detection

https://github.com/open-mmlab/mmdetection/tree/master/configs/deformable_detr


Deform DETR 保留了 DETR 的基本设计,但是着重解决了 DETR 的收敛速度慢与性能低的问题。


对于收敛速度,从近期工作也可以看出,从全局 Attention 退化为局部的 Attention 可以显著的提高收敛速度,论文中提出了一种稀疏的局部的 attention 计算单元 deformable attention module, 实现了更快地收敛与更好的性能

640.png

另一方面,基于 CNN 中解决检测问题的经验,含有 RPN 的双阶段结构,多尺度特征融合,Cascade 的 Refine 结构,都应该能大幅提高性能,作者把这些经典设计一一映射到 Deform DETR 中,从而大幅提高了性能


整个代码结构上,我们充分利用的 MMCV 中的 TransformerLayerSequence 的设计,通过 config 组合不同的 TransformerLayer 可以轻松实现 Deform DETR 与 DETR


Pyramid Vision Transformer:

A Versatile Backbone for Dense Prediction without Convolutions  

& PVTv2:

Improved Baselines with Pyramid Vision Transformer


https://github.com/open-mmlab/mmdetection/pull/5780


这两个方法还在 review 中,计划在 V2.17.0 发布。


PVT将金字塔结构引入到Transformer中,使其可以像ResNet那样无缝接入各种下游任务,并且取得了不错的效果。例如在目标检测上,PVT-S+RetinaNet在COCO val2017上的AP可以到40+。


PVTv2在v1的基础上进行了3点改进,包括:带有depthwise卷积的FFN,基于zero padding的位置编码,以及线性复杂度的attention层。


基于这些改进,在目标检测上,PVTv2同样大小的模型比Swin好1-2个点,并且解决了大分辨率输入下计算复杂度大的问题

640.png


4.  MMDetection3D



Group-Free 3D Object Detection via Transformers

https://github.com/open-mmlab/mmdetection3d/tree/master/configs/groupfree3d


Group-free-3D 同样继承了 DETR 的基本设计结构,但是针对 3D 点云的数据特点进行了相应的改进,使其更加适用于 3D 目标检测任务。


一是采用了具有数据先验信息的初始对象候选,由于点云本身数据的特殊性,抛弃 DETR 的初始对象候选方法,采用了基于点云采样方法 KPS 获得初始对象候选,充分利用了点云数据的信息,大幅提高了模型的检测性能


另一方面,不同于 VoteNet 等方法设定一个或者多个固定 group 尺寸的思想,将局部点分组到每个候选对象,而是基于 self-attention module 和 cross-attention module 分别建立各个候选对象之间的依赖关系,以及点云中的各个点与各个候选对象的依赖关系,给予权重,这样既避免了 group 尺寸的超参数设定问题,同时也实现了自适应的尺度优势

640.png

此外,该论文引入了逐阶段修正 spatial encoding 的方法,通过将前一阶段预测出的 box location 作为辅助信息更新下一个阶段的 spatial encoding,从而进一步提高了模型的性能


5. MMSegmentaion


SegFormer:

Simple and Effificient Design for Semantic Segmentation with Transformers

https://github.com/open-mmlab/mmsegmentation/tree/master/configs/segformer


SegFormer 是一个简单,高效并且鲁棒性很好的语义分割方法,它的encoder是一个分层次的Transformer结构,基于PVTv1做出了一些重要的改进,并在ImageNet-1K上做了预训练。它的decoder全部由MLP构成,不包含dilated conv,aux loss等复杂的操作。


SegFormer有B0-B5 6种不同的model size,其中B0的model只有3.7M参数,速度也非常快,而B5的model是87M参数,可以达到目前领先的水平。  


640.png

Vision Transformer

https://github.com/open-mmlab/mmsegmentation/tree/master/configs/vit


MMSegmentation 在原始 ViT 的基础上,提供了更多的特性,例如:支持输出多个 Layer 的特征图;提供一个修改输出特征图大小的简易上下采样结构;支持随机尺寸的图片输入;提供多种输出形式以支持不同的算法;支持导入 MMClassification、timm 等仓库的预训练权重。


SETR

https://github.com/open-mmlab/mmsegmentation/tree/master/configs/setr


SETR 是 Semantic Segmentation 引入 vision transformer 早期较为成功的网络, SETR 主要提供了三种形式:Naive、PUP、MLA


其中 Naive 与 PUP 主要使用 Backbone 最后一层输出,来进行语义解析输出分割图,MLA 则使用了多个 Backbone 层输出,然后使用了一个特征金字塔来提取多尺度特征,而后融合多层输出,经过像素级分类器得到分割结果。

640.png

MMSegmentation 的主要特性在于将 PatchMerging 的 index sample + Linear 拓展成了 nn.Unfold + Linear。nn.Unfold 与卷积参数基本一致,这就使得 PatchMerging 模块的可操作性更强


例如,通过设置 dilation 来实现 Dilated Swin Transformer,通过设置 kernel_size 和 stride 来实现 Overlapping PatchMerging 等等。


此外,MMSegmentation 还加强了对输入尺寸的鲁棒性,支持导入 MMClassification,timm 等 repo 的预训练权重。


6. MMEditing



Learning Texture Transformer Network for Image Super-Resolution

https://github.com/open-mmlab/mmediting/tree/master/configs/restorers/ttsr


TTSR是微软研究院在CVPR2020的一篇论文,通过Transformer的multi-self-attention结构实现了借助参考图像完成超分重建的任务。


单一图像的超分辨率,受限于高分辨率纹理在退化过程中被破坏而无法完整恢复。尽管基于GAN的图像重建方法可以伪造高分辨率细节,依然不能得到原始的高频细节。RefSR通过参考图像对重建图像进行高分辨率纹理转换,可产生令人满意的视觉效果。

640.png

TTSR模型借助self-attention结构充分发挥参考图像的作用:将插值上采样的低分辨率图像看作将参考图像看作Q,将参考图像看作V,将下采样-上采样的参考图像看作K,通过Hard-Attention和Soft-Attention提取有助于超分辨率重建的高频细节。


TTSR首先使用可学习的纹理提取器(Learnable Texture Extractor,LTE)将图像加工成特征图。再使用纹理转移器(Texture Transformer)提取有助于超分辨率重建的高频细节。


TTSR的主干网络同时处理输入的低分辨率图像和LTE输出的高频细节,在下图三种尺寸下进行特征提取,实现四倍上采样。


主干网络中使用跨尺度特征集成模型(CrossScale Feature Integrations),融合不同尺度的纹理特征,从而提高网络的特征表达以及生成图像的质量。

640.png

7.  MMAction2



Is Space-Time Attention All You Need for Video Understanding?

https://github.com/open-mmlab/mmaction2/tree/master/

configs/recognition/timesformer


这项工作把 transformer 应用在视频分类领域,并且把 self-attention 机制从图像空间扩展到时空3D领域。


基于 ViT(Vision Transformer), TimeSformer 将输入的视频看做是从多帧中提取图像块的时空序列,然后通过将每个图像块的语义与视频中的其它图像块进行比较,来获取每个图像块的语义。


为了减少计算量,避免所有的图像块之间进行复杂的计算,作者设计了 5 种 self-attention 策略,如下图所示。

640.png

其中,Space Attention 计算过程中只考虑每一帧本身,不考虑相邻帧的图像特征交互。


Joint Space-Time Attention不加区分地计算时空上所有特征块间的Attention,需要消耗大量计算量。


Divided Space-Time Attention 计算两种 Attention, 其一为 Time Attention,第 t 时刻的 query 与其余时刻对应位置的图像块进行计算,其二为 Space Attention,第 t 时刻帧中其余图像块参与 query 块的计算。


通过实验证明,Divided Space-Time Attention 的策略能有效降低模型计算量,同时效果最好。


好了,以上就是 OpenMMLab 中复现的13种基于 Transformer 的方法,快去嘻嘻看吧。


如果有同学有更好的方法,或者有任何想交流的,欢迎在评论区留言


文章来源:公众号【OpenMMLab】

2021-08-25 19:00


目录
相关文章
|
6月前
|
数据采集 自然语言处理 前端开发
社区供稿 | 猎户星空百亿参数大模型 Orion-14B系列开源,一张3060就能跑(附魔搭社区推理微调最佳实践)
1月21日,傅盛在猎户星空大模型发布会上宣布,“为企业应用而生” 的开源百亿参数猎户星空大模型正式发布。猎户星空大模型(Orion-14B)是由猎户星空研发的预训练多语言大语言模型,以其140亿参数规模展现出了卓越的性能。
|
27天前
|
数据采集 API 决策智能
华为诺亚联合中科大发布工具调用模型ToolACE,效果持平GPT-4获开源第一
 【10月更文挑战第10天】华为诺亚方舟实验室与中国科学技术大学合作推出ToolACE,一种自进化合成过程的工具调用模型。ToolACE通过多智能体交互和双重验证系统生成准确、复杂、多样化的工具学习数据,显著提升大型语言模型(LLM)的功能调用能力。实验结果显示,使用ToolACE数据训练的80亿参数模型性能媲美GPT-4,在伯克利功能调用排行榜上获得开源第一。
54 4
|
2月前
|
测试技术
10人明星团队炼出首个微调Llama 3.1 405B!角色扮演一秒入戏,代码全开源
【9月更文挑战第13天】近日,由十位明星研究员组成的团队成功微调了Llama 3.1 405B 模型,推出名为Hermes 3的先进开源模型,在多个基准测试中表现卓越。Hermes 3采用“聊天”训练范式,具备强大的推理和创造能力,能更好地响应命令性陈述,使用户更容易与其互动并获得有用信息。此外,该模型支持系统提示和工具使用功能,使其在处理复杂任务时更加高效。尽管Hermes 3在多种合成推理任务和创造性应用中表现出色,但作为微调模型,其性能受限于基础模型,并且开源特性可能带来安全性和隐私性方面的挑战。论文详见[nousresearch.com]。
57 8
|
3月前
|
人工智能 自然语言处理 API
阿里云百炼平台上线首个最新文生图模型FLUX中文优化版
由Stable Diffusion团队推出的开源文生图模型FLUX风靡全球,其生成质量媲美Midjourney,被誉为“开源王者”。阿里云百炼平台首发FLUX中文优化版,提升了中文指令的理解与执行能力。开发者可直接在平台上体验并调用FLUX模型,且享有1000张图像的免费生成额度,有效期180天。无需额外部署,即可轻松利用这一先进模型创造高质量图像。
|
4月前
|
自然语言处理 API Android开发
阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?
阿里云的Qwen2-72B模型在Hugging Face上荣登开源模型榜首,展现卓越性能,超越其他包括Meta的Llama-3在内的竞争者。Qwen2有多个参数版本,其中72B版本在自然语言理解、知识、代码等任务上表现出色。较小参数版本如7B模型在某些方面略逊一筹。推出不同参数模型可能是为了降低成本、加速迭代、构建丰富的模型生态。通过提供不同规模的模型,阿里云旨在促进技术研究和全场景应用,类似于微软Windows XP和阿里云OS生态的构建策略。
298 1
|
6月前
|
机器学习/深度学习 人工智能 异构计算
阿里等发布基于3D的人物图片转视频模型Champ
【4月更文挑战第21天】阿里联合南京大学、复旦大学发布创新模型Champ,实现3D人物图片转视频的突破。Champ运用SMPL模型与潜在扩散框架,提升形状对齐和运动引导能力,生成高质量人物动画,尤其擅长捕捉姿势和形状变化。模型通过细节处理增强面部表情和手指动作等细节,但面部和手部建模仍有提升空间。研究团队已进行效率优化,推动实际应用。[项目地址](https://fudan-generative-vision.github.io/champ/#/) | [论文地址](https://arxiv.org/abs/2403.14781)
118 1
|
6月前
|
存储 自然语言处理 负载均衡
元象开源首个MoE大模型:4.2B激活参数,效果堪比13B模型,魔搭社区最佳实践来了
近日,元象发布其首个Moe大模型 XVERSE-MoE-A4.2B, 采用混合专家模型架构 (Mixture of Experts),激活参数4.2B,效果即可媲美13B模型。该模型全开源,无条件免费商用,支持中小企业、研究者和开发者可在元象高性能“全家桶”中按需选用,推动低成本部署。
|
6月前
|
人工智能 算法 知识图谱
大模型首次接入天文望远镜!基于通义千问,“星语3.0”发布
大模型首次接入天文望远镜!基于通义千问,“星语3.0”发布
217 0
|
机器学习/深度学习 人工智能 安全
谷歌大模型云服务上线,代码生成、PaLM for Chat首次亮相
谷歌大模型云服务上线,代码生成、PaLM for Chat首次亮相
187 0
谷歌大模型云服务上线,代码生成、PaLM for Chat首次亮相
|
机器学习/深度学习 传感器 数据采集
接入Llama 2等33个大模型,上线Prompt模板,百度智能云千帆大模型平台重磅升级
接入Llama 2等33个大模型,上线Prompt模板,百度智能云千帆大模型平台重磅升级
572 0
下一篇
无影云桌面