VIT论文阅读

news2024/10/5 20:22:49

论文地址:https://arxiv.org/pdf/2010.11929.pdf

VIT论文阅读

    • 摘要
    • INTRODUCTION
    • 结论
    • RELATEDWORK
    • METHOD
      • 1.VISIONTRANSFORMER(VIT)
        • 整体流程
        • 消融实验
          • HEAD TYPE AND CLASSTOKEN
          • poisitional embedding
        • 整体过程公式
        • Inductive bias
        • Hybrid Architecture
      • 2.FINE-TUNINGANDHIGHERRESOLUTION
    • 实验

摘要

虽然transformer已经是nlp领域的标准,但是transformer来做cv很有限,cv中跟attention跟cnn一起使用,或者cnn中的某些卷积替换成attention,整体结构不变。文章提出,直接使用transformer也可以在图像,尤其在大数据做训练再迁移到中小数据集。同时,transformer需要更少的训练资源。(2500天TPU V3)

INTRODUCTION

nlp领域的应用,transformer已经是必选模型。主流方式:在大规模数据集做预训练再去特定领域小数据集做微调(Bert)

transformer应用到cv难点:2d图片变成1d数据

self-attention应用到cv领域,

1.featuremap当做transformer输入,

2.孤立自注意力:通过局部小窗口,轴注意力:2d矩阵拆分为2个1d,先在高度维度做self-attention,再宽度维度做self-attention

2理论上高速,没有在硬件上加速,模型不够大。

直接应用transformer在图片领域,不做修改。把图片分成几个patches,每个patch通过fc layer得到一个linear embedding,将其输入给transformer。图片块类似nlp里面的tokens。训练使用有监督

在这里插入图片描述

在中规模数据集,vit缺少归纳偏置(locality, translation equivariance:f(g(x))=g(f(x)),效果较弱。在大规模预训练,在下游任务去vit就可以取得相近或者更好的结果。

结论

抽图片块、位置编码之外没有引入归纳偏置。图像序列的图像块直接做transformer,简单、扩展性好的策略与大规模数据结合,达到了很好的效果。

未来方向:transformer在检测、分割的应用,自监督的预训练方式

模型变大达到更好的结果。

RELATEDWORK

transformer在nlp的应用:

BERT:denoising self-supervised(完形填空)

GPT:language modeling (next word pre)

在cv应用:

如果每个像素点当做一个元素,俩俩自注意力,平方复杂度难以应用

1.local neighborhoods

2.sparse transformer,稀疏点做自注意力

3.应用到不同大小block,或者按轴做自注意机制

需要用复杂工程加速算子

transformer和cnn结合:涵盖各领域

与之相似的工作:

1.Jean-Baptiste Cordonnier,Andreas Loukas,and Martin Jaggi. On the relationship between self-attention and convolutional layers. In ICLR, 2020.

2.iGPT:生成性模型,也使用transformer。微调后性能72%

3.其他相似工作:大数据集预训练;数据集ImageNet-21k、JFT-300M

METHOD

模型设计贴近transformer原理,好处:直接使用nlp的transformer架构

1.VISIONTRANSFORMER(VIT)

在这里插入图片描述

整体流程

1.图分成patch,变成序列

X: 224x224,使用patch size = 16, N= HW/P^2

得到196个图像块 ==> 16x16x3

2.每个patch经过linear projection线性投射层(全连接层E)得到特征,即patch embedding。加上位置编码信息position embedding。

3.借鉴bert extra learnable embedding,加入特殊字符cls ,图像*代替,class embedding。token输入transformer encoder

E: 768x768, D = 768,第一个768是图像计算得来16x16x8

X * E = 196 x 768 x 768 x 768 = img: 196 x 768 = 197 x 768,  矩阵乘法
								cls: 1  x 768		
加入位置编码信息,sum

4.多头自注意力机制,mlp head 分类头

12个头:768 / 12 = 64

197x64	197x64	197x64 12个头输出拼接:197 x 768
k		q		v

layer norm: 197 x 768
mlp: 放到4倍:197 x 3072 缩小投射———> 197 x 768
消融实验
HEAD TYPE AND CLASSTOKEN

class token 当做图像的整体特征,token输出接mlp,使用tanh为激活函数做预测。

(ResNet)图像全局向量特征:feature map ——> globally average-pooling

在这里插入图片描述

transformer

在这里插入图片描述

两种方式都可以,vit用class token,尽可能跟transformer保持一致

在这里插入图片描述

poisitional embedding
  • 1D: nlp常用的

    1 2 3 4 ... 9   维度 D
    
  • 2D:

    		D/2
    D/2	11	12	13
    	21	22	23
    	31	32	33
    维度D/2的向量表示X-embedding, D/2的向量表示Y-embedding
    contact成维度D --> 2d poisitional embedding
    
  • Relative position embedding:绝对距离、相对距离

实验结果:都可以

在这里插入图片描述

ptach-level而不是pixel-level,图像块较小,获取小块之间相对位置较容易,因此采用不同位置编码差异不大。

本文中vision transformer采用class token 跟1d position embedding(对标准的transformer不做过多改动)

整体过程公式

在这里插入图片描述

Inductive bias

cnn: locality、translation equivariance,模型每一层均体现,先验知识贯穿

vit:mlp layer是局部、平移等变性,self-attention全局,图片2d信息基本没有使用。位置编码也是随机初始化,没有携带任何2d信息。(缺少偏置,中小数据集效果不如cnn)

Hybrid Architecture

使用CNN进行预处理

图片通过CNN获取feature map,拉直后跟全连接层操作

在这里插入图片描述

2.FINE-TUNINGANDHIGHERRESOLUTION

微调用较大尺寸图像,得到更好结果。

使用预训练好的vision transformer,当用更大尺寸图像,patch size 保持一致,序列长度增加,提前预训练好的位置编码失效。

进行2d插值解决该问题(临时解决方案,微调局限性),2D interpolation

实验

对比resnet、vit和hybrid表征学习能力,不同大小数据集做预训练,在很多数据集做测试。vit在大多数数据集上训练时间短效果好

数据集:imagetNet、imagetNet-21k、JFT

下游任务分类:CIFAR-10/100、Oxford-IIIT Pets、,OxfordFlowers-102
在这里插入图片描述

ViT-L/16:Large模型,patch size 16x16

序列长度跟patch size成反比,模型用更小的patch size时,计算代价更大

在这里插入图片描述

bit:cnn中较大的模型

noisy student:image net中表现最好 ,pseudo-label进行self training (伪标签)

vit训练时间更短
在这里插入图片描述

1.小数据集cnn效果好

2.数据规模大于ImageNet-21K,vit效果较好

在这里插入图片描述

使用预训练模型当做特征提取器,做5-shot

原因:缺少归纳偏置,小数据集效果较cnn差;

平均注意力距离

在这里插入图片描述

自监督:masked patch,将图片分成几个patch,随机涂抹几个patch;

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

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

相关文章

Nginx第1篇-安装和简单配置

Nginx可以做什么 可以做静态HTTP服务器做负载均衡做正向代理做反向代理 正向代理和反向代理 正向代理: 是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标&…

Scala 02——Scala OOP

文章目录 Scala 02——Scala OOP前序类1. 类的基本结构2. 普通类和数据类的区别 继承1. extends2. override 抽象类抽象类的特点 单例对象1. 定义2. 场景3. 方法3.1 方法定义3.2 方法调用 特质1. 抽象类和特质的区别2. 强制混入语法3. 静态混入和动态混入 内部类Java和Scala内部…

单链表的应用

文章目录 目录1. 单链表经典算法OJ题目1.1 [移除链表元素](https://leetcode.cn/problems/remove-linked-list-elements/description/)1.2 [链表的中间节点](https://leetcode.cn/problems/middle-of-the-linked-list/description/)1.3 [反转链表](https://leetcode.cn/problem…

【八股】Redisson分布式锁

Redisson分布式锁 主要了解了Redisson分布式锁实现的三个功能: 1.可重入 -> 防止死锁 2.可重试(i.e. 非阻塞获取锁) 3.自动续约 1. 可重入 原理: 利用Redis的Hash结构,记录了使用当前锁的线程id和重用次数&#…

C++初级----list(STL)

1、 list介绍 1.1、 list介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 1. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一…

git 分支-变基

在git中,将一个分支的更改集成到另一个分支有两种主要方式:合并(merge)和变基(rebase)。在本节中,将学习什么是变基,如何执行变基操作,为什么它是一个非常强大的工具&…

Web 题记

[极客大挑战 2019]LoveSQL 看到这种就肯定先想到万能密码,试试,得到了用户名和密码 总结了一些万能密码: or 11 oror admin admin-- admin or 44-- admin or 11-- admin888 "or "a""a admin or 22# a having 11# a havin…

vue2知识点1 ———— (vue指令,vue的响应式基础)

vue2的知识点,更多前端知识在主页,还有其他知识会持续更新 Vue 指令 Vue指令是Vue.js中的一个重要概念,用于向DOM元素添加特定行为或功能。Vue指令以v-开头,例如v-bind、v-if、v-for等。 v-bind 动态绑定属性 用法&#xff1a…

Linux sort/uniq/wc

文章目录 1. sort 排序将线程ID从大到小排序 2.uniq 临近去重3.wc word cnt 统计 1. sort 排序 将线程ID从大到小排序 grep -v是反向筛选,利用USER,排除掉首行 awk是打印第1 2列 sort -n是代码以数值大小做排序,不加的话会以字符排序。 -k是…

数通HCIE考试分享:考前心态很重要,心情放松好过一次练习

誉天数通HCIE晚班火热预约中!真机实验考前辅导备考资料,名师保驾护航,助你稳定通关!识别二维码,即可获取免费试听名额! 备考阶段 我是去年10月底完成了笔试考试,在笔试之前就将PY的课程过了一遍…

白话transformer(六)编码器与解码器

B 站视频:https://www.bilibili.com/video/BV1fE421T7tR/?vd_source9e18a9285284a1fa191d507ae548fa01 白话transformer(六) 1、前言 今天我们将探讨Transformer模型中的两个核心组件:编码器和解码器。我们将通过一个具体的任务…

【数据分析】AHP层次分析法

博主总结:根据每个方案x各准则因素权重累加结果 对比来选择目标。数据主观性强 简介 AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标之间能…

微软开源 WizardLM-2,70B优于GPT4-0613,7B持平阿里最新的Qwen1.5-32B

当地时间4月15号,微软发布了新一代大语言模型 WizardLM-2,新家族包括三个尖端型号:WizardLM-2 8x22B, WizardLM-2 70B,和WizardLM-2 7B,作为下一代最先进的大型语言模型,它在复杂聊天、多语言、推理和代理方面的性能有…

为什么还有人再问鸿蒙开发有必要学吗?

前言 学习鸿蒙开发,这事儿真的挺有必要的。鸿蒙操作系统,它厉害就厉害在高性能、可扩展,还特智能。现在智能设备和物联网火得不行,鸿蒙就是要成为这个时代的领头羊。它可不是来跟安卓抢饭碗的,它的眼光可远了&#xf…

4/17 FreeRTOS_day2

1.总结串口的发送和接收功能使用到的函数 端口发送数据 HAL_StatusTypeDef HAL_UART_Transmit( UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout ) UART_HandleTypeDef *huart:指定要使用的串口 const uint8_t *pData&#…

【STM32】嵌入式实验二 GPIO 实验 (前三个设计)

1. 按键亮灯 设计 GPIO 实验项目 1,功能:当按键 KB1 按下时,实验板上全彩发光二极管周边 的发光二极管全亮,当按键 KB2 按下时跑马灯 D0 闪亮。 实验要求基于寄存器的GPIO配置,所以需要手动操作寄存器来配…

Spring5深入浅出篇:Spring动态代理详解

Spring5深入浅出篇:Spring动态代理详解 很多粉丝私信我这个Spring5的课程在哪看,这边是在B站免费观看欢迎大家投币支持一下. 视频地址 Spring动态代理详解 这篇主要介绍MethodBeforeAdvice,MethodInterceptor俩者在动态代理中起到的作用,并且详解俩者区别 额外功能的详解 Met…

重定向原理和缓冲区

文章目录 重定向缓冲区 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。 重定向 内核中为了管理被打开的文件,一定会存在描述一…

【热门话题】常见分类算法解析

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 常见分类算法解析1. 逻辑回归(Logistic Regression)2. 朴…

【Spring进阶系列丨第十篇】基于注解的面向切面编程(AOP)详解

文章目录 一、基于注解的AOP1、配置Spring环境2、在beans.xml文件中定义AOP约束3、定义记录日志的类【切面】4、定义Bean5、在主配置文件中配置扫描的包6、在主配置文件中去开启AOP的注解支持7、测试8、优化改进9、总结 一、基于注解的AOP 1、配置Spring环境 <dependencie…