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模型涌现出了一大批优秀的工作。

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

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

相关文章

Arch Linux - 2-安装中文输入法

文章目录 2 安装中文输入法2.0 准备2.0.1 前置条件2.0.2 建议 2.1 方案一:RimeIBus2.1.1 安装&配置2.1.2 添加输入法 2.2 方案二:IBusLibpinyin 2 安装中文输入法 2.0 准备 2.0.1 前置条件 预装gnome # 安装 pacman -S gnome# 设置开机自启动 sy…

【博客22】缤果Android_USB串口调试助手V1.0(高级篇)

超级好用的Android_USB调试助手 ( Android Studio Java) 开发工具: android-studio-2022.2.1.20-windows.exe usb-serial-for-android 目录 一、软件概要: 二、软件界面: 1.App演示 2.其他扩展展示 2.1 USB枚举 2.2 波特率 2.3 自定义指令集 2.…

8月6日Spring Boot学习笔记

MyBatis动态SQL 动态 SQL 大大减少了编写代码的工作量&#xff0c;更体现了 MyBatis 的灵活性、高度可配置性和可维护性。 if标签 <if test"判断条件">SQL语句</if> 当判断条件为 true 时&#xff0c;才会执行所包含的 SQL 语句。 choose、when和otherw…

tomcat文件上传漏洞练习

1、靶场账号注册 vulfocus 注册后邮箱中点击激活 2、首页选择并开启靶场 复制映射的ip和端口 在浏览器输入ip和端口 改成put并把1.jsp中内容复制进去 3打开哥斯拉&#xff0c;连接上面的网址

【PyTorch】深度学习PyTorch环境配置及安装【详细清晰】

文章目录 概要步骤Anaconda安装管理环境 安装PyTorchPyTorch环境使用JupyterJupyter简介安装Jupyter及使用 我的部分版本 概要 搭建PyTorch环境用于深度学习 步骤 Anaconda安装 安装详情&#xff1a;https://blog.csdn.net/Q20011102/article/details/127831950 我安装的是…

书生大模型实战营-入门关卡-Python 基础知识

任务&#xff1a; https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Python/task.md 完成&#xff1a; 任务1&#xff1a;Python实现wordcount import re from collections import defaultdictdef wordcount(text):# 转换为小写并使用正则表达式分割单词words re.…

【简历】宜春某二本学院:Java简历指导,秋招简历通过率低

简历说明 这是一个25届的二本宜春某学院的这个Java简历&#xff0c;今天看了两个简历&#xff0c;包括前面个985的&#xff0c;也是12306&#xff0c;这个12306已经烂大街&#xff0c;是个人都知道这个项目了&#xff0c;所以不要放在简历上&#xff0c;你不管大厂中厂还是小公…

【Redis进阶】Redis的持久化RDB和AOF

目录 持久化 RDB持久化 概念 原理 RDB 持久化的详细工作流程 1触发持久化&#xff1a; 2创建子进程&#xff1a; 3数据写入 RDB 文件&#xff1a; 4替换旧文件&#xff1a; 5回收子进程&#xff1a; RDB持久化的触发方式 1.手动触发&#xff1a; 2.自动触发&#…

FFmpeg推流

目录 一. 环境准备 二. 安装FFmpeg 三. 给docker主机安装docker服务 四. 使用 FFmpeg 进行推流测试 FFmpeg是一个非常强大的多媒体处理工具&#xff0c;它可以用于视频和音频的录制、转换以及流处理。在流处理方面&#xff0c;FFmpeg可以用来推流&#xff0c;即将本地媒体…

【第17章】Spring Cloud之Gateway服务调用

文章目录 前言一、用户服务二、网关服务1. 负载均衡2. 服务调用3. 登录拦截器 三、单元测试1. 启动服务2. 用户不存在3. 正常登录 总结 前言 在上一章我们使用JWT简单完成了用户认证&#xff0c;【第16章】Spring Cloud之Gateway全局过滤器(安全认证)&#xff0c;上一章内容已…

端点区间影响

前言&#xff1a;这一题本来想就是直接来一个前缀和来写&#xff0c;直接左边加一&#xff0c;右边减一&#xff0c;但是细想好像有问题&#xff0c;我们平时做的题目左边端点造成的影响会对这一段区间造成影响&#xff0c;但是这一题的话超过了左边端点就不会有影响了 那这一题…

vue3-ts:husky + prettier / 代码格式化工具

一、Prettier简介 Prettier是一个流行的代码格式化工具&#xff0c;它的主要作用是帮助开发者自动规范化代码的格式&#xff0c;提高代码的可读性和一致性。Prettier通过解析代码并使用自己的规则重新打印它&#xff0c;以确保代码风格的一致性和符合预设的格式化标准。 二、…

WPF学习(8)- Button按钮

1. 用法解析 Button因为继承了ButtonBase&#xff0c;而ButtonBase又继承了ContentControl&#xff0c;所以&#xff0c;Button可以通过设置Content属性来设置要显示的内容。例如 <Button Content"确定"/>我们使用Button的时机&#xff0c;通常是鼠标点击事件…

【Dash】使用 dash_mantine_components 创建图表

一、Styling Your App The examples in the previous section used Dash HTML Components to build a simple app layout, but you can style your app to look more professional. This section will give a brief overview of the multiple tools that you can use to enhan…

树莓派5进行YOLOv8部署的4种不同部署方式检测速度对比:pytorch、onnx、ncnn、tflite

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Python 异步编程:Asyncio 实现原理

常见的并发模型 多进程/多线程异步ActorPub/Sub Python 异步的基石&#xff1a;协程 协程简介 概念&#xff1a;协作式多任务的子程序&#xff0c;用户态线程或微线程&#xff08;Coroutine&#xff09;。 特点&#xff1a;子程序执行可以中断&#xff0c;恢复后不会丢失之…

生物反应器对Organoids培养有啥帮助?有几种?快来看看!

Bioreactor Technologies for Enhanced Organoid Culture是《INTERNATIONAL JOURNAL OF MOLECULAR SCIENCES》上的一篇文章&#xff0c;介绍了用于类器官培养的生物反应器&#xff0c;包括搅拌式、微流体、旋转壁容器和电刺激四类。搅拌式生物反应器通过改善氧合和实现适当的谱…

【iOS多线程(二)】GCD其他方法详解

GCD其他方法 dispatch_semaphore &#xff08;信号量&#xff09;什么是dispatch_semaphore(信号量)?dispatch_semaphore主要的三个方法dispatch_semaphore主要作用线程安全线程同步 dispatch_afterdispatch_time_t 两种形式 GCD 一次性代码&#xff08;只执行一次&#xff09…

面向 RAG 应用开发者的实用指南和建议

向量搜索并非轻而易举&#xff01; 向量搜索&#xff0c;也称为向量相似性搜索或最近邻搜索&#xff0c;是一种常见于 RAG 应用和信息检索系统中的数据检索技术&#xff0c;用于查找与给定查询向量相似或密切相关的数据。业内通常会宣传该技术在处理大型数据集时非常直观且简单…