论文来源:arxiv.org

本文作者:李炎,硕士研究生,目前研究方向为深度学习、计算机视觉。

目录

  • 摘要
  • 问题描述
  • 本文核心工作
  • 模型
  • 实验
  • 总结
  • 其他相关文章与知识
  • 参考文献

摘要

不同于之前的人工设置的定长的位置编码(Position Encoding)或可学习位置编码,本文设计了一种条件位置编码 CPE(conditional positional encoding),CPE 是动态生成的,并以输入 token 的局部邻域为条件( conditioned on the local neighborhood of the input tokens),CPE 可以更好的处理比模型在训练期间见过的更长的输入序列;同时 CPE 可以在不同任务中保持网络模型的平移不变性。同时本文设计了一种 位置编码生成器 PEG (Position Encoding Generator) 用于生成 CPE ,该位置编码生成器很简单,并很容易应用在其他视觉变压器(Vision Transformer)中。

问题描述

之前的视觉转换器( Vision Transformer )中的位置编码( Position Encoding )大多采用人为设定的固定长度的 Position Encoding 或者可学习的 Position Encoding ,但是上述两种位置编码方法在网络模型训练中与其他网络参数一同训练,训练过后位置编码的长度已经固定,当输入 Vision Transformer 的序列长度变化较大的时候,表现出来的泛化能力较弱,为了更好的处理更长的输入序列并在各种视觉任务中保持网络结构的平移不变性

本文核心工作

  1. 设计了一种性能更好的条件位置编码 CPE 。
  2. 设计了一种位置编码生成器 PEG 用于生成 CPE。

模型

本文认为视觉任务的成功位置编码应满足以下要求:
(1) 使输入序列排列可变但平移不变。
(2) 具有归纳性,能够处理比训练期间更长的序列。
(3)具有提供一定程度绝对位置的能力。如 [13] 所示,这对性能很重要。
~
本文认为通过位置编码来表征局部关系足以满足上述所有条件。

  • 首先 PEG 对输入维度为 B∗N∗CB*N*CBNC 的 Tokens 序列进行reshape操作,将其还原为2D的shape:B∗H∗W∗CB* H* W* CBHWC

  • 然后来将一个 F 函数重复应用于的局部块(local patch)上,用于产生Conditional Positional Encoding 。

     B:每批的图片数N:Token数,即将图片分成的块(Patch)数; $N=(H*W)/d$d:每个 Patch 的尺寸为 d*dC:图片的通道数H、W:分别为原图的高、宽
    

PEG 通过一个 F 函数来高效实现。需要注意的是 卷积( F 函数)一定要使用zero paddings,以获取绝对位置信息。zero paddings[1]是图中 F 函数获取绝对位置信息的关键。 F 函数由内核为 k(k≥3)k (k ≥ 3)k(k3)(k−1)/2(k−1)/ 2(k1)/2 零填充的二维卷积有效地实现。其中 F 可以是各种形式,例如可分离卷积和许多其他形式。

这里的零填充[1]非常重要!!通过零填充可以获取 patch 的绝对位置。
为什么使用二维卷积就变成了条件位置编码呢?
因为,卷积核尺寸越大(例如 3*3),则包含的周边信息越多,可以理解为,将原图像的顺序排列的特征具有了空间信息,因此信息包含更多,则能很好的提高准确率,是本文的关键理解

PEG实现代码:

class PosCNN(nn.Module):def __init__(self, in_chans, embed_dim=768, s=1):super(PosCNN, self).__init__()self.proj = nn.Sequential(nn.Conv2d(in_chans, embed_dim, 3, s, 1, bias=True, groups=embed_dim))self.s = sdef forward(self, x, H, W):B, N, C = x.shapefeat_token = xcnn_feat = feat_token.transpose(1, 2).view(B, C, H, W)  # reshapeif self.s == 1:x = self.proj(cnn_feat) + cnn_feat  # CNN聚合局部关系并配合残差连接else:x = self.proj(cnn_feat)x = x.flatten(2).transpose(1, 2)return xdef no_weight_decay(self):return ['proj.%d.weight' % i for i in range(4)]

实验

数据集
使用具有 1K 类和 1.3M 图像的 ILSVRC-2012 ImageNet 数据集。

实验设计及结果

  1. 与其他SOTA方法进行对比:

    与之前的 Transformer 相比,加入了位置编码的 CPVT 模型具有更好的性能。

  2. 对比PEG 和二维正弦编码

    使用 PEG 的位置编码替换了原始的 2-D编码,获得了更好的性能。
    物体检测的性能结果也表明 PEG 可以提供绝对位置信息,因为物体检测任务需要边界框的绝对坐标

  3. CPVT 中提出的 PEG 可以直接推广到更大的图像尺寸,而无需任何微调
    224∗224224*224224224 图像上训练的 CPVT,应用到 384∗384384*384384384 上,效果相近,无需微调

总结

本文提出的 CPE (conditional positional encoding)位置编码可以实现比固定位置编码和可学习位置编码更强的性能。并且设计了一种位置编码生成器 PEG (Position Encoding Generator),加入了 PEG 的视觉变压器模型可以处理更长的输入序列并在视觉任务中保持所需的平移不变性。同时此 CPE 很容易实现并且成本可以忽略不计。

论文代码:GitHub

其他相关文章与知识

Self-attention:

Multi-head Self-Attention:


参考文献

[1] HOW MUCH POSITION INFORMATION DO CONVOLUTIONAL NEURAL NETWORKS ENCODE?

  1. 【论文笔记】Conditional Positional Encodings for Vision Transformers
  2. 2021-Conditional Positional Encodings for Vision Transformers
  3. DeiT:使用Attention蒸馏Transformer
  4. Training data-efficient image transformers & distillation through attention

Conditional Positional Encodings for Vision Transformers(论文阅读笔记)相关推荐

  1. Dynamic MDETR: A Dynamic Multimodal Transformer Decoder for Visual Grounding 论文阅读笔记

    Dynamic MDETR: A Dynamic Multimodal Transformer Decoder for Visual Grounding 论文阅读笔记 一.Abstract 二.引言 ...

  2. Intriguing Properties of Vision Transformers论文解析

    Intriguing Properties of Vision Transformers 论文地址 本论文系统研究了基于Transformer和CNN构造的图像分类器一些很多有趣的特性,包括纹理与形状 ...

  3. 论文阅读笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

    论文阅读笔记:Swin Transformer 摘要 1 简介 2 相关工作 3 方法论 3.1 总览 Swin Transformer block 3.2 shifted window-based ...

  4. FAN(Understanding The Robustness in Vision Transformers)论文解读,鲁棒性和高效性超越ConvNeXt、Swin

    FAN(Understanding The Robustness in Vision Transformers)论文解读,鲁棒性和高效性超越ConvNeXt.Swin < center > ...

  5. DnCNN论文阅读笔记【MATLAB】

    DnCNN论文阅读笔记 论文信息: 论文代码:https://github.com/cszn/DnCNN Abstract 提出网络:DnCNNs 关键技术: Residual learning an ...

  6. DCP(Deep Closest Point)论文阅读笔记以及详析

    DCP论文阅读笔记 前言 本文中图片仓库位于github,所以如果阅读的时候发现图片加载困难.建议挂个梯子. 作者博客:https://codefmeister.github.io/ 转载前请联系作者 ...

  7. Dynamic Head Unifying Object Detection Heads with Attentions 论文阅读笔记

    Dynamic Head Unifying Object Detection Heads with Attentions论文阅读笔记 这是微软在CVPR2021发表的文章,在coco数据集上取得了目前 ...

  8. (论文阅读笔记)OLE:正交低秩嵌入,即插即用的几何损失

    论文阅读笔记:OLE: Orthogonal Low-rank Embedding, A Plug and Play Geometric Loss for Deep Learning 摘要 简介 2 ...

  9. 【论文阅读笔记】Learning To Detect Unseen Object Classes by Between-Class Attribute Transfer

    摘要: 本文主要研究训练和测试类别不相交时(即没有目标类别的训练示例)的对象分类问题.在此之前并没有对于毫无关联的训练集和测试集进行对象检测的工作,只是对训练集所包含的样本进行分类.实验表明,通过使用 ...

最新文章

  1. node.js入门 - 2.创建一个简单聊天室
  2. 微型计算机基础知识答案,计算机基础知识(答案已填)
  3. solaris查看主机信息
  4. AtCoder AGC029F Construction of a Tree (二分图匹配)
  5. java如何爬取304_HTTP 304错误的详细讲解
  6. Angular8 - 稳定版修改概述(Angular 8的新特性介绍)
  7. 数字的空洞 水 南邮NOJ 1071
  8. 以太坊全网算力较去年8月已上升126%
  9. 对PostgreSQL xmin的深入学习
  10. 25岁!零基础想转行做软件测试,可以吗?晚是不晚!
  11. c++ list遍历_List集合就这么简单「源码剖析」
  12. Ubuntu14.04系统中文输入法安装详解
  13. Display yuv formatted video by shader
  14. 这么多前端优化点你都记得住吗?
  15. 关于VMware无法输入许可证密钥的方法
  16. Unity 内置渲染管线、SRP、URP、HDRP区别
  17. windows环境下curl 安装和使用
  18. 【Matlab图像隐写】DCT数字水印嵌入与提取【含GUI源码 943期】
  19. 苹果支付(内购项目)回调验证
  20. Visual Studio Code插件

热门文章

  1. Python开发实习心得~
  2. SCI数据库使用手册(无图版)
  3. C是C++的子集吗?
  4. C# RadioButton: 单选按钮控件
  5. 项目管理领域关键知识点之横道图和网络图
  6. NV GTX680对GTX580:另一个视角
  7. 2021年富平迤山中学高考成绩查询,本地:迤山中学高考成绩喜人
  8. 2021年危险化学品经营单位主要负责人免费试题及危险化学品经营单位主要负责人模拟考试
  9. Project Professional安装:Windows Installer(MSI)与即点即用
  10. 游戏数据分析报告--<野蛮时代>