Vision Transformer论文阅读笔记

目录

    • An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale -- Vision Transformer
      • 摘要
      • Introduction—简介
      • RELATED WORK—相关工作
      • METHOD—方法
        • VISION TRANSFORMER (VIT)—视觉Transformer(ViT)
      • 分析与评估
        • PRE-TRAINING DATA REQUIREMENTS—预训练数据要求
        • INSPECTING VISION TRANSFORMER—检查vision transformer
      • 总结与展望
      • VIT详细网络结构

An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale – Vision Transformer

论文链接:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

摘要

(1)本文证明了图像对CNN的依赖不是必要的,将纯Transformer直接用于图像patch序列可以很好地执行图像分类任务。

(2)和最先进的CNN相比,vision transformer(ViT)可以获得出色的结果,同时训练所需的计算资源也相对较少(仍然需要很多资源,只是相对更耗资源的网络而言的)

Introduction—简介

问题:如何将transformer应用到视觉问题上?

Bert序列长度也就500左右,如果要将图片的每个像素展开变成一个序列,就算224 × 224 = 50176 (≈ 500 × 100)图片输入计算量也十分大。

解决方向:

1、把原图的局部当作一个输入(类似卷积也是局部操作)

2、把处理过的特征图作为输入(下采样降低分辨率)

本文方法

(1)将图像拆分为patches(比如输入为224 × 224,每个patch就是 16 × 16,224 / 16 = 14,输入序列长度就是 14 × 14 = 196 ),并提供这些patches的线性embeddings序列作为 Transformer 的输入。(图像patches和在NLP应用中的token相似)

(2)采用了有监督的方式对图像分类模型进行训练。

不足:在不充足数据下训练,会导致模型泛化性不足。

注意:在中型大小数据集上,如果不加以其他比较强的约束Vit跟同等大小的残差网络相比是比较弱的。

原因:因为卷积神经网络中有归纳偏置,在VIT中没有。归纳偏置其实就是一种先验知识,或者说一种提前做好的假设。

最常见的两个归纳偏置(inductive bias):

locality:图片中相邻区域通常会有相邻的特征(比如桌子和椅子一般都挨在一起),靠的越近的东西相关性就越强。

translation equivariance(平移等变性):公式表达为g(f(x)) = f(g(x)),把g理解为卷积,f理解为平移,就是不管先做哪个操作,结果都是一样的,在卷积神经网络里面只要输入的图片不变,经过同一个卷积核的结果是一定的。

通过这两个归纳偏置,卷积神经网络就有了很多先验信息,可以通过相对少的数据,去学习到一个比较好的模型。

Vit没有这些先验知识,因此往往基于之前的大规模预训练来训练可以获得较好的结果。

Translation Equivariance (平移等变性)和Translation Invariance(平移不变性)

Translation Equivariance (平移等变性):

定义: 一个系统或算法在输入数据经历平移(或移动)时,保持输出相对于输入的相对位置的性质。
示例: 在图像处理中,一个具有平移等变性的算法可以在图像中检测或处理特征,而不受这些特征在图像中的位置变化的影响。它会产生相应的移动,但不会改变特征的识别或提取结果。

Translation Invariance (平移不变性):

定义: 一个系统或算法在输入数据经历平移时,保持输出不变的性质。
示例: 在图像处理中,一个具有平移不变性的算法可以在图像中检测或识别特征,而不受这些特征在图像中的位置变化的影响。无论特征的位置如何变化,该算法都会产生相同的识别结果。

简而言之,平移等变性表示系统对于输入数据的平移保持输出相对位置的相对性,而平移不变性表示系统对于输入数据的平移保持输出完全不变。

RELATED WORK—相关工作

(1)Transformer: 用于机器翻译的方法,被广泛用于NLP领域

(2)BERT: 使用去噪自我监督的训练前任务

(3)局部多头点积自我注意块: 只在每个查询像素的局部社区中应用自注意力,可以完全取代卷积

(4)稀疏Transformer: 采用了对全局自关注的可扩展近似,以便适用于图像

(5)在不同大小的块中应用: 在极端情况下,只沿着个别轴线应用

(6)iGPT: 无监督的方式,在降低图像分辨率和色彩空间后将Transformers应用于图像像素

无监督对比:BERT类似完型填空,GPT是预测后续的单词

METHOD—方法

VISION TRANSFORMER (VIT)—视觉Transformer(ViT)

(1)第1部分:将图形转化为序列化数据

image-20240620163813939

  • 首先输入为一张图片,将图片划分成9个patch,然后将每个patch重组成一个向量,得到所谓的flattened patch(上图红框内)。

  • 如果图片是H×W×C维的,就用P×P大小的patch去分割图片可以得到N个patch(实际处理通过卷积操作实现,然后卷积核的尺寸个数根据[num_token,token_dim]设置),那么每个patch的大小就是P×P×C,将N个patch 重组后的向量concat在一起就得到了一个N×P×P×C的二维矩阵,相当于NLP中输入Transformer的词向量。

  • patch大小变化时,重组后的向量维度也会变化,作者对上述过程得到的flattened patches向量做了Linear Projection(线性投射层操作,其实就是一个全连接层),将不同长度的flattened patch向量转化为固定长度的向量(记作D维向量)

    综上,原本H×W×C 维的图片被转化为了N个D维的向量(或者一个N×D维的二维矩阵)。

(2)第2部分:Position embedding

图像是一个整体,因此patch之间是有位置信息的,打乱顺序后就不是原来的图片了。

但是在自注意力中两两计算不会涉及位置信息(即便打乱了结果也一样),因此需要加入位置信息。

image-20240620171207816

由于Transformer模型本身是没有位置信息的,和NLP中一样,我们需要用position embedding将位置信息加到模型中去。

如上图所示,编号有0-9的紫色框表示各个位置的position embedding,而紫色框旁边的粉色框则是经过linear projection之后的flattened patch向量。

position embedding也是一个可训练的参数,它其实可以看作一个N(patch) × dimension (patch的维度也就是token_dim)的矩阵,然后是可以学习得到的。

原文采用相加(add)的方式将position embedding(即图中紫色框)和patch embedding(即图中粉色框)结合position信息,最终的宽、高、深度都不会改变

对于position采用1D、2D还是相对位置编码表示,作者进行了消融实验(如下表),相比没有位置信息的效果要好3个百分点,至于用哪种方式表示位置信息,差别不大,只要用了就行。

举例:一张图片划分成九宫格

1D:1,2,3,4,…,8,9

2D:相当于xy轴,11,12,13,21,22,23,31,32,33

relative:比如1D中2和9相差7个单位距离,用7(offset)来表示

image-20240620171921293

(3)第3部分:Learnable embedding

image-20240620165032586

patch + position embedding = token,tokens包含position信息以及图像信息。

在一系列 token 的前面加上加上一个新的 token,叫做class token(上图带星号),它并不是某个patch产生的,增加class token是参考bert网络,它的位置信息永远是0,它的维度(dimension)需要和patch的维度一致。

Class token的作用是作为一个分类字符(也是一个可训练的参数),经过encoder后对应的结果这个token的输出当作整个transformer模型的输出,也就是当作整个图像的特征输出。(个人理解:这个token是附加的,对于全图中其他任何patch的关注都是公平的关注,因此相当于是个全局平均池化的过程,但是如果采用某个patch的token作为输出,受到自身位置信息和相对位置信息的影响,关注度肯定是不平均的,因此不能作为输出)

类比传统卷积神经网络,经过几个block之后得到一个feature map,在分类之前会先对这个feature map执行GAP(全局平均池化)得到一个向量(1 × n),然后这个向量代表全局对于这个图片的特征,就可以把向量拿去做分类。

在transformer(如下示意图)中,VIT是使用红色框内的输出(cls token的输出)作为分类的输入;

但其实也可以把每个patch对应token(绿色框内)的输出进行GAP,然后作为分类的输入。

image-20240620174018845

本文也对两种方法进行了对比,可以从下图看出,学习率设置好,采用GAP的方式比采用cls token的方式准确率更高。

image-20240620174347768

以上的操作其实就是对图像进行预处理得到token,对于位置信息的表示和输出分类的特征表示,为了和原来的transformer保持一致所以采取了1D和class token。

(4)第4部分:Transformer encoder

image-20240620170451834

最后输入到 Transformer Encoder 中,对应着右边的图,将 block 重复堆叠 L 次,整个模型也就包括 L 个 Transformer。Transformer Encoder结构和NLP中Transformer结构基本上相同,我们只是需要对它进行一个分类,只提取针对class token所对应的输出,经过 MLP Head 进行类别判断,得到最终分类的结果。

下图是Encoder Block和 MLP Block的内部结构图

image-20240620180354242

分析与评估

PRE-TRAINING DATA REQUIREMENTS—预训练数据要求

image-20240620175524932

图3展示了模型在 ImageNet 数据集上的性能,图4展示了在 JFT300M 数据集的随机子集以及完整数据集上进行了模型训练的结果。

结论:卷积归纳偏置对于规模较小的数据集较为有用,但对于较大的数据集而言,学习相关模式就足够了,甚至更加有效。同时VIT在小样本的训练可能是一个不错的研究方向。

INSPECTING VISION TRANSFORMER—检查vision transformer

image-20240620180712102

上图为ViT-L/32 的position embedding的相似性。

位置编码:相似性(余弦相似度),所以相似性越高接近1,越低越接近-1。

跟自己相似性最高,同行同列相似性也比较高,虽然是1D编码但是学习到了2D图像的概念(所以使用1D和2D表示位置准确率相差不大)。

image-20240620180811410

上图按heads和网络深度划分的参与区域大小。

红框部分表示像素点相近的自注意力学习到的信息,黄色框部分表示像素点距离远的自注意力学习到的信息。

横坐标为网络层数,可以看出在浅层网络就能学习到全局(距离远)的信息了,但是在传统卷积网络中,浅层感受野小只能学习到局部信息。

在深层网络基本上就是高层语义信息(像素点之间距离远)。

下图中右边Attention列出来的图,就代表了高层的语义信息。

image-20240620181243065

结论:

(1)模型使用了全局集成信息的能力。其他注意力head在低层中始终具有较小的注意力距离。

(2)该模型关注与分类语义相关的图像区域。

总结与展望

将图片处理成 patch 序列,然后使用 Transformer 去处理,取得了接近或超过卷积神经网络的结果,同时训练起来也更快。

在提取patch和进行位置编码时使用了一些图像特有的归纳偏置,其他和transformer一致。 ( 简单、扩展性好)

将ViT应用于其他计算机视觉任务,如检测和分割。

自监督也行,但是目前还没有监督效果好,继续探索自我监督的预训练方法。

可以进一步扩大ViT的规模,随着模型尺寸的增加,参数越多,性能似乎还没有饱和。(后续原作者的论文证实了这一点)

通过只用transformer实现多模态大一统。

VIT详细网络结构

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS2022+Qt+OpenCV Debug模式下,循环中格式转换引起的内存异常问题 debug_heap.cpp

文章目录 前言一、问题二、报错1.提示图片2.提示堆栈3.反汇编位置 三、解决办法总结 前言 最近在使用VS2022,C,OpenCV,Qt开发时,遇到了一个疑难杂症-在循环中执行字符串格式转换会触发内存异常,经过痛苦的排查过程&am…

编译libvlccpp

首先下载vlc sdk https://get.videolan.org/vlc/3.0.9.2/win64/vlc-3.0.9.2-win64.7z Cmake 生成libvlccpp vs2022工程文件 编译libvlccpp 编译出错需修改代码 错误信息: \VLC\sdk\include\vlc/libvlc_media.h(368): error C2065: “libvlc_media_read_cb”: 未…

老师家访的主要内容

在教育的广阔天地中,家访无疑是一座连接学校与家庭的桥梁。为何要进行家访?这不仅仅是一个简单的问题,它背后蕴含着教育者对孩子们成长环境的深切关怀。作为一位教师,我深知家访的重要性,它不仅能够让我更全面地了解学…

【回溯算法经典题目解析】

1. 什么是回溯算法 回溯算法是⼀种经典的递归算法,通常用于解决组合问题、排列问题和搜索问题等。 回溯算法的基本思想:从一个初始状态开始,按照⼀定的规则向前搜索,当搜索到某个状态⽆法前进时,回退到前⼀个状态&am…

cesium 聚合

cesium 聚合(下面附有源码) 示例代码 <html lang="en"><head><!-- Use correct character set. -->

【智能算法】目标检测算法

目录 一、目标检测算法分类 二、 常见目标检测算法及matlab代码实现 2.1 R-CNN 2.1.1 定义 2.1.2 matlab代码实现 2.2 Fast R-CNN 2.2.1 定义 2.2.2 matlab代码实现 2.3 Faster R-CNN 2.3.1 定义 2.3.2 matlab代码实现 2.4 YOLO 2.4.1 定义 2.4.2 matlab代码实现…

电信NR零流量小区处理

【摘要】随着目前网络建设逐步完善&#xff0c;5G用户的不断发展&#xff0c;针对零流量小区的分析及处理存在着必要性&#xff0c;零流量小区的出现既是用户分布及行为的直观体现&#xff0c;也是发展用户的一个指引&#xff0c;同时也能发现设备的一些故障。一个站点的能够带…

【数值计算库-超长笔记】Python-Mpmath库:高精度数值计算

原文链接&#xff1a;https://www.cnblogs.com/aksoam/p/18279394 更多精彩&#xff0c;关注博客园主页&#xff0c;不断学习&#xff01;不断进步&#xff01; 我的主页 csdn很少看私信&#xff0c;有事请b站私信 博客园主页-发文字笔记-常用 有限元鹰的主页 内容&#xf…

燃料电池混合电源的能量管理系统

这个例子显示了燃料电池混合电源的能量管理系统。 这个例子展示了燃料电池混合电源的能量管理系统。 电路描述 本文给出了基于燃料电池的多电动飞机应急动力系统的仿真模型。随着MEA中起落架和飞控系统的电气化程度的提高&#xff0c;常规应急电源系统(冲压式空气涡轮或空气驱…

代码随想录算法训练营第20天 | 题目: 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

代码随想录算法训练营第20天 | 题目&#xff1a; 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 文章来源&#xff1a;代码随想录 题目名称&#xff1a; 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的…

Centos7部署Mysql8.0超级详细教程,一看就会!

1、准备 下载 Mysql 安装包源信息,去到这个网址&#xff0c;https://dev.mysql.com/downloads/repo/yum/ 复制红色框的内容&#xff0c; 2、开始安装 # 以下所有操作建议切换到 root 用户后运行。。yum install wget -y# 将上面的复制内容粘贴到后面&#xff0c;格式&…

前端性能优化-实测

PageSpeed Insights 性能测试 今天测试网站性能的时候发现一个问题&#xff0c;一个h2标签内容为什么会占据这么长的渲染时间&#xff0c;甚至有阶段测到占据了7000多毫秒&#xff0c;使用了很多方法都不能解决&#xff0c;包括了修改标签&#xff0c;样式大小等&#xff0c;当…

JAVA连接FastGPT实现流式请求SSE效果

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排&#xff0c;从而实现复杂的问答场景&#xff01; 一、先看效果 真正实流式请求&#xff0c;SSE效果&#xff0c;SSE解释&am…

CentOS7环境下DataX的安装、使用及问题解决

DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 为了解决异构数据源同步问题&#xff0c;DataX将复杂的网状的同步链路变…

eclipse断点调试(用图说话)

eclipse断点调试&#xff08;用图说话&#xff09; debug方式启动项目&#xff0c;后端调试bug调试 前端代码调试&#xff0c;请参考浏览器断点调试&#xff08;用图说话&#xff09; 1、前端 选中一条数据&#xff0c;点击删除按钮 2、后端接口打断点 断点按钮 介绍 resum…

236、二叉树的最近公共祖先

前提&#xff1a; 所有 Node.val 互不相同 。p ! qp 和 q 均存在于给定的二叉树中。 代码如下&#xff1a; class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root q || root p || root NULL) return root;TreeN…

.NET周刊【6月第5期 2024-06-30】

国内文章 呼吁改正《上海市卫生健康信息技术应用创新白皮书》 C# 被认定为A 组件 的 错误认知 https://www.cnblogs.com/shanyou/p/18264292 近日&#xff0c;《上海市卫生健康“信息技术应用创新”白皮书》发布&#xff0c;提到医疗信创核心应用适配方法及公立医院信息系统…

书城在线系统:基于Java和SSM框架的高效信息管理平台

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM框架&#xff08;Spring, Spring MVC, Mybatis&#xff09; 工具&…

eNSP中WLAN的配置和使用

一、基础配置 1.拓扑图 2.VLAN和IP配置 a.R1 <Huawei>system-view [Huawei]sysname R1 GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 200.200.200.200 24 b.S1 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 100 [S1-vlan100]vlan 1…

使用瀚高数据库开发管理工具进行数据的备份与恢复---国产瀚高数据库工作笔记008

使用瀚高数据库,备份 恢复数据 然后找到对应的目录 其实就是hgdbdeveloper,瀚高的数据库开发管理工具 对应的包中有个dbclient 这个目录,选中这个目录以后,就可以了,然后 在对应的数据库,比如 data_middle 中,选中 某个模式,比如bigdata_huiju 然后右键进行,点击 恢复,然…