Vision Transformer (ViT)介绍

news2024/11/16 7:18:57

paper:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

摘要

  • 把transformer直接应用于图像块序列,也可以在图像分类任务上表现很好。
  • 通过在大数据集上预训练,然后迁移到中等规模和小规模数据集上,ViT可以取得和SOTA的卷积网络同样出色(甚至更好)的结果,同时需要更少的训练资源。

介绍

1、将标准transformer直接应用于图像,只做最小可能修改

将一幅图像分割成多个图像块,然后将这些图像块的embedding序列作为输入,送到transformer。这里的图像块类似于NLP中的token。

2、在中等规模数据集(如ImageNet)上训练ViT,模型结果会比resnet结构的模型低一点。

和CNN相比,transformer缺乏一些归纳偏置(inductive bias),比如平移不变性和局部性。但是在大规模数据集上,直接从数据中学习,更加有效。

方法

网络结构

图片来源:https://zhuanlan.zhihu.com/p/342261872

输入图像维度为$$H×W×C$$,分割成N个$$P×P$$大小的图像块,N为$$HW/P^2$$,图像块通过线性映射得到D维的向量,D在transformer的所有层中保持不变。

不同层的操作计算过程如下:

公式1是将图像块映射成embedding,这里加了一个可学习的class token $$x_{class}$$(类似BERT),与其他图像块嵌入向量一起输入到 Transformer 编码器中,其在网络最后的输出,作为整个图像的表示y,就是公式4中的结果。Transformer 编码器中的具体过程这里不作展开,可参考https://tech.xiaomi.com/#/pc/article-detail?id=16932。

公式2是multiheaded self-attention的计算过程,公式3是MLP的计算过程。

实际实现过程中,图像块映射成embedding可以通过卷积实现:

# 其中fh,fw是patch的高和宽,让卷积核的大小和stride与patch大小相等
self.patch_embedding = nn.Conv2d(in_channels, dim, kernel_size=(fh, fw), stride=(fh, fw))

 另外,网络最后接MLP head的时候,可以只使用class token对应的结果(如公式4中描述),也可以对所有结果进行pooling,然后接MLP head。参考https://github.com/lucidrains/vit-pytorch.git中实现:

    def forward(self, img):
        x = self.to_patch_embedding(img) #图像转成embedding
        b, n, _ = x.shape

        cls_tokens = repeat(self.cls_token, '1 1 d -> b 1 d', b = b)
        x = torch.cat((cls_tokens, x), dim=1) #引入cls_tokens
        x += self.pos_embedding[:, :(n + 1)]  #加入位置embedding
        x = self.dropout(x)

        x = self.transformer(x)
        # 根据设置选择cls_tokens对应的输出或者进行pooling
        x = x.mean(dim = 1) if self.pool == 'mean' else x[:, 0]

        x = self.to_latent(x)
        return self.mlp_head(x)

Hybrid Architecture

可以将ViT应用于CNN的特征之上,区别就是这里把CNN的特征映射为embedding,其余部分跟ViT的处理过程一样

模型微调(fine-tune)

在大规模数据集上进行预训练,然后在下游任务中进行微调。微调时,把预训练的预测头去掉,添加一个$$D×K$$的全连接层,K为预测类别数。

微调时可以采用更大的输入分辨率,保持patch size不变,这样输入到transformer的序列长度会变长,事实上ViT可以处理任意长的序列,不过预训练的position embedding就失去意义了,这时作者对position embedding进行了2D插值处理。

实验结果

数据集

ImageNet:1.3M images,1k classes

ImageNet-21k:14M images,21k classes

JFT:303M high-resolution images,18k classes

模型参数

Layers:Encoder Block 数量

Hidden Size D:隐藏层特征大小,其在各 Encoder Block 保持一致

MLP Size:MLP 特征大小,通常设为 4D

Heads:MSA 中的 heads 数量

Patch Size:模型输入的 Patch size,ViT 中共有两个设置:14x14 和 16x16,该参数仅影响计算量,patch size越小,序列长度越长,计算量越大。

实验结果

 

JFT+TPU的钞能力! 

 

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

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

相关文章

Android之签字板

文章目录 前言一、效果图二、实现步骤1.GestureSignatureView类2.xml布局3.Activity类(kotlin)4.Activity类(Java)5.动态申请权限(kotlin)6.动态申请权限(Java) 总结 前言 随着公司发展需求,很多金融APP都会涉及到需要用户签字的环节,所以在此贴出代码以…

软考高级架构师笔记-9系统架构

目录 1. 前文回顾 & 考情分析2. 软件架构概述3. 软件架构风格3.1 层次架构风格3.2 面向服务架构风格4. 软件架构复用5. 特定领域软件体系结构DSSA6. ABSD7. 质量属性8. 架构评估9 结语1. 前文回顾 & 考情分析 前文回顾: 软考高级架构师笔记-1计算机硬件软考高级架构师…

TCP 协议(三)十种核心机制

1.确认应答(可靠机制) 2.超时重传(可靠机制) 3.连接管理(可靠机制) 4.滑动窗口(效率机制) 5.流量控制(效率机制) 6.拥塞控制(效率机制&#xff09…

优维低代码实践:权限设置

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…

js两种对象混合写,返回的是哪一个

<script>function jiafa() {this.name "xuhaitao";this.age 36;var obj {};obj.xx "hunkxu";obj.yy "88";return obj;}var aa new jiafa();console.log(aa);</script> 打印&#xff1a; FR&#xff1a;徐海涛(hunk xu)

3D引擎龙头Unity:元宇宙和AI活跃玩家

Unity是用于创建和操作交互式实时3D内容的世界领先平台。凭借灵活的编辑器、友好的开发环境、丰富的工具套件&#xff0c;Unity吸引了大量开发者&#xff0c;全球排名前1000的移动游戏70%以上使用了Unity的创作和运营解决方案&#xff0c;如今&#xff0c;Unity引擎在工业场景、…

leaflet地图移动防抖问题

现在有这么一个需求&#xff0c;当移动地图时&#xff0c;需要获取当前地图范围属于那个城市。如果频繁移动地图&#xff0c;会不停的调用接口获取当前地图视图所属城市&#xff0c;所以加个防抖&#xff0c;减少请求。代码示例&#xff1a;<!DOCTYPE html> <html>…

【Leetcode】36. 有效的数独

一、题目 1、题目描述 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 注意:…

微信小程序生态15- 批量提交微信小程序审核的一种方式

文章导航 微信小程序生态1-初识小程序 微信小程序生态2-创建一个微信小程序 微信小程序生态3-微信小程序登录流程设计 微信小程序生态4-扫普通二维码进入小程序、打开短链接进入小程序 微信小程序生态5-微信公众号扫码登录PC端网页 微信小程序生态6-微信公众号授权登录(适用于…

字节跳动(抖音),软件测试四面,面试题总结!走过路过不要错过

面试一 1、 简单做一下自我介绍 2、 简要介绍一下项目/你负责的模块/选一个模块说一下你设计的用例 3 、get请求和post请求的区别 4、 如何判断前后端bug/3xx是什么意思 5、 说一下XXX项目中你做的接口测试/做了多少次 6、 http和https的区别 7、 考了几个ADB命令/查看连…

JAVA_WEB 购物商城(WEB端)

仓库地址&#xff1a;https://gitee.com/ThMyGitee/EeasyEeasyCityFrontEnd.git CSDN的友友们&#xff0c;项目如果适合您的话&#xff0c;麻烦给个小小的Star&#xff0c;谢谢啦&#xff01; JAVA_WEB 购物商城(WEB端) 效果图: 技术选型: 后端技术栈 Jsp Servlet &#x…

【力扣算法01】之最接近的三数之和

文章目录 前言问题描述示例 1示例 2提示 解题思路代码分析完整代码运行效果如图执行示例代码1执行示例代码2 完结 前言 近期已经将python 的大部分内容讲完了, 接下来的一段时间会着重于算法和面试题相关的内容, 确保学有所用, 同时也为准备进入大厂的童靴们做个铺垫, 记得关注…

抖音seo源码-源代码开发搭建-开源部署操作日志

一、开发者前言大环境概述 抖音seo源码开发是一项非常重要的技术&#xff0c;在抖音上&#xff0c;有很多视频&#xff0c;如果你想让自己的视频脱颖而出&#xff0c;那么就需要优化自己的seo源码。不过&#xff0c;为了保护用户的隐私&#xff0c;抖音并不公开其seo算法的细节…

Alluxio入门手册

1. 定义 Alluxio&#xff08;之前名为 Tachyon&#xff09;是世界上第一个以内存为中心的虚拟的分布式存储系统。 它统一了数据访问的方式&#xff0c;为上层计算框架和底层存储系统构建了桥梁。应用只需要连接Alluxio即可访问存储在底层任意存储系统中的数据。此外&#xff0c…

太难了,别再为难我们这些测试工程师了好吗?

前言 有不少技术友在测试群里讨论&#xff0c;近期的面试越来越难了&#xff0c;要背的八股文越来越多了,考察得越来越细&#xff0c;越来越底层&#xff0c;明摆着就是想让我们徒手造航母嘛&#xff01;实在是太为难我们这些测试工程师了。 这不&#xff0c;为了帮大家节约时…

从零开发短视频电商 Jmeter基础介绍和使用心得

文章目录 基本Jmeter主要元件元件执行顺序提取器Json提取器边界值提取器 高级动态参数参数化前后关联设置Jmeter语言为中文环境非GUI模式压测分布式压测监控模板 基本 Jmeter主要元件 1、测试计划&#xff1a;是使用 JMeter 进行测试的起点&#xff0c;它是其它 JMeter测试元…

一、Zabbix介绍及6.0部署

Zabbix 一、Zabbix介绍1、zabbix是什么&#xff1f;2、zabbix的监控原理是什么&#xff1f;3、Zabbix 6.0新特性:4、Zabbix 6.0 功能组件&#xff1a; 二、Zabbix 6.0 部署1、部署 zabbix 服务端2、部署数据库3、编译安装 zabbix Server 服务端4、部署 Web 前端&#xff0c;进行…

Jmeter接口关联(二)【使用jsonpath表达式提取值】与python中使用jsonpath提取值 完成接口关联

文章目录 前言一、jmeter中使用jsonpath的表达式来提取值 1、使用jsonpath表达式匹配date的所有数据2、使用json提取器提取想要拿取的date值二、在Python中使用Jsonpath来完成接口的关联 ​​​​​​​1、jsonpath使用讲解 2、jsonpath在接口关联中使用总结 前言 Jmeter中关…

NFT + JAVA + 可更新合约

前言 合约部署参考&#xff1a;hardhat 合约开发参考&#xff1a;openzeppelin 钱包&#xff1a;metamask 部署链使用的是&#xff1a;sepolia 合约生成Java&#xff1a;solc 合约部署和测试自行处理 1. 合约 合约代码&#xff1a;ZhuZiNFTU.sol // SPDX-License-Iden…

STM32 Proteus UCOSII系统微波炉控制系统DS18B20-0057

STM32 Proteus UCOSII系统微波炉控制系统DS18B20-0057 Proteus仿真小实验&#xff1a; STM32 Proteus UCOSII系统微波炉控制系统DS18B20-0057 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 LCD1602显示器多个按键蜂鸣器DS18B20温度传感器3个LED灯表示档位加热指…