热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PyTorch深度学习(27)ShiftVisionTransformer

一、论文简介论文题目:WhenShiftOperationMeetsVisionTransformer:AnExtremelySimpleAlternativeto

一、论文简介

论文题目:When Shift Operation Meets Vision Transformer: An Extremely Simple Alternative to Attention Mechanism


https://doi.org/10.48550/arXiv.2201.10801

AlexNet的革命性进步,CNNs主导计算机视觉领域近10年

ViT的Backbone明显优于CNN的Backbone,迅速应用于目标检测、语义分割、动作识别等计算机视觉任务中。

ViT相比CNN,具有显著的优点:

1、提供了同时捕获短期和长期依赖的可能性,摆脱了卷积的局限限制

2、两个空间位置之间的相互作用动态地依赖于各自的特征,而不是一个固定的卷积核

但是,这两点是否是成功的关键:

对于第一点:Swin-Transformer和Local ViT引入局部注意力机制,将其注意力范围限制在一个小的局部区域内,结果表明系统性能没有由于局部限制而下降

对于第二点:MLP-Mixer提出用线性投影层代替注意力层,其中线性权值不是动态生成的,仍然在ImageNet数据集上达到领先的性能

既然全局特性和动态特性可能对ViT框架都不重要,那ViT成功的根本原因是什么?

没有全局范围、没有动态、没有参数、没有算数计算



二、网络结构

标准的ViT构建块包括:注意力层前馈网络(FFN)

作者用Shift操作取代前一个注意力层,保持后一个FFN部分不变。给定一个输入特征,构建块将首先沿着4个空间方向(左、右、上、下)移动一小部分通道,随后的FFN进行通道混合,以进一步融合来自相邻通道的信息。

基于shift building block构建了一个类似ViT的Backbone,即ShiftViT。这个Backbone很好地用于主流视觉识别任务,性能与Swin Transformer相当甚至更好。

在与Swin-T模型相同的计算预算内,ShiftViT在ImageNet数据集达到81.7%(相对于Swin-T的81.3%)。对于密集预测任务,在COCO检测数据集上平均精度(mAP)为45.7%(Swin-T的43.7%),在ADE20k分割数据集上平均精度(mloU)为46.3%(Swin-T的44.5%)。

因此,作者认为应该更多关注组成部分,而不是仅仅关注注意力机制。

现如今引发一波不断上升的关于视觉Transformer的研究浪潮,主要研究重点是改进注意力机制,使其能够满足视觉信号的内在特性。例如:MSViT构建层次注意力层以获得多尺度特征。Swin-Transformer在其注意力机制中引入了一种局部性约束。还有pyramid attention、local-global attention、cross attention等。

本文目的:注意力机制可能不是ViTs工作的关键部分,甚至可以被一个非常简单的Shift操作所取代,作者希望这些结果能够激励研究者重新思考注意力机制的作用。


MLP Variants

MLP-Mixer引入一个Token的混合MLP,以直接连接所有空间位置。消除了ViT的动态特性,但不是去准确性,后续工作研究了MLP更多设计,如空间门控单元或循环连接。

 红色框部分是token-mixing MLP,绿色框部分是channel-mixing MLP。

ShiftViT可归类为MLP架构,Shift操作可视为一个特殊的Token混合层,Shift操作简单(不包含参数、没有FLOP),由于具有固定的线性权值,普通的MLP变体不能处理可变的输入大小。Shift操作克服了这一障碍,使Backbone用于更多的视觉任务,如目标检测和语义分割。


Shift Operation

Shift操作在2017年被认为是空间卷积操作的一种有效的替代方案

论文题目:CVPR2018  Shift: A Zero FLOP, Zero Parameter Alternative to Spatial Convolutions

常规卷积

 Depthwise Separable Convolution


 pointwise Convolution

 Shift操作可看做是Depthwise Convolution的一种特殊情况

 通道域是空间域信息的层次化扩散

因此通过设置不同方向的shift卷积核,可以将输入张量不同通道进行平移,随后配合1x1卷积实现跨通道的信息融合,即可实现空间域和通道域的信息提取。

使用一个类似三明治的体系结构,2个1×1卷积核一个Shift操作,来近似一个K×K卷积

Shift操作进一步扩展到不同的变体:active Shift、sparse Shift、partial Shift


Shift-ViT

 总体结构

作者遵循Swim Transformer的体系结构,给定一个形状H×W×3的输入图像,首先将图像分割成不重叠的patches。patch-size为4×4像素,因此patch partition的输出值为H/4×W/4 token,其中每个token的通道大小为48。

之后模块分为四个stage,每个stage包括2个部分:嵌入生成堆叠shift块。 

对于第一阶段的嵌入生成,使用一个线性投影层将每个token映射成一个通道大小为c的嵌入。

对于其余阶段,通过kernel_size为2×2的卷积来合并相邻的patch。patch合并后,输出的空间大小是下采样的一半,而通道大小是输入的2倍,即从C到2C。

每个stage,shift块的数量可以是不同的,分别记为N1、N2、N3、N4。在out实现中,仔细选择了Ni的值,从而使整个模型与Baseline Swin Transformer模型共享相似数量的参数。


Shift Block

由三个顺序堆叠的组件组成:Shift操作、层归一化和MLP网络。

Shift操作在CNN中已经得到了很好的研究,可以由许多设计选择,如active Shift、sparse Shift。在本工作中遵循TSM中的partial Shift操作。

shift building block 

给定一个输入张量,一小部分的通道会沿着空间的四个方向移动,即左、右、上、下,而其余的通道保持不变。在Shift之后,超出范围的像素被简单地删除,空白像素被填充为0。本论文中,Shift步长设置为1。

形式上,假设输入特征z的形状为H×W×C,其中C为通道数,H和W分别为空间高度和宽度。输出特性z与输入特性具有相同的形状,可以写成:

其中γ是一个比率因子来控制通道的百分比。大多数实验中,γ的值设置为1/12。

Pytorch实现 

Shift操作不包含任务参数或算术计算,仅需内存复制。因此,Shift操作效率高,易于实现。与自注意力机制相比,Shift操作对TensorRT等深度学习推理库更干净、整洁、更友好。

Shift块的其余部分与ViT的标准构建块相同。MLP网络有2个线性层,第一个方法将输入将输入特征的通道增加到一个更高的维度,例如从C到τC。之后,第2个线性层将高维特征投影到c的原始通道大小中。在这两层之间,采用GELU作为非线性激活函数。


架构变体

为了与Baseline Swin Transformer进行比较,作者还构建了多个具有不同数量参数和计算复杂度的模型。

引入了Shift-T(iny)、Shift-S(mall)、Shift-B(ase)变种,分别对应swin-t、swin-s、swin-b。

Shift-T是最小的,与Swin-T和ResNet-50的大小相似,Shift-S和Shift-B大约比shifvit复杂2倍和4倍。

基本嵌入通道C的详细配置和块数{Ni}如下:

 除了模型尺寸之外,作者还仔细观察了模型的深度,在提出的模型中,几乎所有的参数都集中在MLP部分,因此可以控制MLP  τ的扩展比来获得更深的网络深度。如果未指定,则将展开比率τ设置为2。消融分析表明,更深层次的模型获得了更好的性能。



三、实验


消融实验

之前的实验证明了本文的设计原则,即大的模型深度可以弥补每个构件的不足。通常,在模型深度和构建块的复杂性之间存在一种权衡,有了固定的计算预算,轻量级的构建块可以享受更深层次的网络工作架构。

为了进一步研究这种权衡,作者提供了一些具有不同深度的Shift-ViT模型。对于ShiftViT,大多数参数存在于MLP部分。作者可以通过改变MLP τ的扩展比来控制模型深度。如表中选择Shift-T的扩展比来控制模型深度。选择Shift-T作为基线模型。研究了在1到4范围内的扩张比τ。指的注意的是不同条目的参数和FLOPs几乎是相同的。

从表中,可观察到一个趋势,即模型越深入,性能越好。当ShiftViT的深度增加到225时,在分类、检测、分割上分别比57层的分类、检测、分割的绝对增益提高了0.5%、1.2%、2.9%。在这种趋势支持了猜想,即强大而沉重的模块,如attention,可能不是Backbone的最佳选择。

1、Percentage of shifted channels

Shift操作只有一个超参数,即位移信道的百分比。缺省情况下,设置为33%。将移动通道的比例分别设置为20%、25%、33%和50%。

表明最终性能对这个超参数不是很敏感。与最佳设置相比,移动25%的通道指挥导致0.3%的绝对损失。在合理的范围内(25%~50%),所有的设置都达到了比Swin-T Baseline更好的精度。

2、Shifted pixels

在Shift操作中,一小部分通道沿4个方向移动一个像素。为了进行全面的探索,还尝试了不同的移动像素。当偏移的像素为0,即没有发生偏移时,ImageNet数据集的Top-1精度仅为72.9%,明显低于本文的Baseline(81.7%)。

没有移动意味着不同的空间位置之间没有相互作用,此外,如果在shift操作中移动两个像素,模型在ImageNet上达到80.2%的top-1精度,这也比默认设置略差。

3、ViT-style training scheme

Shift操作在cnn中得到很好的研究,但没有令人印象深刻。Shift-Res-Net-50在ImageNet上的准确率仅为75.6%,远低于81.7%,因此是什么对ViT有利?

作者怀疑原因可能在于虚拟现实式的训练计划。具体来说,大多数现有的ViT变体遵循DeiT中的设置,这与训练cnn的标准管道有很大不同。

例如:ViT-style方案采用AdamW优化器,在ImageNet上训练时长为300epoch.相比之下,cnn风格的方案更倾向于SGD优化器,训练计划通常只有90epoch。由于本文的模型继承了ViT-style训练方案,观察这些差异如何影响性能是很有趣的。

由于资源有限,不能完全对齐所有设置之间的ViT-style和CNN-style。因此选择4个任务可以来启示的重要因素:优化器、激活函数、规范化层、训练计划。表中可看到这些因素显著影响准确性,尤其是训练进度。这些结果表明,ShiftViT良好的性能部分是由ViT-style训练方案带来的。

同样,ViT的成功也可能与其特殊的训练计划有关。在今后的ViT研究中应该认真对待这一问题。


ImageNet and COCO

总的来说,本文的方法可以实现与最先进技术相媲美的性能。对于基于ViT和基于MLP的方法,其最佳性能约为83.5%,而本文模型达到了83.3%的精度。对于基于CNN的方法,本文模型略差,但是因为EfficientNet采用更大的输入大小,所以比较不完全公平。

与2个工作S^2-MLP和AS-MLP,这两部分的工作在移Shift操作上由相似的想法,但是在构建块中引入了一些辅助模块,例如投影前层和投影后层。本文的表现略好于这两项工作,证明了设计选择仅仅用一个简单的Shift操作就可以很好的搭建Backbone。

除了分类任务外,目标检测任务和语义分割任务也可以观察到相似的性能轨迹。值得注意的是,一些基于ViT和基于MLP的方法不容易扩展到如此密集的预测任务,因为高分辨率的输入产生了难以负担的计算负担。由于Shift操作的高效率,本文的方法不存在这种障碍。


推荐阅读
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 寻求更强大的身份和访问管理(IAM)平台的企业正在转向云,并接受身份即服务(IDaaS)的灵活性。要为IAM选择正确的场外解决方案,业务管理人员和IT专业人员必须在实施之前评估安全 ... [详细]
  • 【疑难杂症】allennlp安装报错:Installing build dependencies ... error
    背景:配置PURE的算法环境,安装allennlp0.9.0(pipinstallallennlp0.9.0)报错ÿ ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
author-avatar
小子少耍酷10
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有