前言 

ViT通过简单地将图像分割成固定长度的tokens,并使用transformer来学习这些tokens之间的关系。tokens化可能会破坏对象结构,将网格分配给背景等不感兴趣的区域,并引入干扰信号。

为了缓解上述问题,本文提出了一种迭代渐进采样策略来定位区分区域。在每次迭代中,当前采样步骤的嵌入被馈送到transformer编码层,并预测一组采样偏移量以更新下一步的采样位置。渐进抽样是可微的。当与视觉transformer相结合时,获得的PS-ViT网络可以自适应地学习到哪里去看。

PS-ViT既有效又高效。在ImageNet上从头开始训练时,PS-VIT的TOP-1准确率比普通VIT高3.8%,参数减少了大约4倍,FLOP减少了10倍。

本文来自公众号CV技术指南的论文分享系列

关注公众号CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。

论文:Vision Transformer with Progressive Sampling

代码:https://github.com/yuexy/PS-ViT

Background


transformer最初是为处理中等大小的序列而量身定做的,并且具有二次计算复杂度。序列长度。它们不能直接用于处理具有大量像素的图像。

为了克服计算复杂性问题,ViT采用了一种朴素的标记化(tokenization)方案,该方案将一幅图像分割成一系列规则间隔的patches,这些patches被线性投影到tokens中。通过这种方式,图像被转换成数百个视觉tokens,这些视觉tokens被馈送到transformer编码层的堆栈中进行分类。ViT取得了很好的效果,特别是在大规模数据集上进行了预训练,这证明了全transformer结构是一种很有前途的视觉任务替代方案。然而,这种tokens化方案的局限性是显而易见的。

首先,硬分割可能会分离出一些高度相关的区域,这些区域应该用同一组参数建模,这破坏了固有的对象结构,并使输入patches的信息量变得较少。图显示猫头被分成几个部分,导致仅基于一个部分的识别挑战。其次,tokens被放置在规则网格上,而与底层图像内容无关。图显示,大多数网格聚焦在不感兴趣的背景上,这可能导致感兴趣的前景对象淹没在干扰信号中。

创新思路


人类视觉系统以一种完全不同的方式组织视觉信息,而不是一次不加区别地处理整个场景。取而代之的是,它循序渐进地、选择性地将注意力集中在视觉空间的有趣部分,无论何时何地需要它,而忽略不感兴趣的部分,随着时间的推移,结合来自不同注视的信息来理解场景

受上述过程的启发,论文提出了一种新的基于transformer的渐进采样(Progressive Sampling)模块,该模块能够学习从哪里看图像,以缓解ViT中简单的tokens化方案带来的问题

论文提出的模块不是从固定位置采样,而是以迭代的方式更新采样位置。如图所示,在每次迭代中,当前采样步骤的tokens被馈送到transformer编码层,并预测一组采样偏移量以更新下一步的采样位置。该机制利用transformer的能力来捕获全局信息,通过结合本地上下文和当前tokens的位置来估计对感兴趣区域的偏移量。这样,注意力就会像人类视觉一样,一步一步地集中到图像的可辨别区域。

Methods


Progressive Sampling

ViT规则地将一幅图像分成16×16块,这些块被线性投影到一组标记中,而不考虑图像区域的内容重要性和对象的整体结构。为了更好地关注图像的感兴趣区域,减轻图像结构破坏的问题,提出了一种新的渐进式采样模型。由于它的可微性,它是通过后续基于vision transformer的图像分类任务自适应驱动的。

渐进式采样模块的体系结构

在每个迭代中,给定采样位置Pt和特征映射F,对初始Tokens T't和特征映射F进行采样,并将其与基于pt生成的位置编码Pt和上一次迭代的输出Tokens Tt−1进行元素级相加,然后送入一个编码层来预测当前迭代的Tokens  Tt.。通过一个基于Tt的全连接层预测偏移量矩阵,将Tt与Pt相加,得到下一次迭代的采样位置Pt+1。上面的过程迭代了N次。

在每次迭代中,通过将采样位置与上次迭代的偏移向量相加来更新采样位置。Pt+1 = Pt + Ot,  其中Ot表示在迭代t处预测的采样位置矩阵和偏移矩阵。对于第一次迭代,我们将p1初始i化为规则间隔的位置,就像在ViT中所做的那样。具体地说,第i个位置由

其中π和π将位置索引分别映射到行索引和列索引。Sh和Sw分别为其轴向和轴向的步长。然后在输入特征图的采样位置对初始tokens进行采样,如下所示

由于Pt的元素是小数,所以采样是通过双线性插值运算来实现的,该运算是可微的。输入特征图F和采样位置Pt。初始采样tokens、上次迭代的输出tokens和当前采样位置的位置编码在被馈送到一个编码层以获得当前迭代的输出tokens之前,被进一步以元素方式相加。

将采样位置的归一化绝对坐标投影到一个嵌入空间作为位置嵌入。最后,预测除上一次迭代之外的下一次迭代的采样位置偏移量,如下所示

其中Mt是用于预测采样偏移矩阵的可学习线性变换。

Overall Architecture

渐进式采样Vision Transformer(PS-VIT)的总体架构

在给定输入图像的情况下,首先提取其特征图F。然后,在渐进式采样模块中的自适应位置pi处,对tokens Ti进行渐进式和迭代式采样。渐进采样模块的最终输出tokens TN被填充分类tokens Tcls,并进一步馈送到vision tranformer模块以细化Tcls,最终在分类模块中进行分类。

Conclusion


论文提出的渐进式采样是可区分的,并且可以很容易地插入ViT而不是硬分裂,以构建端到端的vision transformer,并使用称为PSViT的渐进式采样网络来构建端到端的vision transformer。由于任务驱动的训练,PS-ViT倾向于对与语义结构相关的对象区域进行采样。此外,与简单的tokens化相比,它更关注前景对象,而对模糊背景的关注较少。

1. 当在ImageNet上从头开始训练时,提出的PS-VIT优于当前基于transformer的SOTA方法。具体地说,它在ImageNet上达到了82.3%的TOP1准确率,在只有Deit约1/4参数和1/2 FLOP的情况下,准确率比Deit更高。如图所示,论文观察到,与基于transformer的SOTA网络ViT和Deit相比,PS-ViT明显更好、更快、参数效率更高。

2. 与其他SOTA 的对比

3.比较PS-VIT和SOTA网络在FLOP和速度方面的效率。

4. 渐进式采样模块中抽样位置的可视化。箭头的起点是初始采样位置(P1),而箭头的终点是最终采样位置(P4)。

 欢迎关注公众号 CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。

在公众号中回复关键字 “入门指南“可获取计算机视觉入门所有必备资料。

其它文章

MobileVIT:轻量级视觉Transformer+移动端部署

ICCV2021 | Swin Transformer: 使用移位窗口的分层视觉Transformer

ICCV2021 | 梯度归一化用于GAN

ICCV2021 | SOTR:使用transformer分割物体

ML2021 | PatrickStar:通过基于块的内存管理实现预训练模型的并行训练

ICCV2021 | PnP-DETR:用Transformer进行高效的视觉分析

ICCV2021 | 医学影像等小数据集的非自然图像领域能否用transformer?

ICCV2021 | Vision Transformer中相对位置编码的反思与改进

ICCV2021 | MicroNet:以极低的 FLOPs 改进图像识别

ICCV2021 | 重新思考视觉transformers的空间维度

CVPR2021 | TransCenter: transformer用于多目标跟踪算法

CVPR2021 | 开放世界的目标检测

CVPR2021 | TimeSformer-视频理解的时空注意模型

CVPR2021 | 一个高效的金字塔切分注意力模块PSA

CVPR2021 | SETR: 使用 Transformer 从序列到序列的角度重新思考语义分割

CVPR2021 | Transformer用于End-to-End视频实例分割

经典论文系列 | 重新思考在ImageNet上的预训练

经典论文系列 | Group Normalization & BN的缺陷

经典论文系列 | 目标检测--CornerNet  & anchor boxes的缺陷

经典论文系列 | 缩小Anchor-based和Anchor-free检测之间差距的方法:自适应训练样本选择

2021-视频监控中的多目标跟踪综述

统一视角理解目标检测算法:最新进展分析与总结

全面理解目标检测中的anchor|    实例分割综述总结综合整理版

单阶段实例分割综述|    小目标检测的一些问题,思路和方案

目标检测中回归损失函数总结|    小目标检测常用方法总结

视觉Transformer综述|    2021年小目标检测最新研究综述

Siamese network综述|    姿态估计综述|    语义分割综述

视频理解综述:动作识别、时序动作定位、视频Embedding

ICCV2021 | 渐进采样式Vision Transformer的更多相关文章

  1. ICCV2021 | Tokens-to-Token ViT:在ImageNet上从零训练Vision Transformer

    ​  前言  本文介绍一种新的tokens-to-token Vision Transformer(T2T-ViT),T2T-ViT将原始ViT的参数数量和MAC减少了一半,同时在ImageNet上从 ...

  2. ICCV2021 | Vision Transformer中相对位置编码的反思与改进

    ​前言  在计算机视觉中,相对位置编码的有效性还没有得到很好的研究,甚至仍然存在争议,本文分析了相对位置编码中的几个关键因素,提出了一种新的针对2D图像的相对位置编码方法,称为图像RPE(IRPE). ...

  3. VIT Vision Transformer | 先从PyTorch代码了解

    文章原创自:微信公众号「机器学习炼丹术」 作者:炼丹兄 联系方式:微信cyx645016617 代码来自github [前言]:看代码的时候,也许会不理解VIT中各种组件的含义,但是这个文章的目的是了 ...

  4. vision transformer

    VIT 总览 Step1 Step2

  5. ICCV2021 | 用于视觉跟踪的学习时空型transformer

    ​  前言  本文介绍了一个端到端的用于视觉跟踪的transformer模型,它能够捕获视频序列中空间和时间信息的全局特征依赖关系.在五个具有挑战性的短期和长期基准上实现了SOTA性能,具有实时性,比 ...

  6. ICCV2021 | TOOD:任务对齐的单阶段目标检测

    ​前言  单阶段目标检测通常通过优化目标分类和定位两个子任务来实现,使用具有两个平行分支的头部,这可能会导致两个任务之间的预测出现一定程度的空间错位.本文提出了一种任务对齐的一阶段目标检测(TOOD) ...

  7. 计算机视觉--CV技术指南文章汇总

    前言  本文汇总了过去本公众号原创的.国外博客翻译的.从其它公众号转载的.从知乎转载的等一些比较重要的文章,并按照论文分享.技术总结三个方面进行了一个简单分类.点击每篇文章标题可阅读详细内容 欢迎关注 ...

  8. ICCV2021 | TransFER:使用Transformer学习关系感知的面部表情表征

    ​  前言  人脸表情识别(FER)在计算机视觉领域受到越来越多的关注.本文介绍了一篇在人脸表情识别方向上使用Transformer来学习关系感知的ICCV2021论文,论文提出了一个TransFER ...

  9. ICCV2021 | PnP-DETR:用Transformer进行高效的视觉分析

    ​  前言  DETR首创了使用transformer解决视觉任务的方法,它直接将图像特征图转化为目标检测结果.尽管很有效,但由于在某些区域(如背景)上进行冗余计算,输入完整的feature maps ...

随机推荐

  1. 初学python-day9 函数1(已更新)

    函数 一.函数基础 1.什么是函数 在一个完整的项目中,某些功能会被重复使用,那么会将代码段封装成函数,当我们要使用的时候,直接调用即可. 函数是可以实现一定的小程序或者功能. 优点: 增加了代码的重 ...

  2. 分享一份软件测试项目实战(web+app+h5+小程序)

    大家好,我是谭叔. 本次,谭叔再度出马,给大家找了一个非常适合练手的软件测试项目,此项目涵盖web端.app端.h5端.小程序端,可以说非常之全面. 缘起 在这之前,谭叔已经推出了九套实战教程. 但是 ...

  3. the Agiles Scrum Meeting 11

    会议时间:2020.4.20 20:00 1.每个人的工作 在这次例会上,我们对上周完成的工作进行了总结. 本周已完成的工作 个人结对项目增量开发组 tq: 创建广播功能 修复纯英文数字可能溢出bug ...

  4. DDD领域驱动设计-项目包结构说明-Ⅳ

     基于DDD领域驱动设计的思想,在开发具体系统时,需要先建立不同的层级包.主要是梳理不同层面(应用层,领域层,基础设施层,展示层)包括的功能目录,每一个层面应该包括哪些模块.本例所讲述的分层是DDD落 ...

  5. spring cloud Alibaba --sentinel组件的使用

    sentinel组件 对于sentinel的前置知识这里就不多说了: 直接上代码: Release v1.8.1 · alibaba/Sentinel · GitHub  下载地址 springclo ...

  6. Hadoop的HA(ZooKeeper)安装与部署

    非HA的安装步骤 https://www.cnblogs.com/live41/p/15467263.html 一.部署设定 1.服务器 c1   192.168.100.105    zk.name ...

  7. 链表分割 牛客网 程序员面试金典 C++ Python

    链表分割 牛客网 程序员面试金典 C++ Python 题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* p ...

  8. XOR算法

    原理 依据的是异或门 即同为0,异为1 0^0=0 0^1=1 1^0=1 1^1=0 对一个数据进行两次XOR运算会得到这个数据本身 所以加密时就将message和其对应的key进行一波XOR运算得 ...

  9. java实现rsa加密算法【5min快速应用教程】

    该篇文章的主要目的是让读者能够迅速应用到项目中,想要了解详细的rsa加密算法的,可以百度找到更多原理.深度分析的文章. RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一 ...

  10. CANN5.0黑科技解密 | 别眨眼!缩小隧道,让你的AI模型“身轻如燕”!

    摘要:CANN作为释放昇腾硬件算力的关键平台,通过深耕先进的模型压缩技术,聚力打造AMCT模型压缩工具,在保证模型精度前提下,不遗余力地降低模型的存储空间和计算量. 随着深度学习的发展,推理模型巨大的 ...