【深度学习】深刻理解ViT

        ViT(Vision Transformer)是谷歌研究团队于2020年提出的一种新型图像识别模型,首次将Transformer架构成功应用于计算机视觉任务中。Transformer最初应用于自然语言处理(如BERT和GPT),而ViT展示了其在视觉任务中的潜力。ViT的核心思想是将图像划分为小的固定大小的块(patches),然后将这些块视为一个序列输入Transformer模型,类似于NLP中的词序列。这种方法不同于传统的卷积神经网络(CNN),它不依赖卷积操作,而是完全基于全局的自注意力机制。

论文原文:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

1. 方法

        Transformer用encoder-decoder结构,通过学习语言的拆解组装对照表,实现了很好的机器翻译效果。BERT模型在此基础上通过encoder间的团结协作,在NLP领域实现了多种任务的处理。而视觉领域就是ViT模型了。与BERT相比,ViT的主要框架没有什么改变,都是采用多个Transformer encoder,依然使用多层多头的结构。其主要工作在于输入阶段,把图片进行向量化,转换成embeddings的词结构,从而实现了NLP中类似句子一样的效果,后续encoder的操作和原始Transformer中完全相同。

1.1. patch embedding

        就如同ViT的题目所说的那样,将原始二维图像分成小块,称为patch,大小为16x16。每个patch也就相当于在机器翻译中句子中的一个词,然后经过全连接层,把patch压成一个向量。在向量的开头加入class token <cls>,目的是便于后期实现特征分类。

1.2. position embedding

        将这个长x宽x通道数的矩阵表示进行展平,然后通过一个共享的线性层投射到Transformer模型里面的特征维度,比如1024。在投影后的固定长度的向量上加入tokens的位置信息,即加入一个可学习的向量,为后面的self-attention计算做准备。位置编码可以理解为一张表,表一共有N行,N的大小和输入序列长度相同,每一行代表一个向量,向量的维度和输入序列embedding的维度相同,其中位置编码的操作是sum,而不是concatenate。因为后面采用的是Transformer Encoder,每个Token不论在哪个位置都可以看到所有的Token。

  • 1-D 位置编码:例如3x3共9个patch,patch编码为1到9

  • 2-D 位置编码:patch 编码为11,12,13,21,22,23,31,32,33,即同时考虑X和Y轴的信息,每个轴的编码维度是D/2

  • 实际实验结果表明,不管使用哪种位置编码方式,模型的精度都很接近,甚至不适用位置编码,模型的性能损失也没有特别大。原因可能是ViT是作用在image patch上的,而不是image pixel,对网络来说这些patch之间的相对位置信息很容易理解,所以使用什么方式的位置编码影像都不大。

1.3. MLP Head

        Transformer之后的MLP Head其实就是一个全连接层,先把输入时添加的分类向量拿出来,输入到这个网络里,输出就是图像的分类类别了。

2. ViT训练

        与BERT模型类似,ViT也根据encoder层数的不同训练连三种模型——ViT-BaseViT-LargeViT-Huge。patch size越小,序列越长,计算代价越大,一般来说效果也会越好。ViT的训练与BERT一样,也分为pre-training和fine-tuning两个过程。    

        论文中对学习到的位置编码进行了可视化,发现相近的图像块的位置编码较相似,且同行或列的位置编码也相近。随着encoder的增加,每个头关注的像素距离越来越远,关注全局信息。

参考资料:

ViT(Vision Transformer)解析 - 知乎icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/445122996

【深度学习】详解 Vision Transformer (ViT)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_39478403/article/details/118704747

【ViT模型】Transformer向视觉领域开疆拓土……_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV13B4y1x7jQ?spm_id_from=333.788.videopod.sections&vd_source=0dc0c2075537732f2b9a894b24578eed

VIT (Vision Transformer)深度讲解_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV15RDtYqE4r/?spm_id_from=333.337.search-card.all.click&vd_source=0dc0c2075537732f2b9a894b24578eed

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

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

相关文章

用于日语词汇学习的微信小程序+ssm

日语词汇学习小程序是高校人才培养计划的重要组成部分&#xff0c;是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。本学生所在学院多采用半手工管理日语词汇学习小程序的方式&#xff0c;所以有必要开发日语词汇…

ichunqiu-2024年春秋杯网络安全联赛夏季赛-brother

1.打开题目&#xff0c;看到题目我就想到了再后面加一个ls&#xff0c;结果回显了ls&#xff0c;然后又想到会不会是模板注入&#xff0c;尝试{{7*7}}&#xff0c;然后页面返回了49&#xff0c;说明存在模板注入 如下&#xff0c;判定为模板注入 看一下系统环境配置 然后看可…

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 数据处理

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 数据处理 flyfish 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_LoRA配置如何写 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_单图推理 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_原模型_单图推理 基于Q…

QT从入门到精通——Qlabel介绍与使用

1. QT介绍——代码测试 Qt 是一个跨平台的应用程序开发框架&#xff0c;广泛用于开发图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;也支持非图形应用程序的开发。Qt 提供了一套工具和库&#xff0c;使得开发者能够高效地构建高性能、可移植的应用程序。以下是…

Edge SCDN深度解析,边缘安全加速的创新实践

边缘安全加速&#xff08;Edge Secure Content Delivery Network&#xff0c;SCDN&#xff09;是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术&#xff0c;智能调度使用户就近获取所需内容&#xff0c;为…

WebRTC Simulcast 大小流介绍与优化实践

Simulcast 是 WebRTC 中的一种标准化技术 &#xff0c;简称大小流。通过 Simulcast&#xff0c;客户端可以同时发送同一视频的多个版本。每个版本都以不同的分辨率和帧率独立编码&#xff0c;带宽较多的拉流端可以接收较高质量的视频流&#xff0c;带宽有限的拉流端则可以接收较…

40分钟学 Go 语言高并发:服务监控与追踪

服务监控与追踪 一、知识要点总览 模块核心内容技术选型难度监控指标请求量、响应时间、错误率、资源使用Prometheus Grafana中链路追踪分布式调用链、性能瓶颈分析Jaeger, OpenTelemetry高日志处理日志收集、分析、存储ELK Stack中告警系统告警规则、通知渠道、告警分级Ale…

vue3 使用 konva

1&#xff1a;安装 npm install vue-konva konva --save 在main.ts 里面引入 import VueKonva from vue-konva; app.use(VueKonva); 2&#xff1a;效果图 3&#xff1a;直接粘贴复制就能用你 &#xff08;重要的地方做了备注&#xff09; <template><div st…

Spring Boot集成Knife4j文档工具

Knife4j 搭建 Knife4j环境的的搭建和Swagger一样都比较简单&#xff0c;只需要极简的配置即可。 maven依赖 我使用的是较高版本的基于openapi规范的依赖包&#xff0c;OpenAPI2(Swagger)规范是Knife4j之前一直提供支持的版本&#xff0c;底层依赖框架为Springfox。 此次在4…

keil5搜索框还有左侧文件状态栏不见的问题

点击上面的window&#xff0c;弹出 reset view to default &#xff0c;然后点击&#xff0c;再点击reset&#xff0c;就ok了

基于Mybatis,MybatisPlus实现数据库查询分页功能

基于Mybatis&#xff0c;MybatisPlus实现数据库查询分页功能 目录 基于Mybatis&#xff0c;MybatisPlus实现数据库查询分页功能使用Mybatis插件实现分页数据库准备分页插件配置和使用常用数据&#xff1a; 使用MybatisPlus插件实现分页数据库准备分页插件配置和使用自定义分页查…

HNU_多传感器(专选)_作业4(构建单层感知器实现分类)

1. (论述题)&#xff08;共1题&#xff0c;100分&#xff09; 假设平面坐标系上有四个点&#xff0c;要求构建单层感知器实现分类。 (3,3),(4,3) 两个点的标签为1&#xff1b; (1,1),(0,2) 两个点的标签为-1。 思路&#xff1a;要分类的数据是2维数据&#xff0c;需要2个输入…

内圆弧转子泵绘制工具开发

接着上期的Gerotor 泵的话题继续。最近有小伙伴找我开发一个内圆弧摆线泵的计算绘制工具&#xff0c;也就是把上次计算绘制的过程做成一个桌面应用工具&#xff0c;这样用起来会更方便、效率更高。那究竟是什么样的工具呢&#xff1f;一起来看看&#xff1a; 前面不是已经有了上…

面试技术点之安卓篇

一、基础 二、高级 三、组件 Android中SurfaceView和TextureView有什么区别&#xff1f; 参考 Android中SurfaceView和TextureView有什么区别&#xff1f; 四、三方框架 五、系统源码 六、性能优化

在Ubuntu 2404上使用最新的PicGo

在转向Ubuntu之后&#xff0c;果断下载了今年最新的Ubuntu2404,但是随之而来的是底层组件的更新&#xff0c;很多以前可以畅快使用的软件&#xff0c;因为需要老版本的组件而不能正确运行&#xff0c;PicGo就是如此 我们从这里打开Release列表 其中Ubuntu可用的只有这个AppIma…

用ue5打开网址链接

需要用到 Launch URL 这个函数 字面意思就是打开填写的链接网页 这里填写的是百度&#xff0c;按下Tab键后就会打开百度的网页

ISP(Image Signal Processor)——HDR技术总结

传统多帧融合技术 拍摄一系列不同曝光时长的图像帧&#xff08;LDR&#xff09;&#xff0c;然后使用融合算法进行融合成HDR图像。 融合算法可以分为两种 基于照度图估计的融合 基于照度估计需要拟合相机响应函数&#xff0c;详细可以参考如下论文&#xff1a; Recovering H…

C++打造局域网聊天室第七课: Socket编程初步2

文章目录 前言一、Socket的API函数二、服务端建立Socket步骤总结 前言 C打造局域网聊天室第七课&#xff1a; Socket编程初步2 一、Socket的API函数 接着上一课的内容&#xff0c;我们在chartroom.cpp中找到如下位置 插入断点&#xff0c;运行 运行到断点处后&#xff0c;按…

【razor】echo搭配relay功能分析

echo 要搭配relay 实现作者说relay在linux上跑,可以模拟丢包、延迟目前没看到如何模拟。relay监听9200,有俩作用 echopeer1 发relay,replay 把peer1的包给peer2 ,实现p2p能力。 接收端:采集后发送发给relay的 接收端的地址就是自己,的地址就是本地的9200,因此是让relay接…

Wallpaper壁纸制作学习记录11

操控变形动画介绍 操控变形是使用Wallpaper Engine为角色和某些对象创建复杂动画的一种高级方法。操控变形是一个多步骤过程&#xff0c;要求您有一个单独的图像图层&#xff0c;其中包含要制作动画的角色或对象的剪切图。 操控变形功能相对复杂&#xff0c;您也可以创建仅包含…