ViT算法解读——Transformer在分类任务中的应用

论文:An image is worth 16x16 words: Transformers for image recognition at scale
作者:Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby
机构:谷歌研究院
链接:https://arxiv.org/abs/2010.11929#
代码:https://github.com/google-research/vision_transformer


文章目录

  • 1、算法概述
  • 2、ViT细节
    • 2.1 模型设计
    • 2.2 微调和更高的分辨率
  • 3、实验
    • 3.1 ViT和其它SOTA模型性能对比
    • 3.2 数据集大小的重要性


1、算法概述

Transformer在NLP领域应用的风生水起,但是在视觉领域还没有得到大量应用,作者尝试尽可能少的改变transformer结构,让其应用在图像任务上。为此,作者将图像分割成小块,并将这些小块的线性嵌入序列作为transformer的输入。图像块的处理方式与NLP中token处理方式相同。作者以监督的方式对模型进行图像分类训练。

作者在中等规模的数据集ImageNet上训练模型,最后得到的结果比ResNets还差一点。作者把这个结果归因于Transformer结构缺乏归纳偏置(inductive biases),这个归纳偏置也可看作先验知识,这是CNN结构先天具备的,比如平移不变性和局部性。所以,在数据量不足的情况下,Transformer不能很好的完成泛化。然而,如果模型在更大的数据集(14M-300M图像)上训练,作者发现大规模训练胜过归纳偏见,ViT能达到CNN结构的 state of the art结果。


2、ViT细节

在模型设计中,作者尽可能地遵循原始Transformer结构,力求直接沿用NLP中的Transformer框架。

2.1 模型设计

Vit结构如下图所示:
在这里插入图片描述
由于transformer最开始是处理NLP的结构,它接收的输入是一维的token embedding序列。对于二维的图像,就需要把二维变成一维了,作者将图像x∈RHxWxC变成了N个拉平的图像块的序列xp∈RNx(PxPxC),这里H和W代表原始输入图像的高和宽,C代表通道数,(P,P)是切分成的图像块的大小,N=HW/P2代表图像块数量。Transformer在其所有层中使用恒定的潜在向量长度为D,因此作者将按照下面公式1将patch拉平后并使用可训练的线性投影映射到D维。作者将该投影的输出称为patch embedding。

和原始Transformer在NLP中的应用一样,这里也需要位置嵌入,作者将位置嵌入添加到patch embedding中以保留位置信息。作者通过实验得出使用标准的可学习的1D位置嵌入就可以了,两者以相加的方式,而非concat方式得到的嵌入向量序列作为Transformer编码器的输入。

在每个Block之前应用层规范化(Layernorm, LN),在每个Block之后应用残差连接。MLP结果包含两个全连接层,每个全连接层后面接了GELU激活层。
在这里插入图片描述

关于归纳偏置: Transformer比CNN具有更少的图像特定的感应偏置。在CNN中,局部性、二维邻域结构和平移等方差被嵌入到整个模型的每一层中。在ViT中,只有MLP层是局部的,在平移上是等变的,而自注意力层是全局的。其次,ViT中二维邻域结构的使用也非常少,在模型开始时将图像切割成小块,在微调时调整不同分辨率图像的位置嵌入。除此之外,初始化时的位置嵌入不携带关于patch的二维位置信息,所有patch之间的空间关系都需要从头学习。

混合结构(Hybrid Architecture),也就是CNN Feature+Transformer: 这有点像检测中DETR的思路,即Transformer接收的输入是CNN得到的特征图拉平的。在特殊情况下,patch的空间大小可以是1x1,这意味着输入序列是通过简单地将feature map的空间维度平坦化并投影到Transformer维度来获得的。

2.2 微调和更高的分辨率

作者在大型数据集上预训练ViT模型,然后在小的下游任务上进行微调。与预训练相比,在更高分辨率下进行微调通常能带来有益效果。当输入更高分辨率的图像时,作者保持patch大小不变,从而获得更大的有效序列长度。ViT可以处理任意序列长度(直到内存限制),但是,预训练的位置嵌入可能不再有意义。因此,我们根据预训练的位置嵌入在原始图像中的位置对其进行二维插值。请注意,此分辨率调整和补丁提取是将图像的2D结构的感应偏置手动注入ViT的唯一点。


3、实验

作者评估了ResNet、Vision Transformer (ViT)和hybrid(混合模型)的表示学习能力。为了了解每个模型的数据需求,作者在不同大小的数据集上进行预训练,并评估许多基准任务。当考虑到预训练模型的计算成本时,ViT表现非常好,以较低的预训练成本在大多数识别基准上达到最先进的水平。

数据集设置: 为了探索模型的可扩展性,作者用了ILSVRC-2012 ImageNet,它包含1000个类别和130万张图片;另一个是ImageNet-21k数据集有21000个类别和1400万张图像;JFT数据集包含18000个类别和303百万张高分辨率图像。同时参考BiT,删除预训练数据集中和下游任务测试集中重复的数据。下游数据集包括:ImageNet(on the original validation labels),ImageNet (on the cleaned-up ReaL labels ),CIFAR-10/100,Oxford-IIIT Pets,Oxford Flowers-102,VTAB (19 tasks)

模型变体: 作者参考BERT,也设计了“Base”,“Large”,“Huge”三种变体,具体参数设置如下表:
在这里插入图片描述
作者在文中以变体名称加patch大小来标记,例如:ViT-L/16是指具有16×16输入patch大小的“Large”变体。请注意,Transformer的序列长度与patch大小的平方成反比,因此具有较小patch大小的模型在计算上更昂贵。

3.1 ViT和其它SOTA模型性能对比

在这里插入图片描述
可以看到在JFT数据集上预训练的ViT模型,迁移到下游任务后,表现要好于基于ResNet的BiT和基于EfficientNet的Noisy Student,且需要更少的预训练时间。

3.2 数据集大小的重要性

在这里插入图片描述
左图(Figure 3)显示出在规模不大的数据集上(ImageNet),BiT能超越ViT的效果,但随着数据集规模增大,ViT的性能逐渐表现出来。

右图(Figure 4)显示模型规模与数据集数量的关系,对于像ViT-b(ViT-B所有隐藏层减半)和ResNet50x1这样的小规模模型,随着数据量的增加,性能很容易到达瓶颈,对于ViT-L规模模型,性能可以随着数据量的增加一直提升。

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

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

相关文章

Golang | Leetcode Golang题解之第322题零钱兑换

题目&#xff1a; 题解&#xff1a; func coinChange(coins []int, amount int) int {var (dfs func(x int) int // x金额 最少硬币个数memo make(map[int]int) // 记忆化)dfs func(x int) int {//边界if x 0 {return 0} else if x < 0 {return math.MaxInt32}//记…

有限元和稀疏矩阵

对于大规模的有限元计算&#xff0c;系统的整体刚度矩阵是非常耗费内存的&#xff0c;以百万自由度为例&#xff0c;刚度矩阵K的大小为100万x100万&#xff0c;元素大小为双精度double&#xff0c;占用8 byte&#xff0c;那么K占用的内存为100万x100万x8 byte 8000G&#xff0…

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

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

【验证码逆向专栏】某安登录流程详解与验证码逆向分析与识别

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

DedeCMS-V5.7.82-UTF8织梦管理系统漏洞

将靶场环境放到www目录下——访问/dedecms/uploads 安装程序 - 织梦内容管理系统 V5.7 UTF8SP2 同意协议——继续 继续 配置后——点击继续 进入后台 登录后台——填写用户名密码。 方法一&#xff1a;上传shell文件 后台——核心——附件管理——上传新文件。 访问/dedecms…

接口测试之python+rquest+unittest分层自动化框架

接口测试之接口po框架 一、新建一个项目 接口自动化框架设计实战&#xff1a; 第一包&#xff1a;config 案例&#xff1a; #登录接口 dl_url http://cms.duoceshi.cn/cms/manage/loginJump.do dl_d {userAccount: admin, loginPwd: 123456} dl_h "Content-Type:app…

若依分离版本部署流程—开启HTTPS访问。

目录 前言 一、申请证书 二、后端打包 三、前端打包 四、服务器部署 ① Redis启动 ② 运行Jar包 ③ 上传ssl证书到服务器 ④ Nginx配置前端部分 五、访问 前言 在若依分离版本的项目部署过程中&#xff0c;跟大多数前后端分离项目差不多&#xff0c;都是前后端分别打包到服…

鸿蒙(API 12 Beta2版)媒体开发【使用AudioRenderer开发音频播放功能】

音频播放开发概述 如何选择音频播放开发方式 系统提供了多样化的API&#xff0c;来帮助开发者完成音频播放的开发&#xff0c;不同的API适用于不同音频数据格式、音频资源来源、音频使用场景&#xff0c;甚至是不同开发语言。因此&#xff0c;选择合适的音频播放API&#xff…

Linux学习笔记:iptables命令管理

1、iptables简介 其实iptables只是Linux防火墙的管理工具而已&#xff0c;位于/sbin/iptables。真正实现防火墙功能的是netfilter&#xff0c;它是Linux内核中实现包过滤的内部结构。 语法格式&#xff1a;iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION -t&#…

xss漏洞(五,xss-labs靶场搭建及简单讲解)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 本文基于github上的xss-labs靶场以及PHP study进行操作。 一&#xff0c;靶场环境搭建。 1, 下载并解压到phpstudy的www目录下。 同前文一致&#xff0c;将文件…

精准防控,高效管理:AI智能分析网关V4区域未停留检测算法的介绍及应用

一、区域未停留AI检测算法概述 随着人工智能和计算机视觉技术的飞速发展&#xff0c;区域未停留AI检测算法作为一种重要的视频分析技术&#xff0c;逐渐在各个领域得到广泛应用。该算法通过高效处理视频流数据&#xff0c;能够实时分析并判断目标对象是否在预设区域内有足够的…

PSTNET阅读

ICLR2021 点云序列在空间维度上具有不规则性和无序性&#xff0c;但在时间维度上具有规律性和有序性。 现有的基于网格的卷积不能直接应用于原始点云序列的时空建模。 在时空序列下&#xff0c;基于网格和基于点的卷积对比。 创新点 1.首次尝试在原始点云序列建模中分解空间…

【Java 第九篇章】多线程实际工作中的头大的模块

多线程是一种编程概念&#xff0c;它允许多个执行路径&#xff08;线程&#xff09;在同一进程内并发运行。 一、多线程的概念和作用 1、概念 线程是程序执行的最小单元&#xff0c;一个进程可以包含多个线程。每个线程都有自己的程序计数器、栈和局部变量&#xff0c;但它们…

Python获取Excel内容

Python获取Excel内容 目录 Python获取Excel内容1.读取Excel并登陆2.下载Excel中图片 数据存储到列表3.上传到接口 需求&#xff1a;获取xlsx files目录下的所有Excel信息&#xff0c;并将数据打包成字典格式上传到接口 示例数据&#xff1a; 1.读取Excel并登陆 import os impo…

【算法】贪心算法

应用场景——集合覆盖问题 假设存在下面需要付费的广播台&#xff0c;以及广播台信号可以覆盖的地区。如何选择最少的广播台&#xff0c;让所有的地区都可以接收到信号 贪心算法介绍 1.贪心算法是指在对问题进行求解时&#xff0c;在每一步选择中都采取最好或者最优的选择 2…

智观察 | 行业赛道里的AI大模型

‍ “AI改变世界”被炒得热火朝天&#xff0c;结果就换来AI聊天&#xff1f; 实际上&#xff0c;在日常娱乐之下&#xff0c;AI正在暗暗“憋大招”&#xff0c;深入各行各业&#xff0c;发挥更专业的作用。 自动驾驶 最近“萝卜快跑”霸榜热搜长达一周&#xff0c;让无人驾…

手机在网状态接口如何对接?(二)

一、什么是手机在网状态&#xff1f; 传入手机号码&#xff0c;查询该手机号的在网状态&#xff0c;返回内容有正常使用、停机、在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态。 二、手机在网状态使用场景&#xff1f; 1.用户验证与联系…

【问题解决方案】npm install报错问题:npm ERR! - 多种解决方案,总有一种可以解决

文章目录 1.问题重述2.解决方案方案1.确认根目录正确方案2.确认文件名正确方案3. 确认node.js安装完成&#xff08;注意这个环境变量配置没有写完&#xff09;方案4 改用yarn安装&#xff08;亲测可用&#xff09; 3.延申问题解决方案问题1&#xff1a;需要低版本的node.js 写在…

企业图纸防泄密怎么做?最好的八款图纸加密软件推荐

保护企业图纸不被泄露是现代企业信息安全管理中的重要任务。随着信息技术的发展&#xff0c;企业需要采取多种措施来确保图纸的安全性。以下是一些常用的图纸防泄密方法和八款推荐的图纸加密软件&#xff1a; 图纸防泄密方法 1. 数据备份&#xff1a;定期备份图纸数据&#xf…

Jboss 漏洞

一.CVE-2015-7501 访问/invoker/JMXInvokerServlet 开启下载存在漏洞 二.CVE-2017-7504 三CVE-2017-12149 启动vulhub环境&#xff0c;访问/invoker/readonly出现如下界面&#xff0c;说明存在漏洞 使用工具连接 四.Administration Console弱⼝令 访问/admin-console/login…