彻底改变计算机视觉的 Vision Transformer (ViT) 综合指南(视觉转换器终极指南)

news2024/11/15 13:56:37

欢迎来到雲闪世界。大家好!对于那些还不认识我的人,我叫 Francois,我是 Meta 的研究科学家。我热衷于解释先进的 AI 概念并使其更容易理解。

今天,让我们深入探讨计算机视觉领域最重要的贡献之一:Vision Transformer(ViT)。

首先介绍一些历史......

Vision Transformer 由 Alexey Dosovitskiy 等人 (Google Brain) 于 2021 年在论文《一张图片价值 16×16 个字》中提出。当时,Transformers 已被证明是实现 NLP 任务出色性能的关键,并于 2017 年在必读论文《注意力就是你所需要的一切》中提出。

2017 年至 2021 年间,曾有多次尝试将注意力机制集成到卷积神经网络 (CNN) 中。然而,这些尝试大多是混合模型(将 CNN 层与注意力层相结合),缺乏可扩展性。谷歌通过完全消除卷积并利用其计算能力来扩展模型来解决此问题。

这篇文章回答的价值百万美元的问题是……

Google Vision 团队遵循了 Google 内部另一个设计文本 Transformers 的团队提供的指导方针。他们解决的关键挑战是:

“注意力机制如何适应图像?”

在 NLP 中,标记(单词或子单词)是计算注意力的基础。然而,图像本身并不适合进行这样的标记化。单个像素应该被视为一个标记吗?还是应该将整个图像视为一个标记?

如果将每个像素视为一个单位,则需要计算所有像素的注意力机制。对于 224×224(包含 50,176 个像素)这样的低分辨率图像,这将需要大约25 亿次运算——以目前的技术来说,这是一项不切实际的任务。

相反,将整个图像视为单个标记太过简单。解决方案介于两者之间:将图像转换为一系列补丁。在他们的论文中,作者使用了分辨率为16×16 像素的补丁。

Vision Transformer 架构:

关键符号:

  • P = 16:补丁大小
  • H, W:图像的高度和宽度,必须能被 P 整除
  • C = 3:通道数(RGB)
  • D:潜在向量大小,表示补丁标记展平后的维度。

从数学上来说:

这是需要理解的最重要的部分。一旦我们有了一系列标记,我们就可以应用 Transformer 编码器。我们只需要了解如何向这些标记添加位置编码,以及如何从所有标记中获取单个向量表示。

CLS(类)标记:整个图像的表示

如果您熟悉注意力机制,您就会认识到,从N 个标记开始并应用L层注意力会产生N 个标记 — 每个补丁一个。这形成了“特征图”,其中每个补丁被编码为维度为 D 的向量(标记)。

然而,要对图像进行分类,我们需要一个向量来表示它。虽然可以将所有N 个token 平均或“池化”为一个向量,但作者采用了一种类似于 BERT 的方法,即引入一个专门用于此用途的 token:CLS token。

此标记附加到图像中的其他N 个标记。因此输入序列由N+1 个标记组成。

位置编码

将 token 直接输入注意力机制会导致缺乏空间意识,因为该机制不知道每个块的位置。为了解决这个问题,我们为每个 token 添加了位置编码。

位置编码可以是硬编码的(例如,使用 sin/cos 函数,如在“Attention is All You Need ”论文中所述)或在训练期间学习。

我个人非常喜欢 Barton 和 Sutton 的“惨痛教训”,即每当我们尝试将归纳偏差放入模型中时,我们都会发现,如果有足够的数据和缩放,让模型自己学习实际上会更好。

在 VIT 论文中,位置编码是可以学习的。从上一部分中,我们看到我们以维度(N+1, D) 的矩阵结束。因此,位置编码也是添加的维度(N+1, D)的矩阵。

很好!现在我们对 ViT 架构有了全面的了解。

更高分辨率下的微调

在现代深度学习中(例如 2017 年 Transformer 问世之后),解决问题的标准方法变成了:

步骤 1:在非常大的数据集上预训练一个非常大的神经网络

第 2 步:针对我们想要解决的任务进行微调。

在计算机视觉中,有一个很酷的技巧可以提高性能:以比预训练期间使用的分辨率(通常较低)更高的分辨率对 Vision Transformer (ViT) 进行微调。但“以更高的分辨率进行微调”到底是什么意思?这是否意味着我们在图像中使用更小的块,以便我们拥有更多的标记,还是我们只是拍摄更高分辨率的图像?它是如何工作的?

让我们开始吧!

这是我个人偶然遇到的一个问题,所以我将深入解释它。

当我们提到以更高的分辨率进行微调时,我们的意思是增加图像分辨率,同时保持补丁分辨率固定。

例如,将图像分辨率从 224×224 增加到 640×640 会导致补丁数量从 196 个增加到 1600 个。这带来了挑战,因为位置嵌入矩阵最初的大小为 196 个标记,不再与新的标记数量相匹配。

那么,解决办法是什么?

插值。我们通过使用双三次插值填充间隙来扩展原始位置嵌入,从而有效地调整嵌入大小以匹配新的补丁数量。

ViT 的缩放定律

ViT 的缩放定律

与卷积神经网络 (CNN) 不同,视觉变换器 (ViT) 缺乏内置归纳偏差,例如空间局部性和平移不变性。这意味着 ViT 必须完全从数据中学习这些模式,这使得它们成为高度数据密集型模型。

因此,我们可以想知道随着数据和参数的增多,VIT 的性能会如何发展。

ViT 的优点在于,它们的性能能够随着更多数据和更多参数而很好地扩展。

然而,有一个问题。在数据有限的情况下,传统的 CNN 往往占上风。CNN 采用归纳偏差设计,使其能够更有效地从较小的数据集中学习。它们利用空间层次和局部特征等模式,这使得它们在数据稀疏时表现更好。

因此,如果您要解决数据有限的问题,CNN 可能是更好的选择。但如果您的数据集很大,ViT 可能会提供更出色的性能。盈亏平衡点取决于您的数据的具体情况。

模型到底学到了什么?

让我们来分析一下一些关键见解:

1.嵌入过滤器是什么样的?

2.模型如何学习位置嵌入?

3.注意力机制是关注附近的标记还是远处的标记?

1.嵌入过滤器:

值得注意的是,ViT 学习到的 RGB 嵌入过滤器与 CNN 中的过滤器类似,可以捕捉垂直线和水平线等基本视觉纹理。从本质上讲,尽管 ViT 不使用卷积,但它们学习到的嵌入在识别和表示基本图像特征方面具有类似的用途。

2. 位置嵌入:

当谈到位置嵌入时,ViT 会形成网格状结构。学习到的嵌入通常表现出一种模式,即同一行或同一列中的值相似。

有趣的是,发现模型自己学习了这种位置编码,它能够理解图像的结构(虽然它只能看到一个标记列表)。

3.注意力机制:

ViT 中的注意力机制在整个网络层中不断发展。在早期阶段,它倾向于关注附近的标记,这类似于捕获局部特征的方式。随着您深入网络,注意力机制会转向更全局的视角,使模型能够整合来自远处标记的信息并理解整个图像的高级关系。

这种从局部到全局注意力的进展凸显了 ViT 在处理图像时如何构建越来越复杂的表示,从而使其能够捕捉复杂的模式。

总之,虽然 ViT 从学习基本的视觉模式和位置​​信息开始,但它们逐渐发展出推理图像中更大、更抽象特征的能力。

恭喜你,你成功了!

感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)

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

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

相关文章

Debezium+Kafka:Oracle 11g 数据实时同步至 DolphinDB 运维手册

目前我们已经支持基于开源技术 Debezium Kafka,从 Mysql 和 Oracle 11g 实时同步数据到 DolphinDB 中。由于当前方案涉及到四个程序的部署,而且具体的 Source 同步任务和 Sink 同步任务还需要额外管理,在运维上具有一定难度。 本文将基于 O…

分类预测|基于鲸鱼优化WOA最小二乘支持向量机LSSVM的数据分类预测Matlab程序WOA-LSSVM 多特征输入多类别输出

分类预测|基于鲸鱼优化WOA最小二乘支持向量机LSSVM的数据分类预测Matlab程序WOA-LSSVM 多特征输入多类别输出 文章目录 一、基本原理1. 最小二乘支持向量机(LSSVM)LSSVM的基本步骤: 2. 鲸鱼优化算法(WOA)WOA的基本步骤…

安装 rocky9.4

涉及软件:virtualbox、rocky linux 9.4、mobaxterm virtualbox新建虚拟机,设置虚拟机配置 启动虚拟机,第一次会提示挂载虚拟光盘,选择下载的rocky linux 9.4。 选择第一项,安装rocky linux 9.4 进入安装设置&#…

echarts graphChart关系图简单逻辑实现

ECharts 的 graph 图表类型非常适合用来展示节点之间的关系,比如社交网络分析、系统架构图等。下面是一个简单的关系图功能,用来展示疾病与一些因素的关联关系。 1、数据之间的关系 首先,你需要准备数据来表示节点(nodes&#…

C ++初阶:类和对象(中)

目录 🌞0.前言 🚈1. 类的6个默认成员函数 🚈2. 构造函数 🚝2.1 概念 🚝2.2特性 🚝2.3编译器默认生成的构造函数。 ✈️补充1: ✈️补充2:开空间问题 🚈3. 析构函…

C++相关概念和易错语法(30)(异常、智能指针)

1.异常 在C语言这样的面向过程编程的语言来说,处理错误一般有两种方式:终止程序,如assert;返回错误码,比如打开文件失败,errno就会改变,perror就会打印错误码对应的错误信息 在面向对象的语言…

云原生存储Rook部署Ceph

Rook 是一款云原生存储编排服务工具,Ceph 是一种广泛使用的开源分布式存储方案,通过Rook 可以大大简化 ceph 在 Kubernetes 集群中的部署和维护工作。 Rook 由云原生计算基金会( CNCF )孵化,且于 2020 年 10 月正式进入毕业阶段。Roo…

【python因果推断库3】使用 CausalPy 进行贝叶斯geolift 分析

目录 导入数据 丹麦的销售额是否有地理提升(GeoLift)? 结果 本笔记本介绍如何使用 CausalPy 的贝叶斯{术语}合成控制功能来评估“地理提升”(GeoLift)。我们的假设情景如下: 你是一家在欧洲运营的公司的…

集成电路学习:什么是ISP系统编程

一、ISP:系统编程 ISP(In-System Programming)即系统编程,是一种在系统内部进行的编程方法,主要用于对闪存(FLASH)、EEPROM等非易失性存储器的编程。ISP编程提供了巨大的灵活性,允许…

SaaS用户增长:提升转化率的实践路径

在SaaS(软件即服务)行业这片竞争激烈的蓝海中,企业要实现稳健的用户增长,必须聚焦于优化用户获取与转化策略,以提升用户转化率。用户转化率,作为衡量SaaS产品市场吸引力和用户接纳度的核心指标,…

图文解析保姆级教程: IDEA里面创建SpringBoot工程、SpringBoot项目的运行和测试、实现浏览器返回字符串

文章目录 一、创建SpringBoot工程(需要联网)二、 定义请求处理类三、运行测试 此教程摘选自我的笔记:黑马JavaWeb开发笔记13——Springboot入门(创建、运行&测试项目)、Http协议(请求&响应协议&…

Unity实战案例 2D小游戏HappyGlass(模拟水珠)

本案例素材和教程都来自Siki学院,十分感谢教程中的老师 本文仅作学习笔记分享交流,不作任何商业用途 预制体 在这个小案例中,水可以做成圆形但是带碰撞体,碰撞体比图形小一圈,顺便加上Trail renderer组件 材质 将碰撞…

SVN介绍和使用

一、SVN(Subversion) SVN 是一种版本控制系统,可以用于管理和控制文件的变更。以下是SVN的基本使用步骤: 安装SVN:首先,您需要在计算机上安装SVN客户端。您可以从Subversion官方网站下载安装程序&#xff…

sql-labs61-65关通关攻略

第61关 一:查看数据库 ?id1)) and updatexml(1,concat(1,(select database())),1)-- 二:查看表名 ?id1)) and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schemasecurity)),1)-- 三&#…

MATLAB/Simulink 汽车ABS仿真模型 防抱死刹车 教程 资料 程序 模型 论文 视频

项目概述 防抱死制动系统(ABS)是现代车辆中的一项重要安全技术,它能够在紧急制动时防止车轮锁死,从而提高车辆的稳定性和操控性。本项目旨在使用MATLAB/Simulink建立一个完整的ABS仿真模型,帮助学习者理解ABS的工作原理…

WebRTC协议下的视频汇聚融合技术:EasyCVR构建高效视频交互体验

视频汇聚融合技术是指将来自不同源、不同格式、不同网络环境的视频流进行集中处理、整合和展示的技术。随着视频监控、远程会议、在线教育、直播娱乐等领域的快速发展,视频数据的规模急剧增长,对视频处理能力和效率提出了更高要求。视频汇聚融合技术通过…

【杭州】目前就业情况-自述

博主在今年6月份,被自己领导下达了裁员通知,所以近期一直都没有更新博文。那么接下来简单介绍下杭州2024年就业情况吧! 目录 一、行情 二、薪资 三、外包 四、如果你真快吃不上饭了 五、博主被问的面试题 一、行情 今年应该是有史以…

低代码技术助力移动端开发:简化开发流程,实现快速创新

在移动互联网快速发展的今天,企业和开发者面临着越来越高的需求,要求开发高质量、功能强大的移动应用,以满足用户的期待和市场的变化。然而,传统的移动端开发流程通常复杂且耗时,需要投入大量的资源和开发人员。为了应…

Unity坐标系计算3D中两直线的最短距离及最近点的几何原理

方法1: 已知空间中两直线AB, CD,判断它们是否相交 问题的关键是求出这两条直线之间的最短距离,以及在这个距离上最接近两线的点坐标,判断该点是否在直线AB和直线CD上。 首先将直线方程化为对称式,分别得到两直线方向向…

VUE 实现三级权限选中与全选

功能:点击全选时所有子级选中,点击子级时对应的所有父级要选中。 实现思路:通过递归将所有子级转化为一级,选中时将选中的ID存为一个二级数组。循环时判断当前项在选中的数组中存在时即为勾选状态。 1、所有子级选中&#xff1a…