首页 > 其他分享 >CPVT:美团提出动态位置编码,让ViT的输入更灵活 | ICLR 2023

CPVT:美团提出动态位置编码,让ViT的输入更灵活 | ICLR 2023

时间:2024-04-16 13:35:35浏览次数:30  
标签:平移 编码 CPVT 美团 位置 token ViT 输入

论文提出了一种新的ViT位置编码CPE,基于每个token的局部邻域信息动态地生成对应位置编码。CPE由卷积实现,使得模型融合CNN和Transfomer的优点,不仅可以处理较长的输入序列,也可以在视觉任务中保持理想的平移不变性。从实验结果来看,基于CPE的CPVT比以前的位置编码方法效果更好

来源:晓飞的算法工程笔记 公众号

论文: Conditional Positional Encodings for Vision Transformers

Introduction


  Transformer的自注意机制可以捕捉长距离的图像信息,根据图像内容动态地调整感受域大小。但自注意操作是顺序不变的,不能利用输入序列中的token顺序信息。为了让Transformer顺序可知,将位置编码加到输入的token序列中成为了常规操作,但这也为Tranformer带来两个比较大的问题:

  • 虽然位置编码很有效,但会降低Transformer的灵活性。位置编码可以是可学习的,也可以是由不同频率的正弦函数直接生成的。如果需要输入更长的token序列,模型当前的位置编码以及权值都会失效,需要调整结构后再fine-tuning以保持性能。
  • 加入位置编码后,绝对位置编码使得Transformer缺乏图像处理所需的平移不变性。如果采用相对位置编码,不仅带来额外的计算成本,还要修改Transformer的标准实现。而且在图像处理中,相对位置编码的效果没有绝对位置编码好。

  为了解决上述问题,论文提出了一个用于Vision Transformer的条件位置编码(CPE,conditional positional encoding)。与以往预先定义且输入无关的固定或可学习的位置编码不同,CPE是动态生成的,生成的位置编码中的每个值都与对应输入token的局部邻域相关。因此,CPE可以泛化到更长的输入序列,并且在图像分类任务中保持所需的平移不变性,从而提高分类精度。

  CPE通过一个简单的位置编码生成器(PEG,position encoding generator)实现,可以无缝地融入当前的Transformer框架中。在PEG的基础上,论文提出了Conditional Position encoding Vision Transformer(CPVT),CPVT在ImageNet分类任务中达到了SOTA结果。

  论文的贡献总结如下:

  • 提出了一种新型的位置编码方案,条件位置编码(CPE)。CPE由位置编码生成器(PEG)动态生成,可以简单地嵌入到深度学习框架中,不涉及对Transformer的修改。
  • CPE以输入token的局部邻域为条件生成对应的位置编码,可适应任意的输入序列长度,从而可以处理更大分辨率的图像。
  • 相对于常见的绝对位置编码,CPE可以保持平移不变性,这有助于提高图像分类的性能。
  • 在CPE的基础上,论文提出了条件位置编码ViT(CPVT),在ImageNet上到达了SOTA结果。
  • 此外,论文还提供了class token的替代方案,使用平移不变的全局平均池(GAP)进行类别预测。通过GAP,CPVT可以实现完全的平移不变性,性能也因此进一步提高约1%。相比之下,基于绝对位置编码的模型只能从GAP中获得很小的性能提升,因为其编码方式本身已经打破了平移不变性。

Vision Transformer with Conditional Position Encodings


Motivations

  在Vision Transformer中,尺寸为\(H\times W\)的输入图像被分割成\(N=\frac{HW}{S^2}\)个\(S×S\)的图像块,随后加上相同大小的可学习绝对位置编码向量。

  论文认为常用的绝对位置编码有两个问题:

  • 模型无法处理比训练序列更长的输入序列。
  • 图像块平移后会对应新的位置编码,使得模型不具备平移不变性。

  实际上,直接去掉位置编码就能将模型应用于长序列,但这种解决方案会丢失输入序列的位置信息,严重降低了性能。其次,可以像DeiT那样对位置编码进行插值,使其具有与长序列相同的长度。但这种方法需要对模型多做几次fine-tuning,否则性能也是会明显下降。对于高分辨率的输入,最完美的解决方案是在不进行任何fine-tuning的情况下,模型依然有显著的性能改善。

  使用相对位置编码虽然可以解决上述两个问题,但不能提供任何绝对位置信息。有研究表明,绝对位置信息对分类任务也很重要。而在替换对比实验中,采用相对位置编码的模型性能也是较差的。

Conditional Positional Encodings

  论文认为,一个完美的视觉任务的位置编码应该满足以下要求:

  • 对输入序列顺序可知,但平移不变。
  • 具有归纳能力,能够处理比训练时更长的序列。
  • 能提供一定程度的绝对位置信息,这对性能非常重要。

  经过研究,论文发现将位置编码表示为输入的局部领域关系表示,就能够满足上述的所有要求:

  • 首先,它是顺序可知的,输入序列顺序也会影响到局部邻域的顺序。而输入图像中目标的平移可能不会改变其局部邻域的顺序,即平移不变性。
  • 其次,模型可以应用更长的输入序列,因为每个位置编码都由对应token的局部邻域生成。
  • 此外,它也可以表达一定程度的绝对位置信息。只要任意一个输入token的绝对位置是已知的(比如边界的零填充),所有其他token的绝对位置可以通过输入token之间的相互关系推断出来。

  因此,论文提出了位置编码生成器(PEG),以输入token的局部邻域为条件,动态地产生位置编码。

  • Positional Encoding Generator

  PEG的处理过程如图2所示。为了将局部领域作为条件,先将DeiT的输入序列\(X\in \mathbb{R}^{B\times N\times C}\)重塑为二维图像形状\(X^{'} \in\mathbb{R}^{B\times H\times W\times C}\),然后通过函数\(\mathcal{F}\)从\(X^{'}\)的局部图像中生成产生条件性位置编码\(E^{B\times H\times W\times C}\)。

  PEG可以由一个核大小为\(k(k\ge 3)\)、零填充为\(\frac{k-1}{2}\)的二维卷积来实现。需要注意的是,零填充是为了位置编码包含绝对位置信息,从而提升模型性能。函数\(\mathcal{F}\)也可以是其它形式,如可分离卷积等。

Conditional Positional Encoding Vision Transformers

  基于条件性位置编码,论文提出了条件位置编码Vision Transformer(CPVT),除了条件位置编码之外,其它完全遵循ViT和DeiT来设计。CPVT一共有三种尺寸:CPVT-Ti、CPVT-S和CPVT-B。

  有趣的是,论文发现PEG的插入位置对性能也会有大影响。在第一个encoder之后插入的性能最佳,而不是直接在开头插入。

  此外,DeiT和ViT都使用一个额外的可学习class token进行分类。但根据其结构设计,该token不是平移不变的,只能靠训练来尽可能学习平移不变性。一个简单的替代方法是直接换为全局平均池(GAP),因为GAP本身就是平移不变的。因此,论文也提出了CVPT-GAP,去掉class token,改为采用GAP输出进行预测。在与平移不变的位置编码配套使用时,CVPT-GAP是完全平移不变的,可以实现更好的性能。

Experiment


  训练配置。

  直接将224x224模型改为384x384输入进行测试。

  class token与GAP的性能对比。

  对第二个encoder的自注意力图进行可视化,CPVT的自注意力图明显更加多样化。

  与SOTA网络进行对比,⚗为使用DeiT的蒸馏策略的结果。

  PEG插入位置对比,第一个encoder之后插入效果最好。

  PEG的-1插入场景可能是由于原始图片需要更大的感受域,通过实验验证增大卷积核能显著提高性能。

  插入PEG个数的对比实验。

  不同位置编码方式的对比实验。

  PEG生成位置编码时零填充的对比实验。

  对PEG性能提升来源进行对比实验,PEG的确跟输入的领域关系有关,但跟卷积参数是否对应当前网络关系不大。

  不同配置下的性能对比。

  应用到PVT上的性能提升。

  作为目标监测网络主干的性能对比。

Conclusion


  论文提出了一种新的ViT位置编码CPE,基于每个token的局部邻域信息动态地生成对应位置编码。CPE由卷积实现,使得模型融合CNN和Transfomer的优点,不仅可以处理较长的输入序列,也可以在视觉任务中保持理想的平移不变性。从实验结果来看,基于CPE的CPVT比以前的位置编码方法效果更好。



如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

work-life balance.

标签:平移,编码,CPVT,美团,位置,token,ViT,输入
From: https://www.cnblogs.com/VincentLee/p/18137885

相关文章

  • DeiT:训练ImageNet仅用4卡不到3天的平民ViT | ICML 2021
    论文基于改进训练配置以及一种新颖的蒸馏方式,提出了仅用ImageNet就能训练出来的Transformer网络DeiT。在蒸馏学习时,DeiT以卷积网络作为teacher,能够结合当前主流的数据增强和训练策略来进一步提高性能。从实验结果来看,效果很不错来源:晓飞的算法工程笔记公众号论文:Trainingd......
  • 美团二面:如何保证Redis与Mysql双写一致性?连续两个面试问到了!
    引言Redis作为一款高效的内存数据存储系统,凭借其优异的读写性能和丰富的数据结构支持,被广泛应用于缓存层以提升整个系统的响应速度和吞吐量。尤其是在与关系型数据库(如MySQL、PostgreSQL等)结合使用时,通过将热点数据存储在Redis中,可以在很大程度上缓解数据库的压力,提高整体系统的......
  • VUE:vite添加环境变量(一)
    新建'.env'(和vite.config.js同一个路径下)VITE_APP_API_URL=http://localhostvite.config.jsimport{defineConfig,loadEnv}from'vite'exportdefaultdefineConfig((mode)=>{constenv_config=loadEnv(mode,process.cwd())constV......
  • 地铁查询系统Android,MainActivity
    packagecom.example.metro_info_front_end;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.ArrayAdapter;importandroid.widget.AutoCompleteTextView;importandroid.widget.Button;importandroid.widget.LinearLayout;importandroid......
  • 高仿美团外卖小程序
    一、实验题目:原型设计二、实验目的:掌握产品原型设计方法和相应工具使用。三、实验要求(1)对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点(至少3条)。(2)利用网络资源自学Mockplus或墨刀等原型设计工具,并利用原型工具自拟主题进行原型设计。主题可以是高校二......
  • ViT:拉开Trasnformer在图像领域正式挑战CNN的序幕 | ICLR 2021
    论文直接将纯Trasnformer应用于图像识别,是Trasnformer在图像领域正式挑战CNN的开山之作。这种简单的可扩展结构在与大型数据集的预训练相结合时,效果出奇的好。在许多图像分类数据集上都符合或超过了SOTA,同时预训练的成本也相对较低 来源:晓飞的算法工程笔记公众号论文:AnI......
  • 美团二面:为什么不推荐使用 MyBatis 二级缓存?大部分人都答不上来!
    为了增加查询的性能,MyBatis提供了二级缓存架构,分为一级缓存和二级缓存。这两级缓存最大的区别就是:一级缓存是会话级别的,只要出了这个SqlSession,缓存就没用了。而二级缓存可以跨会话,多个会话可以使用相同的缓存!一级缓存使用简单,默认就开启。二级缓存需要手动开启,相对复杂,而且要......
  • vite和webpack对比
    定位分析打包工具:webpack、rollup、parcel、esbuild作用:可以对代码进行压缩、合并、转换、分割、打包衍生:vue-cli、create-react-app、umi等是基于webpack的上层封装,用于快速创建项目vite:开发环境依赖esbuild进行预构建,生产环境则依赖rollup进行打包差异分析1、启动差异we......
  • 实况窗助力美团打造鸿蒙原生外卖新体验,用户可实时掌握外卖进展
    自2023年华为宣布全新HarmonyOS NEXT蓄势待发,鸿蒙原生应用全面启动以来,已有金融、旅行、社交等多个领域的企业和开发者陆续宣布加入鸿蒙生态。其中,美团作为国内头部的科技零售企业,是首批加入鸿蒙生态的伙伴,其下的美团外卖App基于HarmonyOS SDK高效展开了鸿蒙原生应用的开发,仅用6......
  • vite+xlsx-style表格导出样式设置报错
    项目是vite+vue3,前端表格导出,使用xlsx可以导出基本表格,但是想要设置表格样式,引入xlsx-style,安装依赖,后引入报错引用import { utils } from "xlsx"import { write } from "xlsx-style"Couldnotresolve"./cptable"node_modules/xlsx-style/dist/cpexce......