Vision Transformer (ViT) 详解:当Transformer“看见”世界,计算机视觉的范式革命

摘要: 长久以来,卷积神经网络(CNN)凭借其精心设计的归纳偏置(inductive biases),无可争议地统治着计算机视觉领域。然而,一篇名为《An Image is Worth 16x16 Words》的论文彻底改变了这一格局,它所提出的 Vision Transformer (ViT) 模型,成功地将源于自然语言处理(NLP)领域的 Transformer 架构直接应用于图像识别,并取得了惊人的成果。本文旨在深度剖析 ViT 的核心原理、架构设计及其深远影响,阐明它是如何挑战传统,并为视觉任务提供一个全新的、具有强大扩展性的解决方案。

今天我先给大家带来原理讲解与入门教学,明天会详细剖析VIT背后深层的原理与代码实现

第一章:背景——CNN的王朝与Transformer的崛起

要理解 ViT 的革命性,我们必须首先回顾它所挑战的CNN王朝。

1.1 CNN的基石:生物的视觉皮层

CNN 的设计哲学源于对生物视觉皮层的模仿。其核心在于两大归纳偏置

局部性 (Locality):假设图像中邻近的像素点具有强相关性。通过小尺寸的卷积核(Kernel),CNN 能够有效地从局部区域提取边缘、纹理等基础特征。

平移不变性 (Translation Invariance):无论一只猫出现在图像的哪个位置,它仍然是一只猫。通过权重共享(Weight Sharing)的卷积操作和池化(Pooling)操作,CNN 能够识别出在空间上平移的相同特征。

这种分层、由局部到全局的特征提取范式,使得 CNN 在处理图像时极为高效且强大,成为了过去十年计算机视觉领域的黄金标准。

1.2 NLP的革命:自注意力机制的全局视野

与此同时,在自然语言处理领域,Transformer 架构凭借其核心的自注意力机制 (Self-Attention) 颠覆了循环神经网络 (RNN) 的主导地位。自注意力的核心思想是,在处理一个序列(如一个句子)时,序列中的每个元素(单词)都可以直接与其他所有元素计算相关性,从而动态地捕捉长距离依赖关系。这种对全局上下文的直接建模能力,正是处理复杂语言现象的关键。

1.3 跨界的融合

ViT 的诞生源于一个大胆的设想:我们能否抛弃 CNN 为图像“量身定制”的归纳偏置,直接将 Transformer 强大的全局建模能力应用于视觉任务?大白话解释:一张图像,是否可以被当作一个“句子”来阅读?

第二章:ViT架构深度解析

ViT 的架构回答了上述问题。它通过一系列巧妙的设计,将二维的图像数据转换为了 Transformer 所能处理的一维序列数据。

2.1 图像的序列化:从像素网格到“视觉词元”

ViT的第一步,是将输入的二维图像(例如 224×224×3)分割成一系列固定大小的不重叠的图像块(Patches)。例如,如果每个Patch的大小是 16×16,那么一张 224×224 的图像就会被切分成 (224/16)×(224/16)=14×14=196 个Patches。

类比NLP: 这一步就像将一个段落拆分成一个个独立的单词。每个Patch就是图像世界里的一个“视觉单词”。

原始的Patch是二维的(16×16×3),而Transformer的输入需要是一维的向量序列。因此,ViT会将每个Patch展平(Flatten)成一个长向量(16×16×3=768),然后通过一个标准的可训练线性投影层(Linear Projection Layer)将其映射到一个固定的维度 D(例如768)。这个输出的向量就被称为Patch Embedding。

类比NLP: 这完全等同于NLP中的词嵌入(Word Embedding)过程,将每个单词映射到一个高维的语义向量空间中。

2.2 注入空间与全局信息

标准的Transformer模型是置换不变的(Permutation-Invariant),也就是说,打乱输入序列的顺序不会影响最终结果。这在处理语言时是个问题(“我爱你”和“你爱我”含义不同),在处理图像时同样是致命的(打乱图像块会让图像失去空间结构)。

为了解决这个问题,ViT为每一个Patch Embedding都加上一个可学习的位置编码(Position Embedding)。这个编码向量告诉模型每个Patch的原始位置信息(例如,这是第1行第3列的Patch)。

借鉴NLP模型BERT的设计,ViT在所有Patch Embeddings序列的开头,额外添加一个特殊的可学习的分类令牌([CLS] Token)。这个Token不代表任何具体的图像块,它的作用是在经过Transformer Encoder之后,作为一个“全局信息聚合器”,其最终的输出状态将代表整张图像的语义信息,用于最终的分类任务。

至此,我们已经成功地将一张图像转换成了一个Transformer可以理解的向量序列(Sequence of Embeddings)。

2.3 核心:Transformer 编码器

转换后的向量序列被送入一个标准的Transformer Encoder。这个Encoder由多个相同的层堆叠而成,每一层都包含两个核心子模块:

1. 多头自注意力机制(Multi-Head Self-Attention, MHSA)

这是ViT的核心。对于序列中的每一个Patch(包括[CLS] Token),自注意力机制会计算它与所有其他Patches之间的注意力分数(Attention Score)。

工作原理简述: 每个Patch向量会生成三个不同的向量:查询(Query)键(Key)值(Value)

用某个Patch的Query向量,去和所有Patches的Key向量进行点积计算,得出相似度分数。这些分数经过Softmax归一化后,成为权重。

用这些权重去加权求和所有Patches的Value向量,得到该Patch在当前层的新表示。

意义: 这个过程允许每个Patch“环顾四周”,根据内容相关性,动态地从其他所有Patch中聚合信息。一个草地上的Patch可能会更“关注”天空的Patch(确定背景),而一个眼睛的Patch会高度关注另一个眼睛的Patch(捕捉对称性)。这就是ViT实现全局感受野的方式。

多头(Multi-Head): 将这个过程并行执行多次(例如12个头),每个“头”学习一种不同的关系模式(比如一个头关注纹理,另一个头关注轮廓),最后将所有头的结果拼接起来,增强了模型的表达能力。

2. 前馈网络(Feed-Forward Network, FFN)

在自注意力之后,每个Patch的新表示会独立地通过一个简单的全连接前馈网络(通常由两个线性层和一个激活函数组成)。这一步可以看作是对自注意力聚合来的信息进行进一步的非线性变换和提炼。

在每个子模块(MHSA和FFN)之后,都会使用残差连接(Residual Connection)和层归一化(Layer Normalization)来保证训练的稳定性和效率。

当序列通过所有Encoder层后,我们只取出[CLS] Token对应的最终输出向量,因为它已经聚合了整张图的全局信息。这个向量最后被送入一个简单的多层感知机(MLP Head),并最终通过了这个Softmax层输出各个类别的预测概率。

第三章:ViT的优势与挑战

3.1 优势

可扩展性 (Excellent Scalability):ViT 的性能会随着模型规模和数据量的增加而稳定提升。当在超大规模数据集(如 Google 内部的 JFT-300M)上进行预训练时,ViT 的性能超越了当时最顶尖的 CNN 模型。

更少的归纳偏置:ViT 不依赖于 CNN 的局部性假设。理论上,它能从数据中学习到比硬编码的卷积结构更通用、更强大的视觉模式。例如,它可以学会关注图像中不连续但语义相关的区域。

3.2 挑战

数据需求(Data-Hungry):ViT 的灵活性是一把双刃剑。由于缺乏 CNN 的归纳偏置作为“先验知识”,ViT 需要从零开始学习所有的视觉模式。因此,在中小规模的数据集(如 ImageNet-1k)上从头训练时,其性能通常不如同等规模的 CNN。它对大规模预训练的依赖性极强。

计算成本:自注意力机制的计算复杂度与输入序列长度的平方成正比。这意味着对于高分辨率图像(会产生更多的 Patches),ViT 的计算和内存开销会急剧增加。

第四章:影响与展望

ViT 的出现不仅仅是模型列表中的一个新成员,它更像是一场思想的解放。它证明了注意力机制是构建视觉模型的一种普适且强大的机制。

它的成功催生了计算机视觉领域的研究热潮,后续工作层出不穷:

Swin Transformer 重新引入了局部注意力和层级化结构,使得 Transformer 在通用视觉任务上更高效、更强大,成为了新的基准模型。

Data-efficient ViT (DeiT) 通过知识蒸馏等技术,显著降低了 ViT 对大规模预训练数据的依赖。

Masked Autoencoders (MAE) 提出了一种高效的自监督预训练范式,进一步释放了 ViT 的潜力。

结论

Vision Transformer 标志着计算机视觉领域一个新纪元的开启。它打破了卷积的“神话”,证明了源自语言处理的 Transformer 架构同样能在视觉世界大放异彩。虽然它并非没有缺点,但它所开辟的道路——将图像视为可被全局理解的序列——已经并正在深刻地重塑着我们对视觉智能的认知。未来的视觉模型,很可能会是 Transformer 思想与卷积思想的深度融合,而 ViT,无疑是这场伟大变革的奠基者。

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

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

相关文章

go goroutine chan 用法

方法1 代码 package mainimport ("fmt""sync""time" )func main() {allChan : make(chan interface{}, 3)var sendWg, recvWg sync.WaitGroup // 分别同步发送和接收// 发送goroutinesendWg.Add(1)go func() {defer sendWg.Done()for i : 0; i &…

Web前端文件上传安全与敏感数据安全处理

一、文件上传安全1. 文件上传时的核心安全检查点文件上传是 Web 应用的高风险功能,需从多维度验证,防止恶意文件上传(如木马、病毒)或路径攻击,关键检查点包括:MIME 类型验证检查请求头中的 Content-Type&a…

文法中的间接左递归

🌟 第一步:理解基本概念✅ 什么是文法(Grammar)?在编程语言或语法分析中,文法 是一组规则,用来描述一种语言的结构。例如:S → A a A → B b B → S c 这表示:S 可以…

Anthropic:跨越生产效能拐点的AI增长飞轮

资本竞赛中的战略转折点 人工智能领域的竞争已经从理念之争演变为资本、算力与地缘政治影响力的全面较量。Anthropic传闻中的1700亿美元估值,如果成为现实,将标志着前沿AI发展格局的地震式转变。这不仅仅是构建更智能模型的问题,更是为主导下…

【Unity3D实例-功能-移动】小兵移动-通过鼠标点击进行

在Unity的世界里,当你轻点鼠标,角色仿佛被赋予了新的使命,沿着一条无形的轨迹,向着地图上的目标点进发。每一次移动,不仅是简单的位移,更是对未知的探索。这种交互,让玩家与游戏世界紧密相连&am…

从0到1学PHP(十四):PHP 性能优化:打造高效应用

目录一、PHP 性能评估与分析1.1 性能指标体系1.2 性能分析工具使用1.3 性能瓶颈定位方法与流程二、代码层面优化技巧2.1 高效的循环与条件判断写法2.2 函数与类的优化设计2.3 内存管理与垃圾回收机制优化三、缓存策略与实现3.1 数据缓存3.2 页面缓存与部分缓存技术3.3 OPcache …

移动管家手机控车系统硬件安装与软件绑定设置

移动管家手机控车系统硬件安装与软件绑定配合使用,具体设置步骤如下:一、硬件安装准备 ‌加装智能控制主机‌:需在车辆上加装移动管家专用智能控制模块,该模块需与原车电路系统连接,并将原车钥匙芯片焊接至主控盒内以实…

51单片机入门:数码管原理介绍及C代码实现

本文是江协科技up的课堂笔记!大家可以去bilibili配合这位up的51单片机入门教程食用,效果更佳~我这里进行详细介绍,希望你忘记数码管的时候来这里看看!(你猜我为什么写这个TAT)一.基本介绍LED数码管&#xf…

Apache Camel 简介

相关文档地址 https://camel.apache.org/components/next/index.htmlhttps://camel.apache.org/components/4.10.x/languages/simple-language.htmlhttps://camel.apache.org/manual/exception-clause.htmlhttps://camel.apache.org/manual/index.htmlhttps://camel.apache.org…

IP离线库 输入IP地址立即返回IP所在地址信息(支持Java、Python)

描述 本文实现: 1、离线查询IP地址 2、IP地址精确到区域 3、IP地址支持国外IP 此时需要一个创建,比如我输入一个8.8.8.8的IP立马就需要返回给我一个中文地址信息, 类似于百度的IP搜索: 113.111.186.123如果现在离线环境或者在…

解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题

删除 MySQL 数据目录 /var/lib/mysql 下的所有文件后,MySQL 将无法启动,因为该目录包含了数据库的所有数据文件、配置文件和系统表。当这些文件被删除时,MySQL 无法找到必要的数据和配置,从而无法正常启动。本文将详细介绍解决这个…

苍穹外卖项目学习——day1(项目概述、环境搭建)

文章目录一、软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境分类二、苍穹外卖项目介绍2.1 定位2.2 功能架构2.3 技术选型三、开发环境搭建3.1 前端环境3.2 后端环境3.3 前后端联调3.4 登录功能优化四、接口文档管理4.1 YApi4.2 Swagger (Knife4j)一、软件开发整体介…

【QT】Qt信号与槽机制详解信号和槽的本质自定义信号和槽带参数的信号和槽

文章目录前言一、信号的本质二、槽的本质三、 信号和槽的使⽤3.1 连接信号和槽四、使用步骤4.1 通过QtCreator⽣成信号槽代码五、 ⾃定义信号和槽5.1 ⽰例1:信号和槽函数初步使用5.2 ⽰例2 两个类使用5.3 示例3 按钮使用触发信号六、 带参数的信号和槽6.1 ⽰例1&…

【OD机试题解法笔记】文件缓存系统

题目描述 请设计一个文件缓存系统,该文件缓存系统可以指定缓存的最大值(单位为字节)。 文件缓存系统有两种操作: 存储文件(put)读取文件(get) 操作命令为: put fileName …

Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践

在Python项目开发中,很多人遇到过类似“模块导入失败”、“路径找不到”、“相对导入与绝对导入混乱”等问题。而这些问题的根源,几乎都绕不开一个核心概念——Python模块搜索路径。 今天,我们围绕sys.path 和 PYTHONPATH环境变量&#xff0…

python:如何调节机器学习算法的鲁棒性,以支持向量机SVM为例,让伙伴们看的更明白

鲁棒性(Robustness)指模型在噪声数据或异常值干扰下保持性能稳定的能力。想详细了解的可参考本人之前的博文 python机器学习:评价智能学习算法性能与效果的常见术语:不收敛、过拟合、欠拟合、泛化能力、鲁棒性一句话、一张图给您…

号源加锁升级思路(解决高并发问题)

原先逻辑链接:号源预约加锁思路_java 预约 接口加锁-CSDN博客 一、进行治疗项目和号源数据缓存 1.新建一个定时任务,主要在凌晨时缓存治疗项目和号源数据 1.1.类中使用redission获取锁(用于分布式系统获取数据,保证原子性&…

MCP革命:AI世界的“USB-C”接口如何重塑智能体与外部工具的连接

> 一条标准化的数据通道,让AI从“对话专家”蜕变为“行动专家”,背后是一场由协议驱动的工具连接革命。 2024年11月,Anthropic公司开源了**Model Context Protocol(MCP)**。在短短9个月内,这项技术彻底改变了AI与外部世界的交互方式。截至2025年8月,MCP服务数量**从…

启用“安全登录”组合键(Ctrl+Alt+Delete)解锁

文章目录背景目标功能操作步骤效果背景 在日常工作中,我们有时需要让电脑长期开机运行(如处理长任务、作为服务器等)。然而,这其中存在一个潜在风险:当电脑处于锁屏或登录界面时,如果有人无意中触碰键盘比…

【08】C++实战篇——C++ 生成动态库.dll 及 C++调用DLL,及实际项目中的使用技巧

文章目录一、创建动态库dll (方法一)1 生成C 动态库dll1.1 创建项目MyDLL1.2 编写.h 和 .cpp文件1.3 设置 及 生成 DLL2 调用 C 动态库dll2.1 创建C 空项目DLLtest2.2 动态库配置 及代码调用测试3 实际项目中的使用技巧3.1 设置dll输出路径3.2 设置头文件引入路径3.3 改进后 测…