【深度学习】深刻理解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-Base、ViT-Large和ViT-Huge。patch size越小,序列越长,计算代价越大,一般来说效果也会越好。ViT的训练与BERT一样,也分为pre-training和fine-tuning两个过程。

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

参考资料:
ViT(Vision Transformer)解析 - 知乎
https://zhuanlan.zhihu.com/p/445122996
【深度学习】详解 Vision Transformer (ViT)-CSDN博客
https://blog.csdn.net/qq_39478403/article/details/118704747
【ViT模型】Transformer向视觉领域开疆拓土……_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV13B4y1x7jQ?spm_id_from=333.788.videopod.sections&vd_source=0dc0c2075537732f2b9a894b24578eed
VIT (Vision Transformer)深度讲解_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV15RDtYqE4r/?spm_id_from=333.337.search-card.all.click&vd_source=0dc0c2075537732f2b9a894b24578eed
相关文章:
【深度学习】深刻理解ViT
ViT(Vision Transformer)是谷歌研究团队于2020年提出的一种新型图像识别模型,首次将Transformer架构成功应用于计算机视觉任务中。Transformer最初应用于自然语言处理(如BERT和GPT),而ViT展示了其在视觉任务…...
解决vue2中更新列表数据,页面dom没有重新渲染的问题
在 Vue 2 中,直接修改数组的某个项可能不会触发视图的更新。这是因为 Vue 不能检测到数组的索引变化或对象属性的直接赋值。为了确保 Vue 能够正确地响应数据变化,你可以使用以下几种方法: 1. 使用 Vue.set() 使用 Vue.set() 方法可以确保 …...
vscode通过ssh连接远程服务器(实习心得)
一、连接ssh服务器 1.打开Visual Studio Code,进入拓展市场(CtrlShiftX),下载拓展Remote - SSH 2. 点击远程资源管理器选项卡,并选择远程(隧道/SSH)类别 3. 点击ssh配置:输入你的账号主机ip地址 4.在弹出的选择配置文件中…...
知识图谱9:知识图谱的展示
1、知识图谱的展示有很多工具 Neo4j Browser - - - - 浏览器版本 Neo4j Desktop - - - - 桌面版本 graphX - - - - 可以集成到Neo4j Desktop Neo4j 提供的 Neo4j Bloom 是用户友好的可视化工具,适合非技术用户直观地浏览图数据。Cypher 是其核心查询语言&#x…...
leetcode 面试经典 150 题:验证回文串
链接验证回文串题序号125类型字符串解题方法双指针法难度简单 题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s…...
【0363】Postgres内核 从 XLogReaderState readBuf 解析 XLOG Record( 8 )
上一篇: 【0362】Postgres内核 XLogReaderState readBuf 有完整 XLOG page header 信息 ? ( 7 ) 直接相关: 【0341】Postgres内核 读取单个 xlog page (2 - 2 ) 文章目录 1. readBuf 获取 page header 大小1.1 XLOG record 跨 page ?1.2 获取 XLOG Record 的 长度(xl…...
docker tdengine windows快速体验
#拉取镜像 docker pull tdengine/tdengine:2.6.0.34#容器运行 docker run -d --name td2.6 --restartalways -p 6030:6030 -p 6041:6041 -p 6043:6043 -p 6044-6049:6044-6049 -p 6044-6045:6044-6045/udp -p 6060:6060 tdengine/tdengine:2.6.0.34#容器数据持久化到本地 #/va…...
详解RabbitMQ在Ubuntu上的安装
目录 Ubuntu 环境安装 安装Erlang 查看Erlang版本 退出命令 编辑安装RabbitMQ 确认安装结果 安装RabbitMQ管理界面 启动服务 查看服务状态 通过IP:port访问 添加管理员用户 给用户添加权限 再次访问 Ubuntu 环境安装 安装Erlang RabbitMq需要…...
Python的3D可视化库【vedo】2-2 (plotter模块) 访问绘制器信息、操作渲染器
文章目录 4 Plotter类的方法4.1 访问Plotter信息4.1.1 实例信息4.1.2 演员对象列表 4.2 渲染器操作4.2.1 选择渲染器4.2.2 更新渲染场景 4.3 控制渲染效果4.3.1 渲染窗格的背景色4.3.2 深度剥离效果4.3.3 隐藏线框的线条4.3.4 改为平行投影模式4.3.5 添加阴影4.3.6 环境光遮蔽4…...
【vue2】文本自动省略组件,支持单行和多行省略,超出显示tooltip
代码见文末 vue3实现 最开始就用的vue3实现,如下 Vue3实现方式 vue2开发和使用文档 组件功能 TooltipText 是一个文字展示组件,具有以下功能: 文本显示:支持单行和多行文本显示。自动判断溢出:判断文本是否溢出…...
网络安全产品之认识防病毒软件
随着计算机技术的不断发展,防病毒软件已成为企业和个人计算机系统中不可或缺的一部分。防病毒软件是网络安全产品中的一种,主要用于检测、清除计算机病毒,以及预防病毒的传播。本文我们一起来认识一下防病毒软件。 一、什么是计算机病毒 计算…...
游戏引擎学习第42天
仓库: https://gitee.com/mrxiao_com/2d_game 简介 目前我们正在研究的内容是如何构建一个基本的游戏引擎。我们将深入了解游戏开发的每一个环节,从最基础的技术实现到高级的游戏编程。 角色移动代码 我们主要讨论的是角色的移动代码。我一直希望能够使用一些基…...
区块链智能合约( solidity) 安全编程
引言:本文由天玄链开源开发者提供,欢迎报名公益天玄链训练营 https://blockchain.163.com/trainingCamp 一、重入和竞态 重入和竞态在solidity 编程安全中会多次提及,历史上也造成了重大的损失。 1.1 问题分析 竞态的描述不严格…...
GUNS搭建
一、准备工作 源码下载: 链接: https://pan.baidu.com/s/1bJZzAzGJRt-NxtIQ82KlBw 提取码: criq 官方文档 二、导入代码 1、导入后端IDE 导入完成需要,需要修改yml文件中的数据库配置,改成自己的。 2、导入前端IDE 我是用npm安装的yarn npm…...
【ETCD】【源码阅读】stepWithWaitOption方法解析
在分布式系统中,ETCD 作为一个强一致性、高可用的 key-value 存储系统,广泛应用于服务发现、配置管理等场景。ETCD 在内部采用了 Raft 协议来保证集群的一致性,而日志预提案(log proposal)是 Raft 协议中至关重要的一部…...
redis 怎么样查看list
在 Redis 中,可以通过以下方法查看列表的内容或属性: 1. 查看列表中的所有元素 使用 LRANGE 命令: LRANGE key start endkey 是列表的名称。start 是起始索引,0 表示第一个元素。end 是结束索引,-1 表示最后一个元素…...
E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?
我们在使用Ubuntu系统时经常性使用sudo apt install命令安装所需要的软件库,偶尔会出现如下问题: E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其…...
创建型设计模式
一、设计模式介绍 1.设计模式是什么 设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案; 2.设计模式怎么来的? 满足设计原则后,慢慢迭代出来的。 3.设…...
仿iOS日历、飞书日历、Google日历的日模式
仿iOS日历、飞书日历、Google日历的日模式,24H内事件可自由上下拖动、自由拉伸。 以下是效果图: 具体实现比较简单,代码如下: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…...
vuedraggable
官方文档:https://www.npmjs.com/package/vuedraggable 中文文档:http://www.itxst.com/vue-draggable/tutorial.html 案例下载地址: https://github.com/SortableJS/Vue.Draggable.git vuedraggablehttps://sortablejs.github.io/Vue.Dr…...
当实施动环监控系统时,如何有效提升机房管理的智能化与运行效率?
提升动环监控系统的智能化管理策略 实现智能化管理的策略、需要关注多维度信息集成与处理。开始、提升传感器网络等互联互通,使各类设备在同一平台上进行数据交互,能够实现对机房环境的实时反馈。然后,利用先进的数据分析技术,如机…...
【Transformer系列】从One-Hot到Embedding:构建AI语言理解的基石
1. 从One-Hot编码说起:AI的第一堂语言课 想象你正在教一个外星人认识汉字。你拿出一本字典说:"这里有10万个字,每个字对应一个编号,猫是第12345号,狗是第67890号。"这就是最原始的One-Hot编码思想——用一串…...
Grid++Report设计器避坑指南:搞不定自动换行和字体缩小?看这篇就够了
GridReport设计器避坑指南:搞不定自动换行和字体缩小?看这篇就够了 当你面对一份需要展示长商品描述、多行地址或其他复杂文本的报表时,是否曾被GridReport的自动换行和字体缩小功能折磨得焦头烂额?作为一款功能强大的报表设计工具…...
大语言模型底层逻辑:从LM到Agent的完整工作流解析!
本文深入剖析了大语言模型(LM)的核心架构与工作原理,重点介绍了Token作为数据处理单元、Context作为临时记忆体的作用,以及Prompt、Tool、MCP等关键组件如何协同运作。文章还探讨了Agent的自主决策系统与Agent Skill的任务定制机制…...
终极指南:用foo2zjs驱动100+型号打印机在Linux上完美工作
终极指南:用foo2zjs驱动100型号打印机在Linux上完美工作 【免费下载链接】foo2zjs A linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/ 项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs 核心关键词:foo2zjs Li…...
从零到1打造爆款智能体产品:AI产品经理/经理/开发工程师必备技能图谱!
本文系统梳理了从零到一设计和开发智能体产品的关键知识和技能,覆盖AI产品经理、AI项目经理和AI应用开发工程师三大核心角色的能力要求。内容涉及需求分析、场景选择、产品设计、数据标注、模型评估、AI伦理、项目规划、技术评估、提示工程、RAG技术、Agent架构、工…...
工程定制丙级管道井门 物业机房通用款式
工程定制丙级管道井门,作为高层住宅、商业楼宇、物业机房强弱电井的专用消防配套设施,严格遵循国标消防规范生产,是建筑管井防火分隔、安全防护的核心产品。这款丙级管道井门采用钢制一体成型工艺,结构扎实不易变形,具…...
AI智能体开发新范式:用TDD工程化方法构建可靠LLM应用
1. 项目概述:当AI智能体遇上测试驱动开发最近在GitHub上看到一个挺有意思的项目,叫agent-skill-tdd。光看名字,就能嗅到一股“新老结合”的味道——一边是当下火热的AI智能体(Agent),另一边是软件工程领域经…...
别再死记硬背GPIO寄存器了!用STM32 HAL库和CubeMX快速实现LED流水灯与按键控制
解放双手:用STM32CubeMX和HAL库玩转GPIO控制 在嵌入式开发的世界里,GPIO控制就像学习编程时的"Hello World"一样基础而重要。但有多少开发者还在为记忆繁琐的寄存器配置而头疼?当项目周期压缩到以天为单位计算时,我们是…...
Betaflight飞控固件架构解析与高级调优指南
Betaflight飞控固件架构解析与高级调优指南 【免费下载链接】betaflight Open Source Flight Controller Firmware 项目地址: https://gitcode.com/gh_mirrors/be/betaflight Betaflight作为开源飞控固件的标杆产品,为多旋翼无人机提供高性能、低延迟的飞行控…...
