点击上方,选择星标置顶,不定期资源大放送

阅读大概需要15分钟

Follow小博主,每天更新前沿干货

Transformer 用在图像识别上会存在计算效率过低的挑战,最近一篇向 ICLR 2021 大会提交的论文似乎很好地解决了这一问题,其研究的 PyTorch 代码也已在 GitHub 上开源。

在自然语言处理领域(NLP)成为重要力量的 Transformer 技术最近已经开始在计算机视觉领域展现自己的实力。不过到目前为止,由于 Transformer 注意力机制对内存的需求是输入图像的二次方,所以这一方向还存在一些挑战。

近日,LambdaNetworks 的出现提供了一种解决此问题的方法,人们可以无需建立昂贵的注意力图即可捕捉长距离交互。这一方法在 ImageNet 上达到了新的业界最佳水平(state-of-the-art)。

论文链接:https://openreview.net/pdf?id=xTJEN-ggl1b

GitHub链接:https://github.com/lucidrains/lambda-networks

对长程交互进行建模在机器学习中至关重要。注意力已成为捕获长程交互的一种常用范式。但是,自注意力二次方式的内存占用已经阻碍了其对长序列或多维输入(例如包含数万个像素的图像)的适用性。例如,将单个多头注意力层应用于一批 256 个64x64 (8 头)输入图像需要32GB的内存,这在实践中是不允许的。

该研究提出了一种名为「lambda」的层,这些层提供了一种捕获输入和一组结构化上下文元素之间长程交互的通用框架。

lambda 层将可用上下文转换为单个线性函数(lambdas)。这些函数直接单独应用于每个输入。研究者认为,lambda 层可以作为注意力机制的自然替代。注意力定义了输入元素和上下文元素之间的相似性核,而 lambda 层将上下文信息汇总为固定大小的线性函数,从而避免了对内存消耗大的注意力图的需求。这种对比如图1所示。

研究者证明了 lambda 层的通用性,展示了它们的实现可以被用来捕获全局、局部或掩模上下文中基于内容和位置的交互。利用lambda生成的神经网络 LambdaNetwork 计算效率很高,能够以很小的内存成本建模长程依赖,因而可用于高分辨率图像等大型结构化输入。

研究者在计算机视觉任务上评估了 LambdaNetwork,在这些任务上,自注意力显示出了希望,但遇到了内存成本高昂和无法实际实现的问题。在 ImageNet 分类、COCO 目标检测和实例分割三方面的对照实验表明,LambdaNetwork 显著优于基于卷积和注意力的同类方法,并且计算效率更高、运行速度更快。

最后,研究者提出了 LambdaResNets,它显著改善了图像分类模型的速度-准确性权衡。具体而言,LambdaResNets 在实现 SOTA ImageNet 准确性的同时,运行速度是 EfficientNets  的4.5 倍左右。

建模长程交互

在论文第二章开头,研究者定义了查询、上下文和交互等概念及各种用到的符号,此处不做赘述。

注意力交互。首先缩小查询深度,创建查询和上下文元素之间的相似性核(注意力图),也就是所谓的注意力操作。该机制可以被看作激发查询、键和数值术语的可微内存的寻址。由于上下文位置 |m| 的数量越来越大,并且输入和输出维数 |k| 和 |v| 保持不变,所以在层输出是较小维数 |v| << |m| 的一个向量时,我们可以假设计算注意力图是不划算的。

相反, 由于 y_n = F((q_n, n), C) = λ(C, n)(q_n) 拟合一些线性函数 λ(C, n),所以通过线性函数将每个查询映射到输出可能更有效率。在这种场景下,上下文聚合到一个固定大小的线性函数 λ_n = λ(C, n)。每个 λ_n作为独立于上下文(计算后)存在的小的线性函数,并在应用于关联查询q_n之后被丢弃。该机制令人联想到与lambda这个术语相关的函数式编程和 λ 演算。

lambda层

lambda层将输入  和上下文  作为输入,生成线性函数lambdas,然后将其应用于查询,从而得到输出 

注意,在自注意力情况下可能有C=X。在不失一般性的前提下,研究者假设d_in=d_c=d_out=d。在论文的其他部分中,研究者将重点放在lambda层的特定实例上,并说明它可以在没有注意力图的情况下,处理密集的长程内容和基于位置的交互。

lambda层:将上下文转换成线性函数

研究者首先在(q_n,n)的上下文中描述lambda层。由于研究者希望生成一个线性函数  或将  矩阵当作函数。

表1给出了lambda层的超参数、参数等量化数值。

1.  生成上下文lambda函数

lambda层首先通过线性投影上下文来计算键和值,通过softmax运算对键进行归一化,从而得到归一化键

这种实现能可以看作是函数消息传递的一种形式,每个上下文元素都贡献一个内容函数 和一个位置函数 。λ_n 是通过将上下文贡献求和得到的,如下所示:

其中还定义了内容lambda λ^c和位置lambda λ^p_n。内容lambda λ^c对于上下文元素的排列组合是固定不变的,在所有的查询位置n上共享,并且对如何转换仅基于上下文内容的查询内容q_n进行编码。相比之下,位置lambda λ^p_n对如何根据内容c_m和位置(n, m)转换查询内容q_n,从而可以对诸如图像之类的结构化输入进行建模。

2.  将lambda应用于查询

将输入x_n转换为查询 ,然后获得lambda层的输出为

3.  lambda解释

矩阵的列可以看作是|k|x|v|维的上下文特征的固定大小集合。这些上下文特征是根据上下文的内容和结构汇总得出的。利用lambda线性函数动态分配这些上下文特征,以产生输出 

此过程可以捕获密集内容和基于位置的长程交互,同时不产生注意力图。

4. 归一化

可修改方程式1和2以涵盖非线性或归一化运算。该研究的实验表明,在计算查询和值之后应用批归一化是很有用的。

带有结构化上下文的 lambda 层

这一部分介绍了如何使 lambda 层适应结构化的上下文,如相关上下文和局部上下文。

1. 平移等变性

在很多学习情景中,平移等变性是一种很强的归纳偏置。基于内容的交互是置换等变的,因此它已经具备平移等变性。对于任意的平移 t,研究者通过确保位置嵌入满足 。在位置交互中得到平移不变性。在实践中,研究者定义了相对位置嵌入  的一个张量。其中,r 表示所有 (n, m) 对的可能相对位置,并将其重新索引到 ,从而使得 

2. Lambda 卷积

尽管长程交互有一定的优点,但在很多任务中,局部性依然是一种强大的归纳偏置。从计算的角度来看,使用全局上下文可能会增加噪声,增加算力消耗。因此,将位置交互的范围限制到查询位置 n 周围的一个局部邻域,就像局部自注意和卷积中那样,可能是一种有用的做法。这可以通过对所需范围之外的上下文位置 m 的位置嵌入进行归零来实现。但是,对于较大的 |m| 值,这种策略依然代价高昂,因为计算仍在进行。

在这种上下文被安排在多维网格上的情况下,可以使用一个将 V 中的第 v 维视为一个额外空间维度的常规卷积来从局部上下文中生成位置 lambda。例如,假设我们想在一维序列上生成局部范围大小为 |r| 的位置 lambdas。相对位置嵌入张量 可以变为 ,然后被用作一个二维卷积的卷积核,计算所需的位置 lambda

研究者将这个运算称为 lambda 卷积。由于现在的计算被限制在局部范围内,lambda 卷积可以得到与输入长度相关的线性时间和内存复杂度。lambda 卷积很容易用于 dilation 和 striding 等其他功能,并且在专用硬件加速器上享有高度优化的实现。这与局部自注意力的实现形成鲜明对比,后者需要物化重叠查询和内存块的特征块,从而增加了内存消耗和延迟(见下表4)。

利用多查询 lambda 降低复杂度

对于多个 |b| 元素,每个都包含 |n| 输入。应用 lambda 层所需算数运算和内存占用的数量分别为 Θ(bnmkv) 和 Θ(bnkv + knm)。由于E_nm 参数捕获了基于位置的交互 ,因此相对于输入长度,研究者拥有的内存占用仍是二次的。但是,这个二次项并不随批大小扩展,这与生成每个示例(per-example)注意力图谱的注意力操作一样。在实践中,超参数 |k| 设为很小的值,如 |k| =16,并且在注意力失效的情况下可以处理大批量的大型输入。

多查询 lambdas 可以降低复杂度。lambdas 将注意力图 q_n ∈ R^k映射到输出 y_n ∈ R^d。如公式2所示,这意味着 |v|=d。所以,|v| 的较小值成为了特征向量 y_n上的瓶颈,但考虑到 Θ(bnmkv) 和 Θ(bnkv + knm) 的时间和空间复杂度,更大的输入维数 |v| 将导致非常高昂的计算成本。

所以,研究者提出将 lambda 层的时间和空间复杂度从输出维数 d 中解耦。他们并没有强制地令 |v|=d,而是创建了 |h| 查询 {q^h _n},将相同的 lambda 函数 λ_n 应用到每个查询 q^h_n,并将输出串连接成 y_n=concat(λ_nq^1_n , · · · ,λ_nq^|h|_n )。

由于每个 lambda 都应用于 |h| 查询,所以研究者将这一操作当做多查询 lambda 层。这也可以理解为将 lambda 约束到具有 |h| 等重复块的更小块矩阵。现在d=|hv|,并且时间和空间复杂度变成了 Θ(bnmkd/h) 和 Θ(bnkd/h + knm)。此外,研究者注意到,这类似于多头或多查询注意力机制,但motivation不同。在注意力操作中使用多个查询增强了表示能力和复杂度。而在本研究中,使用多查询 lambdas 降低了复杂度和表示能力。

下表2比较了多查询 lambda 层和多头注意力操作的时间和空间复杂度:

批量多查询 lambda 层可以使用 einsum 实现高效执行,具体如下

局部位置的 lambdas 可以通过 lambdas 卷积来获得,具体如上文公式3所示。

实验

LambdaNetworks 优于基于卷积和注意力的同类方法

在下表 3 中,研究者进行了控制实验,以比较 LambdaNetworks 与 a)基线 ResNet50、b)通道注意力和 c)以往使用自注意力来补充或替换 ResNet50 中的 3x3 卷积的研究方法。结果显示,在参数成本仅为其他方法一小部分的情况下,lambda 层显著优于这些方法,并且相较于 Squeeze-and-Excitation(通道注意力)实现了 +0.8% 的提升。

在上表 4 中,研究者对比了 lambda 层和自注意力机制,并给出了它们的吞吐量、内存复杂度和 ImageNet 图像识别准确性比较,这一结果展示了注意力机制的不足。相比之下,lambda 层可以捕获高分辨率图像上的全局交互,并可以比局部自注意力机制获得多 1.0% 的提升,同时运行速度几乎是后者的 3 倍。

此外,位置嵌入也可以在 lambda 层之间共享,以最小的降级花费进一步降低了内存使用的需求。最后,lambda 卷积具有线性内存复杂度,这在图像检测和分割任务中遇到非常大的图片时非常有用。

LambdaResNets 明显改善了 ImageNet 分类任务的速度-准确性权衡

下图 2 展示了 LambdaResNets与使用或不使用 channel attention 机制的ResNet 及最流行的 EfficientNets 相比的效果。LambdaResNets 在所有深度和图像尺度上均优于基准水平,最大的 LambdaResNet 实现了 SOTA 水平准确度 84.8。更值得注意的是,LambdaResNets 在准确性一定的情况下比 EfficientNets 要快大概 3.5 倍,速度-准确性曲线提升明显。

计算效率

在下表5和表6中,研究者发现构造 LambdaResNets 来提升大型 EfficientNets 的参数和 flops 效率也是有可能的。

这样的结果表明,lambda层可能非常适合在资源有限的场景中使用,例如嵌入式视觉应用。

目标检测与实例分割

最后,研究人员评估了 LambdaResNets 使用 Mask-RCNN 架构在 COCO 数据集上进行目标检测和实力分割任务的效果。使用 lambda 层会在所有 IoU 阈值和所有对象比例(尤其是难以定位的小对象)上产生一致的增益,这表明 lambda 层容易在需要定位信息的更复杂的视觉任务中实现不错的效果。

重磅!DLer-计算机视觉交流2群已成立!

大家好,这是DLer-计算机视觉微信交流2群!首先非常感谢大家的支持和鼓励,我们的计算机视觉交流群正在不断扩大人员规模!希望以后能提供更多的资源福利给到大家!欢迎各位Cver加入DLer-计算机视觉微信交流大家庭 。

本群旨在学习交流图像分类、目标检测、目标跟踪、点云与语义分割、GAN、超分辨率、人脸检测与识别、动作行为与时空运动、模型压缩和量化剪枝、迁移学习、人体姿态估计等内容。希望能给大家提供一个更精准的研讨交流平台!!!

进群请备注:研究方向+学校/公司+昵称(如图像分类+上交+小明)

???? 长按识别添加,即可进群!

【超越EfficientNet】无需注意力,Transformer结合视觉任务实现新SOTA相关推荐

  1. 抛弃注意力,比EfficientNet快3.5倍,类Transformer新模型跨界视觉任务实现新SOTA

    选自OpenReview 机器之心编译 机器之心编辑部 Transformer 用在图像识别上会存在计算效率过低的挑战,最近一篇向 ICLR 2021 大会提交的论文似乎很好地解决了这一问题,其研究的 ...

  2. 当Swin Transformer遇上DCN,清华可变形注意力Transformer模型优于多数ViT

    ©作者 | 小舟 来源 | 机器之心 本文中,来自清华大学.AWS AI 和北京智源人工智能研究院的研究者提出了一种新型可变形自注意力模块,其中以数据相关的方式选择自注意力中键值对的位置,使得自注意力 ...

  3. transformer在视觉检测的应用

    transformer在视觉检测的应用 detr简介 一些基于detr启发论文 目标检测 Deformable DETR Conditional DETR Sparse R-cnn 实例分割/全景分割 ...

  4. 本周AI热点回顾:何恺明RegNet超越EfficientNet、数学难题“abc猜想”封印终被开启、微软麻将 AI 论文发布

    01 何恺明团队最新力作RegNet: 超越EfficientNet,GPU上提速5倍 还是熟悉的团队,还是熟悉的署名,Facebook AI实验室,推陈出新挑战新的网络设计范式.熟悉的Ross,熟悉 ...

  5. 凯明MAE被超越了?字节跳动iBOT刷新十几项SOTA

    这个新方法在十几类任务和数据集上刷新了 SOTA 结果,在一些指标上甚至超过了 MAE. 前段时间,何恺明等人的一篇论文成为了计算机视觉圈的焦点.这篇论文仅用简单的 idea(即掩蔽自编码器,MAE) ...

  6. 3D视觉感知新SOTA BEVFormer复现nuscenes数据集测试demo

    0 写在前面 分享最近在BEV感知方面的工作,欢迎自动驾驶同行交流学习,助力自动驾驶早日落地. 1.概述 对于自动驾驶而言,BEV(鸟瞰图)下的目标检测是一项十分重要的任务.尽管这项任务已经吸引了大量 ...

  7. 纯视觉3D目标检测新SOTA!STS:基于Camera的深度估计新方法

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[领域综述]获取自动驾驶全栈近80篇综述论文! 论文链接:https ...

  8. 【读点论文】Focal Self-attention for Local-Global Interactions in Vision Transformers局部和全局注意力进行交互实现新SOTA

    Focal Self-attention for Local-Global Interactions in Vision Transformers Abstract 本文提出了一种焦点自注意力机制 F ...

  9. 刷脸支付只是开端 浅谈3D视觉如何推进新零售崛起

    消费是促进经济发展的根本,其中最为重要的环节便是支付.不同时代拥有不同的支付特征:PC互联网时代,网络支付风靡;移动互联网时代,手机支付盛行;而在正在兴起的AI时代,3D传感技术助力新零售悄然崛起,但 ...

最新文章

  1. Leetcode455分饼干-贪心
  2. linux who命令实现,linux下 who命令(3)(示例代码)
  3. 【阿里云OSS】OSS概述
  4. js页面排序-----基础篇
  5. F. Ivan and Burgers(前缀线性基模板)
  6. python代数式的表达方式_关于python字典类型最疯狂的表达方式
  7. 静态成员调用java,Java 反射 静态变量 静态方法 静态成员 调用 获取修饰符 判断是否为静态...
  8. ci如何使用中$.ajax 中的 url 如何使用php的代码,CI框架中使用ajax操作数据库有关问题...
  9. UVa 1592 数据库
  10. 怎么调节Ubuntu系统的屏幕亮度
  11. [翻译] DBCamera 轻量级定制摄像头
  12. [转] PostgreSQL的PITR技术(Point-In-Time-Recovery)
  13. iOS底层探索之类的结构(上):ISA
  14. 100个C语言经典小程序和C语言编写的小游戏
  15. C++实现11平台魔兽全图外挂
  16. GitHub 上受欢迎的 Android UI Library 整理一
  17. 数学知识:扩展欧几里得算法
  18. Android逆向基础入门
  19. HTTP 415错误
  20. 用自己的设备跑各种VI-SLAM算法(1)——VINS/PL-VINS/ROVIO/MSCKF

热门文章

  1. Download interrupted: URL not found.
  2. Error In Work
  3. [2774]小P的故事——神奇的发票报销 (sdut)
  4. Lowbit Sum 规律
  5. C#一个事件中调用另一个事件
  6. 使用inetaddress测试目标可达性_白盒测试工具―Winams介绍
  7. Java中事件监听机制
  8. 有监督学习的算法fit(x,y)传两个参数无监督学习的算法是fit(x),即传一个参数
  9. 关于numpy中eye和identity的区别详解
  10. java help