学习笔记——ViT(Vision Transformer)

谷歌团队探索了 Transformer 在图像识别中的直接应用。

Vision Transformer(ViT)是一种基于Transformer架构的深度学习模型,用于图像识别和计算机视觉任务。与传统的卷积神经网络(CNN)不同,ViT直接将图像视为一个序列化的输入,并利用自注意力机制来处理图像中的像素关系。

ViT通过将图像分成一系列的图块(patches),并将每个图块转换为向量表示作为输入序列。然后,这些向量将通过多层的Transformer编码器进行处理,其中包含了自注意力机制和前馈神经网络层。这样可以捕捉到图像中不同位置的上下文依赖关系。最后,通过对Transformer编码器输出进行分类或回归,可以完成特定的视觉任务。

为什么不能直接将transformer直接应用于图像处理中呢?这是因为transformer本身是用来处理序列任务的(比如NLP),但图像是二维或三维的,像素之间存在一定的结构关系,如果单纯的将transformer之间应用于图像中,像素和像素之间需要一定的关联性,那么这个计算量是相当大的。因此vit就诞生了。

ViT模型框架

图1:模型概述。我们将图像分割成固定大小的块,线性地嵌入每个块,添加位置嵌入,并将生成的向量序列提供给标准的Transformer编码器。为了执行分类,我们向序列中添加额外的可学习“分类令牌”。

Embedding详解

对于标准的Transformer模块,要求输入的是token(向量)序列,即二维矩阵[num_token, token_dim],如下图,token0-9对应的都是向量,以ViT-B/16为例,每个token向量长度为768。

对于图像数据而言,其数据格式为[H, W, C],三维矩阵明显不是Transformer想要的。所以需要先通过一个Embedding层来对数据做个变换。如下图所示,首先将一张图片按给定大小分成一堆Patches。以ViT-B/16为例,将输入图片(224x224)按照16x16大小的Patch进行划分,划分后会得到196个Patches。接着通过线性映射将每个Patch映射到一维向量中,每个Patche数据shape为[16, 16, 3]通过映射得到一个长度为768的向量(后面都直接称为token)。[16, 16, 3] -> [768]

在代码实现中,直接使用一个kernel_size为16x16,stride为16,卷积核个数为768的卷积来实现。通过卷积[224, 224, 3] -> [14, 14, 768],然后把H以及W两个维度展平即可[14, 14, 768] -> [196, 768],此时正好变成了一个二维矩阵,正是Transformer想要的。

在输入Transformer Encoder之前注意需要加上[class]token以及Position Embedding。 在原论文中,作者说参考BERT,在刚刚得到的一堆tokens中插入一个专门用于分类的[class]token,这个[class]token是一个可训练的参数,数据格式和其他token一样都是一个向量,就是一个长度为768的向量,与之前从图片中生成的tokens拼接在一起,Cat([1, 768], [196, 768]) -> [197, 768]。然后关于Position Embedding就是之前Transformer中讲到的Positional Encoding,这里的Position Embedding采用的是一个可训练的参数(1D Pos. Emb.),是直接叠加在tokens上的(add),所以shape要一样。刚刚拼接[class]token后shape是[197, 768],那么这里的Position Embedding的shape也是[197, 768]。

Transformer Encoder详解

Transformer Encoder其实就是重复堆叠Encoder Block L次,下图为Encoder Block,主要由以下几部分组成:

Layer Norm,对每个token进行Norm处理。

Multi-Head Attention,多头注意力机制是自注意力(Self-Attention)的一个扩展。

Dropout/DropPath,在原论文的代码中是直接使用的Dropout层,在但rwightman实现的代码中使用的是DropPath(stochastic depth),可能后者会更好一点。

MLP Block,如上图右侧所示,就是全连接+GELU激活函数+Dropout组成也非常简单,需要注意的是第一个全连接层会把输入节点个数翻4倍[197, 768] -> [197, 3072],第二个全连接层会还原回原节点个数[197, 3072] -> [197, 768]

MLP Head详解

上面通过Transformer Encoder后输出的shape和输入的shape是保持不变的,以ViT-B/16为例,输入的是[197, 768]输出的还是[197, 768]。注意,在Transformer Encoder后其实还有一个Layer Norm没有画出来,后面的ViT的模型可以看到详细结构。这里只是需要分类的信息,所以只需要提取出[class]token生成的对应结果就行,即[197, 768]中抽取出[class]token对应的[1, 768]。接着通过MLP Head得到我们最终的分类结果。MLP Head原论文中说在训练ImageNet21K时是由Linear+tanh激活函数+Linear组成。但是迁移到ImageNet1K上或者你自己的数据上时,只用一个Linear即可。

存在的问题

1、数据不足:小数据集可能不足以训练出一个有效的ViT模型,因为ViT需要大量数据来学习全局依赖关系。

2、过拟合:在小数据集上训练ViT容易导致过拟合,因为模型可能会记住训练数据而不是学习到泛化的特征。

解决方案

1、预训练模型:使用在大规模数据集上预训练的ViT模型,然后在小数据集上进行微调。预训练可以帮助模型获得有用的特征表示,从而减少对小数据集的依赖。

2、迁移学习:利用已经在相关任务上训练好的模型进行迁移学习,可以有效利用小数据集进行训练。

3、小型ViT架构:使用较小的ViT变体,这些变体通常包含较少的参数,更适合小数据集上的训练。

建议采用迁移学习方法,即使用在大型数据集上预训练的ViT模型,并将其微调到小型数据集上。

总结

1ViT开创性的提出了Transformer除了在NLP领域之外,在视觉领域也能产生很好的效果。

2、作者使用了纯Transformer应用在图像分类,没有专门为视觉任务而做出特定的结构设计或者改变,实现了TransformerNLPCV领域的统一(最大的贡献),后续很多其他先进方法都是在ViT的基础上不断优化改进。

3、从效果来看,ViT的精度和模型复杂度都不如Swin Transformer,但是Swin Transformer是专门为视觉领域的下游任务做了特定的结构设计,使得其效果大大提升,模型复杂度也降低下来,SwinT的作者证明了其在视觉下游任务(分类、检测、分割)的通用性,可以作为一个很强的backbone;而ViT则没有为任何领域专门设计结构,使得Transformer能够应用在NLP也可以应用在CV,实现大一统;这是两个模型各自突出的贡献。

后面我会继续分享自己关于Swin Transformer的学习笔记。

学习笔记——Swin Transformer(ICCV 2021 best paper)-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题 2024/9/21 10:40 缘起:常见的问题,你下载视频的时候,4K分辨率的视频播放的时候出现偏色异常,但是1080p分辨率的正常呀! 偏色的识别&…

华为地图服务 - 如何实现地图数据聚合效果? -- HarmonyOS自学20

场景介绍 本章节将向您介绍如何根据地图数据实现聚合效果。 您可以通过比例尺缩放自适应聚合效果,聚合图标可点击。聚合支持功能: 支持按距离聚合ClusterItem。支持绘制聚合Overlay的默认图标。支持绘制聚合Overlay的自定义图标。支持监听聚合Overlay…

祛“魅”霸王茶姬

“奔着员工福利可以每天喝奶茶去的,我在招聘软件上尝试约了霸王茶姬的面试,想着应该也不会太累,推荐去吗?”一位霸王茶姬的重度爱好者在社交平台发帖问。 茶饮界的“网红”“顶流”,年轻人的“新宠”,霸王…

巴蒂克图案识别系统源码分享

巴蒂克图案识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

一文掌握 Prompt:万能框架+优化技巧+常用指标

Prompt 万能框架 在编写 Prompt 时,从0到1的编写出第一版 Prompt 往往是最难的,而基于已有 Prompt 利用各种技巧进行优化则相对简单。善于解决 “数理问题” 的我们在面对这样一个偏 “文理问题” 的任务时,就像小时候写作文一样难以提笔。如…

Java程序员在编写代码时,通常会使用哪些工具和框架?

Java程序员在日常编码工作中,通常会使用一系列工具和框架来提高开发效率、保证代码质量以及实现快速迭代。以下是一些常用的工具和框架: 开发环境和IDE IntelliJ IDEA:一个强大的Java集成开发环境,提供了智能代码补全、代码分析…

攻防世界Web新手练习区题目(view_source到simple_php)WP

目录 view_source​ robots​ Training-WWW-Robots PHP2​ get_post​ backup​ cookie​ disabled_button​ simple_js​ xff_referer​ weak_auth​ command_execution​ simple_php​ view_source 获取在线场景后访问题目场景 在右键不管用的情况下&#xff0…

一招教你挑代理IP的秘诀

逛乎,一直刷到这类问题: 本质上,都是在面对市面上那么多代理IP服务提供商,挑得眼花缭乱了,而代理IP直接影响到我们数据采集任务的效率、安全性和成功率,所以我们在挑选服务提供商的时候都会谨慎一些。索性我…

华为OD机试 - 水仙花数Ⅱ - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

JavaWeb--纯小白笔记03:servlet入门---动态网页的创建

笔记:index.html在tomcat中为默认的名字,html里面的语法不严谨。改配置文件要小心,不然容易删掉其他 Servlet:服务器端小程序,写动态网页需要用Servlet,普通的java类通过继承HttpServlet,可以响…

抖音如何改ip地址到另外城市

在数字化时代,抖音作为广受欢迎的社交媒体平台,不仅连接了亿万用户,也成为了展示个人生活、分享创意内容的重要舞台。然而,有时候出于隐私保护等需求,用户可能希望更改抖音账号显示的IP地址,使其看起来像是…

超过1000篇文献?Mem)oRAG,下一代 RAG 技术,轻松让AI记住这些海量信息?

想象一下,你每天要阅读几十篇文献,整理上千页的笔记,再将这些信息整合到自己的研究中,是不是有点头大?不光是你,很多人都有这样的困扰,尤其是在处理大量信息时。我们总是渴望一种更智能的方式,能帮我们高效地找到、理解并且运用这些知识。而这正是 MemoRAG 的用武之地。…

会声会影2025视频剪辑教学

会声会影2025是一款超级受欢迎的视频播放软件,用于剪辑和编辑各种类型的视频素材。软件具有直观的用户界面,使得即使对于初学者来说也能轻松上手。该软件提供了各种创意工具,可以帮助用户实现他们的创意想法。用户可以裁剪、合并和重新排列视…

基于误差状态的卡尔曼滤波

基于误差状态的卡尔曼滤波ESKF 注意这里的观测方程,是IMU的误差状态和激光定位的差值得到的。

已解决sublime text 3 注册激活

问题:未激活 解决方法: 安装sublime3后,将Patch.exe文件放入sublime 安装文件下 运行Patch.exe,复制粘贴注册码到 preference->enter license;操作如下 点击“Use license”,提示如下图表示激活成功: 重…

学习笔记——EfficientNet

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks EfficientNet:重新思考卷积神经网络的模型扩展 论文下载地址: https://arxiv.org/abs/1905.11946 学习笔记参考了这位大佬:https://blog.csdn.net/qq_37541097/ar…

【吊打面试官系列-MySQL面试题】列对比运算符是什么?

大家好&#xff0c;我是锋哥。今天分享关于【列对比运算符是什么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 列对比运算符是什么&#xff1f; 在 SELECT 语句的列比较中使用&#xff0c;<>&#xff0c;<&#xff0c;<&#xff0c;> &#x…

高校心理辅导:Spring Boot技术实现

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;任…

Spring Boot赋能高校心理健康教育

1绪 论 1.1研究背景 随着计算机和网络技术的不断发展&#xff0c;计算机网络已经逐渐深入人们的生活&#xff0c;网络已经能够覆盖我们生活的每一个角落&#xff0c;给用户的网上交流和学习提供了巨大的方便。 当今社会处在一个高速发展的信息时代&#xff0c;计算机网络的发展…