ViT论文详解

news2024/9/20 7:50:16

文章目录

  • 前言
  • 一、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.coloradmin.cn/o/1986864.html

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

相关文章

如何将Python程序打包成exe程序

众所周知,通过python开发的程序要运行,一般需要安装python环境来运行程序文件,那么如何在未安装python环境的电脑上直接运行程序呢?通常采用Pyinstaller来实现的,本文主要对该打包过程进行具体说明。本文重点解决PyQt5在打包时无法正确运行的问题。 一、安装Pyinstaller 安…

Docker常用命令与相关操作(更新中)

Docker介绍 1.什么是Docker Docker是一个开源的应用容器引擎,它是一个是基于Go语言开发的开源项目。使用Docker可以让开发者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意的Linux机器上,也可以实现虚拟化。Docker容器完全使…

机房空调远程控制方案

概述 企业和园区都会有电力机房,往往会配备抽风机或者空调设备。特别在南方,空气湿度大时特别需要这些设备。经常有业主反馈,下班后靠人力到现场控制不太方便,24小时开启又浪费资源,而且可能有长期噪声污染。为此&…

Tomato靶机

修改网络模式为NAT 主机发现 arp-scan -l 端口扫描 nmap 192.168.48.147 nmap -sC -sV -O 192.168.48.147 -sC常见漏洞脚本扫描 -sV开放端口服务/版本号 -O操作系统探测 端口利用 访问web服务 目录扫描 dirb http://192.168.48.147 访问 http://192.168.48.147/antibot_im…

盘点4款令人惊艳的视频剪辑工具

在这个短视频盛行的时代,每个人都可以成为视频内容的创作者。但是,在此之前,拥有一款适合自己的剪辑软件十分重要。今天我就来和大家来说一说我自己觉得比较好用的4款剪辑软件。 1、福昕剪辑神器 直达链接:www.pdf365.cn/foxit-c…

如何将iphone照片导入电脑?4种使用的照片导入办法

你是否曾为如何将iPhone上的照片导入电脑而烦恼?是否尝试过多种方法,却总是觉得步骤繁琐、效率低下?不用再为找不到好方法而挠头了! 下面分享几种实用的导入办法,让你在短时间内将照片从iPhone照片导入电脑&#xff0…

学习笔记 韩顺平 零基础30天学会Java(2024.8.6)

P471 String对象特性2 数组默认情况下是放到堆里面的 只要调用一个方法就会产生一个新栈,因为是在主方法里创建对象的,所以对象是在栈里面,而str ch这些都应该在堆里面,栈里的对象指向堆中的str ch。这一题很像学C语言的时候遇到的…

红外遥控风扇——arduino

红外遥控风扇——arduino 本节课任务红外遥控红外遥控通信过程红外遥控套件红外遥控接线实现风扇的多种换挡方式用本节课所学的红外遥控,控制RGB彩灯变换颜色,至少配置4种 本节课任务 1、了解红外遥控技术在生活中的运用。 2、学会编程测试红外遥控器的…

nuclei-快速漏洞扫描器【安装使用详解】

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、nuclei介绍 Nuclei是一款基于YAML语法模板的开发的定…

软件包管理|npm【前端工具链】

项目中的依赖 依赖是指可能由他人编写的第三方软件,理想情况下能够为你解决单一的问题。 一个 Web 项目可以有任意数量的依赖,从无到多,并且你的依赖里可以包含了你没有明确安装的子依赖(依赖的依赖)。 项目依赖可以…

Ubuntu 22.04 Docker安装笔记

1、准备一台虚机 可以根据《VMware Workstation安装Ubuntu 22.04笔记》来准备虚拟机。完成后,根据需求安装必要的软件,并设置root权限进行登录。 sudo apt update sudo apt install iputils-ping -y sudo apt install vim -y允许root ssh登录&#xff1…

LVS集群的nat模式详解(负载均衡)

目录 一、LVS集群的介绍 1、LVS 相关术语: 2、lvs工作原理 3、相关名词概念 4、lvs集群的类型 二、lvs的nat模式 1、介绍: 2、数据逻辑: 3、nat实验部署 环境搭建: 1、lvs中要去打开内核路由功能,实现网络互联…

完整指南:卡片设计入门及实用技巧解析

UI卡片是对响应设计的终极回应。无论是响应布局还是自适应布局,卡片UI设计都可以为适应做出贡献,其灵活可控的容器结构可以根据总宽度灵活调整布局结构。虽然UI卡片在加载速度和屏幕适应性上有天然的优势,但由于卡片的意识,每个部…

Windows安装MySQL8.0.X版本归档包(zip包)最新教程

文章目录 1.安装包下载1.1 Windows版本下载2.MySQL8.0.X安装2.1 解压压缩包到指定位置2.2 初始化2.3 安装服务2.4 修改默认密码总结参考资料1.安装包下载 你可以下载 msi 文件一键安装,也可以下载解压版 zip 文件(Archive)进行命令行初始化安装,也是个人推荐的方式。 MyS…

温湿度阈值联网控制

温湿度阈值联网控制 引言 目的: 我们不管使用哪种协议, 哪种解决方案, 我们就目前的情况来看, 我们刚开始是使用 手动修改temp_th和 humi_th的方式, 来实现温湿度阈值的控制.但是对于投入到实际使用的话, 我们还需要使用更方便的联网控制, 所以我们首先利用Onenet的解决方案.…

Kickstart

一:实验前提: 1.RHEl7主机 2.开启图形 init5开图形 3.配置网络可用 4.关闭vmware dhcp功能 5.关闭火墙 二:下载kickstart [roottao ~]# yum install system-config-kickstart 三:启动kickstart并完成相关配置:…

JVM 加载阶段 Class对象加载位置是在 堆中还是方法区?

在JVM(Java虚拟机)的类加载过程中,Class对象的加载位置涉及到堆(Heap)和方法区(Method Area)两个关键区域。具体来说,类的加载阶段涉及到将类的.class文件中的二进制数据读入到内存中…

linux搭建redis超详细

1、下载redis包 链接: https://download.redis.io/releases/ 我以7.0.11为例 2、上传解压 mkdir /usr/local/redis tar -zxvf redis-7.0.11.tar.gz3、进入redis-7.0.11,依次执行 makemake install4、修改配置文件redis.conf vim redis.conf为了能够远程连接redis…

PHP高校教材管理系统-计算机毕业设计源码29810

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3系统开发的目标意义 1.4论文结构与章节安排 2 高校教材管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功…

Pyside6实战教程专栏目录

Pyside6实战教程🚀 专栏目录介绍 本专栏将详细地向Python开发者展示如何利用PySide6框架创建功能丰富的桌面应用程序。无论你是刚刚接触GUI编程的新手,还是希望快速提升自己技能水平的进阶用户,本文都将为你提供一系列简单易懂的教程&#xf…