重磅!新增 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


目录
相关文章
|
18天前
|
数据采集 自然语言处理 前端开发
社区供稿 | 猎户星空百亿参数大模型 Orion-14B系列开源,一张3060就能跑(附魔搭社区推理微调最佳实践)
1月21日,傅盛在猎户星空大模型发布会上宣布,“为企业应用而生” 的开源百亿参数猎户星空大模型正式发布。猎户星空大模型(Orion-14B)是由猎户星空研发的预训练多语言大语言模型,以其140亿参数规模展现出了卓越的性能。
|
7月前
|
云安全 人工智能 安全
重磅发布,阿里云安全大模型正式投入使用
2023年云栖大会,阿里云安全正式宣布基于通义千问大模型训练的安全大模型投入使用。首期开放的功能包括为用户提供定制化的安全告警解读、事件调查及处置建议服务,覆盖全网超过99%的告警事件类型。即日起,用户可在阿里云安全中心免费使用体验。
978 4
重磅发布,阿里云安全大模型正式投入使用
|
18天前
|
机器学习/深度学习 人工智能 异构计算
阿里等发布基于3D的人物图片转视频模型Champ
【4月更文挑战第21天】阿里联合南京大学、复旦大学发布创新模型Champ,实现3D人物图片转视频的突破。Champ运用SMPL模型与潜在扩散框架,提升形状对齐和运动引导能力,生成高质量人物动画,尤其擅长捕捉姿势和形状变化。模型通过细节处理增强面部表情和手指动作等细节,但面部和手部建模仍有提升空间。研究团队已进行效率优化,推动实际应用。[项目地址](https://fudan-generative-vision.github.io/champ/#/) | [论文地址](https://arxiv.org/abs/2403.14781)
52 0
|
18天前
|
数据采集 人工智能 编解码
二次元专用超分AI模型APISR:在线可用,入选CVPR
【4月更文挑战第15天】APISR是一款由密歇根大学、耶鲁大学和浙江大学联合研发的AI模型,专攻动漫风格的超分辨率问题。在CVPR会议上发表的这项成果,通过理解动漫制作流程,针对性地收集和处理训练数据,提升了动漫图像的清晰度和视觉效果。APISR引入预测导向的压缩模块和平衡的双感知损失函数,有效恢复手绘线条并减少颜色伪影。此外,模型关注图像复杂性,优化训练数据质量和学习效率。尽管面临处理复杂场景和颜色偏差的挑战,APISR为动漫图像处理开辟了新方向。
47 1
二次元专用超分AI模型APISR:在线可用,入选CVPR
|
18天前
|
存储 自然语言处理 负载均衡
元象开源首个MoE大模型:4.2B激活参数,效果堪比13B模型,魔搭社区最佳实践来了
近日,元象发布其首个Moe大模型 XVERSE-MoE-A4.2B, 采用混合专家模型架构 (Mixture of Experts),激活参数4.2B,效果即可媲美13B模型。该模型全开源,无条件免费商用,支持中小企业、研究者和开发者可在元象高性能“全家桶”中按需选用,推动低成本部署。
|
6月前
|
人工智能 自然语言处理 算法
|
10月前
|
机器学习/深度学习 传感器 数据采集
接入Llama 2等33个大模型,上线Prompt模板,百度智能云千帆大模型平台重磅升级
接入Llama 2等33个大模型,上线Prompt模板,百度智能云千帆大模型平台重磅升级
503 0
|
11月前
|
弹性计算 数据可视化 物联网
百川13B模型发布及魔搭最佳实践
百川13B模型发布及魔搭最佳实践
|
自然语言处理 搜索推荐 API
160亿参数,新增多项能力,复旦MOSS开源了
160亿参数,新增多项能力,复旦MOSS开源了
|
计算机视觉
10亿参数、多项SOTA,智源开源视觉基础模型EVA
10亿参数、多项SOTA,智源开源视觉基础模型EVA
240 0