当前位置: 首页 > news >正文

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

欢迎来到雲闪世界。大家好!对于那些还不认识我的人,我叫 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开发人员)

相关文章:

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

欢迎来到雲闪世界。大家好!对于那些还不认识我的人,我叫 Francois,我是 Meta 的研究科学家。我热衷于解释先进的 AI 概念并使其更容易理解。 今天,让我们深入探讨计算机视觉领域最重要的贡献之一:Vision Transformer&…...

vue3 v-bind=“$attrs“ 的一些理解,透传 Attributes相关说明及事例说明

1、可能小伙伴们经常会在自己的项目中看到v-bind"$attrs"&#xff0c;这个一般是在自定义组件中看到。 比如&#xff1a; <template><BasicModalv-bind"$attrs"register"registerModal":title"getTitle"ok"handleSubm…...

鸿蒙开发基础知识-页面布局【第四篇】

1.类型转换 2.交互点击事件 3.状态管理 4.forEch渲染和右上角图标 测试案例 Stack 层叠布局一个生肖卡 5. 动画展示图片 6. Swiper 轮播组件的基本使用 图片等比显示 aspectRatio&#xff08;&#xff09;...

用CSS实现前端响应式布局

一、响应式布局的重要性 随着移动设备的普及&#xff0c;越来越多的用户通过手机、平板电脑等设备访问网页。如果网页不能适应不同的屏幕尺寸&#xff0c;就会出现布局混乱、内容显示不全等问题&#xff0c;严重影响用户体验。响应式布局可以确保网页在各种设备上都能保持美观…...

【docker】docker启动sqlserver

sqlserver-docker官方地址 # sqlserver不是从docker的中央仓库拉取的&#xff0c;而是从ms的仓库拉取的。 docker pull mcr.microsoft.com/mssql/server:2019-latest# 宿主机即docker程序运行的linux服务器 docker run -d \ --user root \ --name mssql2019 \ -e "ACCEPT…...

Python爬虫01

requests模块 文档 安装 pip/pip3 install requestsresponse.text 和 response.content的区别 1.response.text 等价于 response.content.decode("推测出的编码字符集")response.text 类型&#xff1a;str 编码类型&#xff1a;requests模块自动根据Http头部对…...

关于vue项目启动报错Error: error:0308010C:digital envelope routines::unsupported

周五啦&#xff0c;总结一下这周遇到的个别问题吧&#xff0c;就是关于启动项目的时候其他的东西都准备好了&#xff0c;执行命令后报错Error: error:0308010C:digital envelope routines::unsupported 这里看一下我标注的地方&#xff0c;然后总结一下就不难发现问题所在 查看…...

随笔1:数学建模与数值计算

目录 1.1 矩阵运算 1.2 基本数学函数 1.3 数值求解 数学建模与数值计算 是将实际问题通过数学公式和模型进行描述&#xff0c;并通过计算获得模型解的过程。这是数学建模中最基本也是最重要的环节之一。下面是详细的知识点讲解及相应的MATLAB代码示例。 1.1 矩阵运算 知识点…...

SDN架构详解

目录 1&#xff09;经典的IP网络-分布式网络 2&#xff09;经典网络面临的问题 3&#xff09;SDN起源 4&#xff09;OpenFlow基本概念 5&#xff09;Flow Table简介 6&#xff09;SDN的网络架构 7&#xff09;华为SDN网络架构 8&#xff09;传统网络 vs SDN 9&#xf…...

platform框架

platform框架 注册设备进入总线platform_device_register函数 注册驱动进入总线platform_driver_register函数 注册设备进入总线 platform_device_register函数 int platform_device_register(struct platform_device *pdev) struct platform_device {const char * name; 名…...

零成本搞定静态博客——十分钟安装hugo与主题

文章目录 hugo介绍hugo安装与使用方式一&#xff1a;新建站点自建主题方式二&#xff1a;新建站点使用系统推荐的主题 hugo介绍 通过 Hugo 你可以快速搭建你的静态网站&#xff0c;比如博客系统、文档介绍、公司主页、产品介绍等等。相对于其他静态网站生成器来说&#xff0c;…...

windows C++ 并行编程-转换使用取消的 OpenMP 循环以使用并发运行时

某些并行循环不需要执行所有迭代。 例如&#xff0c;搜索值的算法可以在找到值后终止。 OpenMP 不提供中断并行循环的机制。 但是&#xff0c;可以使用布尔值或标志来启用循环迭代&#xff0c;以指示已找到解决方案。 并发运行时提供允许一个任务取消其他尚未启动的任务的功能。…...

经验笔记:跨站脚本攻击(Cross-Site Scripting,简称XSS)

跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;经验笔记 跨站脚本攻击&#xff08;XSS&#xff1a;Cross-Site Scripting&#xff09;是一种常见的Web应用程序安全漏洞&#xff0c;它允许攻击者将恶意脚本注入到看起来来自可信网站的网页上。当…...

演示:基于WPF的DrawingVisual和谷歌地图瓦片开发的地图(完全独立不依赖第三方库)

一、目的&#xff1a;基于WPF的DrawingVisual和谷歌地图瓦片开发的地图 二、预览 三、环境 VS2022&#xff0c;Net7,DrawingVisual&#xff0c;谷歌地图瓦片 四、主要功能 地图缩放&#xff0c;平移&#xff0c;定位 真实经纬度 显示瓦片信息 显示真实经纬度和经纬线 省市县…...

【C++】static作用总结

文章目录 1. 在函数内&#xff08;局部静态变量&#xff09;2. 在类中的静态成员变量3. 在类中的静态成员函数4. 在文件/模块中的静态变量或函数总结 1. 在函数内&#xff08;局部静态变量&#xff09; 当 static 用于函数内的局部变量时&#xff0c;该变量的生命周期变为整个…...

视频提取字幕的软件有哪些?高效转录用这些

探索视频的奥秘&#xff0c;从字幕开始&#xff01;你是否曾被繁复的字幕处理困扰&#xff0c;渴望有一款简单好用的在线免费软件来轻松解锁字幕提取&#xff1f; 告别手动输入的烦恼&#xff0c;我们为你精选了6款视频字幕提取在线免费软件&#xff0c;它们不仅能一键转录&am…...

(4)SVG-path中的椭圆弧A(绝对)或a(相对)

1、概念 表示经过起始点(即上一条命令的结束点)&#xff0c;到结束点之间画一段椭圆弧 2、7个参数 rx&#xff0c;ry&#xff0c;x-axis-rotation&#xff0c;large-arc-flag&#xff0c;sweep-flag&#xff0c;x&#xff0c;y &#xff08;1&#xff09;和&#xff08;2&a…...

docker国内镜像源报错解决方案

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 遇到 Job for docker.service failed because the control process exited with error …...

《C++进阶之路:探寻预处理宏的替代方案》

在 C编程的历程中&#xff0c;预处理宏曾经扮演了重要的角色。然而&#xff0c;随着 C语言的不断发展和编程理念的进步&#xff0c;预处理宏的一些弊端也逐渐显现出来。那么&#xff0c;C中的预处理宏的替代方案有哪些呢&#xff1f;本文将深入探讨这个问题&#xff0c;为你揭示…...

【综合案例】使用鸿蒙编写掘金评论列表案例

效果展示 功能描述 整个页面分为三大模块&#xff1a;顶部 主体【评论列表】 底部。 点击顶部的最新和最热按钮可以进行切换&#xff0c;点击最新按钮的时候主体部分的评论列表是按照时间由近至远进行排列展示&#xff0c;点击最热按钮的时候主体部分的评论列表是按照点赞数…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...