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

ViT论文详解

文章目录

  • 前言
  • 一、ViT理论
  • 二、模型结构
  • 三、实验结果
  • 总结


前言

 ViT是谷歌团队在2021年3月发表的一篇论文,论文全称是《AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》一张图片分成16x16大小的区域:使用Transformer进行按比例的图像识别。ViT是Vison Transformer的缩写,通过将一张照片分割为不同的Patch输入到Transformer中进行有监督的训练,从而实现Transformer在CV领域的应用。接下来我们进行这篇论文的详细介绍。

一、ViT理论

 Transformer在NLP领域取得了很大的成功,但是应用在CV领域时却受到了限制。尽管已经有不少工作将Transformer应用在CV领域,但是这些工作要么就是将Transformer与CNN结合使用,要么就是使用自注意力替换CNN中的某些组件。ViT要做的就是直接将Transformer在NLP的工作方式搬移到CV中,而不改变网络结构和输入形式,从而打破CV和NLP领域之间的鸿沟。
  ViT的核心思路就是将输入的照片划分成相同大小的patch,然后将这些patch经过一个全连接层进行embedding然后直接输入到Transformer中进行有监督的训练。但是由于Transformer应用在CV时缺少CNN网络的归纳偏置,所以ViT在小数据集上的效果并不如CNN。但是当扩展到较大规模的数据集时(14M-300M images),ViT便可弥补没有归纳偏置的缺点,通过Transformer优秀的全局建模能力在性能上超过经典的CNN网络。

二、模型结构

 ViT模型由Transformer的编码器堆叠而成,但其对原始的Transformer编码器进行了一些改动,将LayerNorm放到了多头注意力的前面。如下图所示:
在这里插入图片描述
其模型的前向过程如下所示:

1.当输入一张照片尺寸为224x224x3,首先会将照片分割成16x16大小的patch,对于224x224大小的图片则被分成了14x14=196个patch,每个patch的维度为16x16x3。
2.将每个patch拉伸成16x16x3=768,则图片由224X224X3变为了196x768。
3.经过全连接层,输出维度仍然为196x768。相当于输入一共196个tokens,每个tokens的维度为768。
4.在最前面加上一个特殊提示符token,则输入维度变成了197x768。第一个token是特殊提示符(与BERT类似)
5.与可学习的位置编码进行相加,相加后的维度为197x768。
6.经过堆叠的Transformer encoder层,输出维度为197x768。
7.将第一个token对应的输出(维度为1x768)经过全连接层后进行分类。

 当ViT在大规模数据集上预训练完成后在下游任务进行微调时,将预训练中的预测头去掉,然后新加一个适合于下游任务的分类头进行微调。
 需要注意的一点是,一般来说微调时的数据分辨率大于训练时的数据分辨率着对模型提升是有益的。但这会导致预训练和微调阶段输入到模型的tokens数量也不相同。尽管Transformer可以处理任意长度的tokens输入,但是预训练时的可学习位置编码可能不在有意义。因此,ViT在微调时会根据patch在原始图像中的位置对训练好的位置编码进行2D内插。

三、实验结果

 ViT共准备了三种大小尺寸的模型,分别为

ModelLayersHidden sizeMLP sizeHeadsParams
ViT-Base1276830721286M
ViT-Large241024409616307M
ViT-Huge321280512016632M

 在下图中,BiT为基于ResNet的卷积网络,可以看到在ImageNet数据集上ViT的性能是不如CNN的,但是随着数据集的增加ViT的性能超过了CNN。说明在大数据集上ViT是更有优势的。
在这里插入图片描述

 下图中Hybrid代表输入的图片先使用CNN进行特征提取然后送进Transformer中,相当于是CNN和Transformer的结合。可以看出当计算量较小(模型规模较小时)Hybrid的方法是超过ResNet和Transformer的,但是随着计算量的增大(模型规模变大),Transformer的性能仍然呈现出继续上升的趋势,而Hybrid方法的性能却趋向于饱和。这也是基于Transformer的一个优势,目前还没有发现随着模型和数据的增大性能趋于饱和的情况。
在这里插入图片描述

更多的实验结果小伙伴们可以去论文里查找。

总结

 ViT通过将图片划分成许多patch实现了Transformer在CV领域的直接应用,而不用对图片输入进行额外的处理,在大规模数据集上ViT实现了当时最好的结果。ViT也存在着一些局限性,例如是有监督的,需要在大规模数据集上进行预训练等。总的来说,ViT缩小了CV和NLP领域之间的gap,也间接的推动了多模态的发展,后续基于ViT模型涌现出了一大批优秀的工作。

相关文章:

ViT论文详解

文章目录 前言一、ViT理论二、模型结构三、实验结果总结 前言 ViT是谷歌团队在2021年3月发表的一篇论文,论文全称是《AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》一张图片分成16x16大小的区域:使用Transformer进行按比…...

常见中间件漏洞(三、Jboss合集)

目录 三、Jboss Jboss介绍 3.1 CVE-2015-7501 漏洞介绍 影响范围 环境搭建 漏洞复现 3.2 CVE-2017-7504 漏洞介绍 影响范围 环境搭建 漏洞复现 3.3 CVE-2017-12149 漏洞简述 漏洞范围 漏洞复现 3.4 Administration Console弱囗令 漏洞描述 影响版本 环境搭建…...

ios如何动态添加控件及动画

在ViewController中添加 // // ViewController.m // iosstudy2024 // // Created by figo on 2024/8/5. //#import "ViewController.h"interface ViewController () property (weak, nonatomic) IBOutlet UIButton *xigua; - (IBAction)xigua:(id)sender;endimpl…...

【数学建模】——【A题 信用风险识别问题】全面解析

目录 1.题目 2.解答分析 问题1:指标筛选 1.1 问题背景 1.2 数据预处理 1.3 特征选择方法 1.4 多重共线性检测 1.5 实现步骤 问题2:信用评分模型 2.1 问题背景 2.2 数据分割 2.3 处理不平衡数据 2.4 模型选择与理由 问题3:模型对…...

javascript:检测图片的宽高

1 方案描述 JavaScript提供了非常方便的FileReader和Image对象,可以帮助我们轻松实现这个功能。具体步骤如下: 获取文件输入框:首先,我们需要获取到用户选择的文件。读取文件内容:然后,通过FileReader对象…...

机械学习—零基础学习日志(高数23——无穷小运算)

零基础为了学人工智能,真的开始复习高数 这段时间,把张宇老师讲解考研的第一部分基本全部学习完毕了。 这里把第一部分的内容最后汇总一下。 无穷小运算——吸收律 这里展示一些无穷小的具体计算思路 无穷小运算——计算方法 泰勒展开的原则 夹逼准则…...

一个网络上计算机的通信

一台计算机上多个进程间的通信方式有:管道、共享内存、信号量、消息队列。如果不同的计算机上多个进程间通信,即通信的进程在不同的计算机上,需要用到网络相关的知识。 那么两台计算机通信需要解决哪些问题? 我们来回顾一下计算机…...

C语言基础题:吃冰棍(C语言版)

1.题目描述 机器猫喜欢吃冰棍。 买一根冰棍,吃完了会剩一个木棒;每三个木棒可以兑换一个冰棍。兑换出来的冰棍,吃完之后也能剩下一个木棒。 所以,如果机器猫买了5根冰棍,他可以吃完之后得到5个木棒;拿3个木棒兑换1根冰棍&#xff…...

C++中,vector、deque、list、set、multiset、unordered_set和unordered_multiset容器类的总结

最近用set比较多,复习一下基础。 在C中,vector、deque、list、set、multiset、unordered_set和unordered_multiset都是容器类,但它们有不同的特点和用途。下面是对它们的区别和示例说明: 1. vector 特点: 动态数组,…...

Python处理Redis

操作Redis redis也是基于tcp通信的,所以我们可以直接通过socket来做 Redis通信过程 简单使用 redis-cli.exe -h192.168.56.188 auth 123456 set name myredis get name lindex students 0 # 查看students列的第一条数据核心协议体 *2 # 表示下述的指令由2个字符…...

nodejs多版本随心切换-windows

nodejs多版本控制 1. 安装 nvm github下载地址 不需要卸载已安装的nodejs,安装时会让你选择nodejs的位置,可修改为你已经安装的路径,会自动搜索已安装版本,并进行弹窗询问,选择托管即可 2. 修改配置文件 在 nvm 安装…...

json文件格式

json文件格式 格式介绍1格式介绍2格式3 格式介绍1 格式介绍2 格式3 参考地址...

日撸Java三百行(day15:栈的应用之括号匹配)

目录 一、栈的括号匹配 二、代码实现 1.方法创建 2.数据测试 3.完整的程序代码 总结 一、栈的括号匹配 要完成今天的任务,需要先来了解一下什么是栈的括号匹配。首先,顾名思义,括号匹配就是指将一对括号匹配起来,我们给定一…...

Oracle-OracleConnector

提示:OracleConnector 类是 Debezium 中用于与 Oracle 数据库交互的一个连接器组件 文章目录 前言一、核心功能二、代码分析总结 前言 提示:OracleConnector 类负责配置、启动、管理和验证与 Oracle 数据库的连接,并为后续的数据捕获任务准备…...

『 Linux 』线程池与 POSIX 线程的封装编码实现

文章目录 线程池概念线程池的编码实现线程池的测试参考代码 线程的封装使用测试封装后的线程参考代码 线程池概念 池化技术是一种资源管理方法,通过预先创建和管理一组资源以便在需要使用时快速分配这些资源; 线程池是池化技术的一种典型应用; 资源分配 在线程池中预先创建一定…...

【C++】————哈希表

作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年8月6日 前言: 在计算机科学的广袤世界中,数据结构犹如基石,支撑着各种高效算法的构建与运行。而哈希表(Hash Table)&#…...

前端学习AI历程

AI基本概念tensorflow入门conda搭建环境,pycham使用训练自己的第一个模型AI目前前端方便入手的几个方向 素材图片库图像识别,在线学习低代码应用智能客服 获取数据集 roboflowkagglecocomakesense(用于打标) 认识yolo两个简单小应…...

常见中间件漏洞复现之【Tomcat】!

Tomcat介绍 tomcat是⼀个开源⽽且免费的jsp服务器,默认端⼝ : 8080,属于轻量级应⽤服务器。它可以实现 JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的⼀款环境。 在历史上也披露出来了很多的漏洞 …...

C++并发编程(一):线程基础

简介 本文学习的是 b 站 up 恋恋风辰的并发编程教学视频做的一些笔记补充。 教程视频链接如下:线程基础:视频教程 文档链接如下:线程基础:笔记文档 理论上直接看 up 提供的笔记文档即可,我这里主要是记录一些我自己…...

enq: HW - contention事件来啦

业务系统反应数据库慢,根据时间查看awr报告。 先看一眼事件名称 HW enqueue 用于序列化超出段高水位线的空间分配。如果同时向对象添加大量数据,则多个进程可能同时尝试在高水位线上方分配空间,从而导致争用。 既然是控制资源并发的enq&…...

docker详细操作--未完待续

docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...