【视觉论文】VIT - Vision Transformers

论文:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
链接:https://arxiv.org/abs/2010.11929

很多人博主都写烂了的论文,我到现在才真正翻开论文看,21年的工作,正好是刚毕业那年,恶补起来~

摘要

  • 出发点:因为Transformer计算效率和可扩展性,逐渐在自然语言任务上成为主流,但在视觉领域的应用有限。基本都是与卷积结合使用或者替换卷积网络中的某些组件,并没有从整体上改变网络架构。
  • 方案:Pre-train and transfer
    • 实现很简单,按照原文精简表达出来就是:
      we split an image into patches and provide the sequence of linear embeddings of these patches as an input to a Transformer. Image patches are treated the same way as tokens (words) in an NLP application.
    • why pre-train:在ImageNet等中等大小的数据集上,效果不如同等大小的ResNet。文中给出解释是 - Transformer缺少CNN固有的inductive biases(such as translation equivariance and locality),在数据不足时泛化性较差。所以模型在14M-300M图像数据集上做了预训练。
    • why patchs:一个直观的使用自注意力机制在图像上的方法是,每个像素点之间做attention,但是这样计算复杂度是像素数的二次方,并不能用于真实的输入大小上。
  • 结果:证明了在视觉领域CNN并不是必要的,直接将图像patch序列输入tranformer也可以取得良好的效果,并且在训练阶段可以减少计算资源的消耗。

方法

直接上图,问题点在于如何将图片patch转换为embedding。

  1. 模型输入
    图像大小H*W*C,H和W分别代表宽和高,C代表通道数。将其flatten为2维N*(P*P*C),N为切割出的patch数量,每个patch的大小为P*P,patch的数量为N=HW / P^2(即tranformer输入长度)。对于二维patch处理,则是直接flatten并映射到输入向量维度-patch embeddings(原文flatten the patches and map to D dimensions with a trainable linear projection)。在这里插入图片描述
    在输入端,还需要拼接一个[CLS](为了和BERT中的说法对齐,其实本质就是一个可学习的向量),在对应位置的输出端,过一个一层的MLP,得到整个图片表示。
    除此之外,还有一个位置编码信息。文中介绍只用了standard learnable 1D position embeddings, 在2D-aware position embeddings未见到收益
  2. 模型结构
    在结构上就是transformer的堆叠(MSA+MLP),文中给出的细节是,每个模块前都会使用Layernorm (LN),并且每个模块都会使用残差连接。公式感觉更清楚一些:
    在这里插入图片描述
  3. 分析
    Transformer与原始CNN相比缺少归纳偏置的特点(Inductive bias),这是一种先验知识,即提前做好的假设。CNN结构共包括两种归纳偏置,一种是局部性,一种是平移不变性;前者指的是图片上相邻的区域具有相似的特征;先卷积再平移和先平移再卷积结果一致。因此CNN具备很多先验信息,只需要相对少的数据就可以学习一个比较好的模型。

实验

先介绍一些我比较关心的实验结果

  1. 为什么增加CLS,而不直接使用average pooling,文中有对应实验结果,两者实际差别不大。
    在这里插入图片描述
  2. Position embedding对比,位置编码将sum到输入embedding上,假设3x3共9个patch:
    • 一维编码:patch编码为1到9
    • 二维编码:patch编码为11,12,13,21,22,23,31,32,33,即同时考虑X轴与Y轴的信息,对X和Y Embedding进行concat
    • 相对位置编码:为了编码patch之间的空间信息,考虑加入其相对位置距离,对于任意patch之间计算其1维上的相对位置,每个offset作为一个embedding,然后需要一个额外的attention,原有query作为query,相对位置的embedding作为key,然后将attention结果作为bias加入main attention中。
      由实验结果可以看到,出了不加位置编码有比较大的性能损失外,其他位置编码方式差距不大,作者认为这是因为输入是基于patch而非像素,对于编码空间信息不是很重要,并且给予patch的方式使空间关系变得简单。
      在这里插入图片描述
  3. 各种size的ViT模型
    在这里插入图片描述
  4. 主要实验,可以看到在小数据集预训练结果不如resnet
    在这里插入图片描述

在这里插入图片描述
5. 不同大小的预训练数据集效果对比,卷积的归纳偏差对于较小的数据集很有用,但对于较大的数据集,直接从数据中学习相关模式就足够了。
在这里插入图片描述
6. scaling study:ViT uses approximately 2 − 4× less compute to attain the same performance,CNN+Transformer即Hybrid的方法在模型较小时有效果,但是随着模型增大效果消失。
在这里插入图片描述
7. 一些可视化结果
在这里插入图片描述

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

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

相关文章

分析 MyBatis/MyBatis-Plus 慢 SQL 的分析组件 --SQL 慢镜️‍♀️

大家好!我是聪ζ🌱我做了一个分析 MyBatis/MyBatis-Plus 慢 SQL 的分析组件 --SQL 慢镜🕵️‍♀️ GitHub仓库地址🚀: https://github.com/lhccong/sql-slow-mirror 点点 star 我的朋友们✨ 背景🧊: 大家…

使用autocannon和0x对网站进行性能分析(node)

npm i autocannon -g autocannon -c 100 -d 5 -p 10 http://localhost:3000/ 0x -o app.js 火焰图是根据程序的栈的状态对出现函数的采样数据统计而得,宽度代表函数运行一次所需的时长、高度代表栈的层数、颜色深度代表函数在采样中出现的频率,因此宽度…

Python-GEE遥感云大数据分析、管理与可视化

原文链接:Python-GEE遥感云大数据分析、管理与可视化https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601238&idx2&sn6b0557cf61451eaff65f025d648da869&chksmfa820db1cdf584a76de953b96519704177e6206d4ecd47a2f2fabbcac2f7ea619b0bce184…

标准版/开源版 移动端新增页面使用文档

在标准版开发的实际使用中,随着用户移动端的产品和信息内容不断增多,新增页面来展示对应的产品详情、模块等内容。针对一些概念或者步骤较多的内容,可以新增子页面构建多级模块结构,帮助用户快速定位。 下面就如何新增页面做一讲…

2024深圳杯数学建模挑战赛B题:批量工件并行切割下料问题思路代码成品论文分析

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓ https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 问题重述 深圳杯数学建模挑战赛2024B题:批量工件并行切割下料问题 板材切割下料是工程机械领域重要…

qmt教程1---qmt安装,提供下载链接

以前写的qmt不太完善现在重新好好的学习一下qmt,重新封装qmt,使用方便 1第一步下载qmt 点击安装 下一步 下一步 默认路径,安装完成 2登录qmt,选择行情加交易,选择极简模式 登录情况 我把qmt上线了 比如我们获取一分钟…

利用ollama和open-webui本地部署通义千问Qwen1.5-7B-Chat模型

目录 1 安装ollama 2 安装open-webui 2.1 镜像下载 3 配置ollama的模型转换工具环境 3.1 下载ollama源码 3.2 下载ollama子模块 3.3 创建ollama虚拟环境 3.4 安装依赖 3.5 编译量化工具 7 创建ollama模型 8 运行模型 参考文献: 1 安装ollama curl -fsSL …

算法训练营day15

一、层序遍历 参考链接7.2 二叉树遍历 - Hello 算法 (hello-algo.com) 层序遍历本质上属于广度优先遍历,也称广度优先搜索, BFS通常借助队列的先入先出的特性实现 参考链接102. 二叉树的层序遍历 - 力扣(LeetCode) 像这种较为…

2SD1666 封装TO-220F 实物拍摄 功能介绍

2SD1666 是一款 NPN 硅晶体管,适合于低频和音频放大以及开关应用。以下是它的主要功能和参数的详细介绍:功能:低频放大: 适用于音频放大器和其他低频放大应用。 开关: 可用于电源开关和电机控制等应用。 主要参数:极限工作电压 (VCEO): 60V 最大电流允许…

MySQL的创建用户以及用户权限

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法,看完代码自己敲一遍,十分有用 拖动表名到查询文件中就可以直接把名字拉进来中括号,就代表可写可不写 目录 1.创建用户 1.1 工具创建用户 1.2 脚本创建用户 1.2.…

一文带你掌握yaml文件的使用

在自动化测试数据存储中,比较常见的有csv、json、excel文件等,可能大家忽略了另外一个非常简单、好用的,而且更简洁的文件,那就是咱们今天的主角yaml文件。 yaml文件是一种数据序列化语言,其良好的跨语言、跨平台、易…

【资源分享】Pr-最吊的视频剪辑软件

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…