VIT 论文精读 | transformer架构引入CV的开创性工作

news2024/11/23 3:00:39

目录

1. 背景

2. 方法

2.1 怎么把2D图像变成1D序列输入到transformer中

像素?

先提取特征图?

打成多个patch

2.2 transformer和卷积网络比较

2.3 结构


1. 背景

VIT是基于transformer的在图像分类大放异彩的变体,transformer是VIT的亲爹,可以和resnet相媲美

VIT指出混合卷积网络是不必要的,纯transformer的结构也可以在图像分类里面取得特别好的结果

开启了一个新的天地

2. 方法

2.1 怎么把2D图像变成1D序列输入到transformer中

但想要在视觉领域迁移应用transformer,一个最重要的问题是怎么去把2D图像变成1D序列输入到transformer中

回忆一下transformer,他本质是对输入的序列元素之间做互动,得到注意力图,然后利用自注意力图去做加权平均输出

因为两两都要做互动,所以这个计算复杂度是很大的,

而硬件能计算的序列长度大概是几百几千。比如在经典自然语言的transformer Bert中是512长度。

像素?

所以如果我们直接把图像里的每一个像素点当作一个序列元素的话,会导致序列特别长,比如一张224*224=50176的序列长度,是Bert的500倍。

先提取特征图?

之前也有一些在CV领域的transformer工作,但他们为了降低这种复杂度,是引入了卷积等操作提取特征图,再把特征图拉长为序列输入,或者只在图片的一小片区域做自注意力。

但是作者觉得NLP在自然领域的可扩展性很强,他们也想在CV领域做同样的事情,想尽可能少的改动网络结构,但是老问题回来了,序列太长怎么办?

打成多个patch

把一个图片打成很多个patch

比如对于一张图片224*224 打成16 * 16大小的patch,每一个patch展成序列的长度就是196 ,把他当作一个单词,作为序列的元素输入transformer

2.2 transformer和卷积网络比较

transformer和卷积网络相比,缺少一定的归纳偏置,一种先验知识

(1)locality 假设相邻区域会有相邻特征,靠的越近的东西相关性越强

(2)平移不变性。无论是先做平移还是先做卷积都是一样的。

所以有了这两个假设,我们可以把卷积核看作一个模板,不管一个物体移到哪里,遇到同样的卷积核都会有相同的输出。

有了先验信息,卷积网络就需要较少的数据去学习。但是transformer没有这样的先验信息,所以就需要更大的数据集才能达到比较好的效果

总结来看

transformer需要较大的数据集,才能取得和CNN相媲美的结果

2.3 结构

借鉴Bert的输出,我们VIT里也有特殊的字符*

加一个特殊cls Token 和其他的patch做交互进而输出分类信息,我们相信cls Token可以学习到整张图片的信息,因而我们只需要根据cls Token的信息 做最后的Mlp输出即可

我们举一个例子,把VIT的前向过程走一编

(1)假设我们输入图片X维度为 224×224×3 (长,宽,通道)

(2)将一张图片打成多个图像块(patch)

如果我们使用16×16的图像块大小(patch_size),可以得到多少图像块呢?

意味着有196个图像块,也就是196个token

此时每一个token维度 16×16×3=768

到此我们就把原来的一张图片 224×224×3 变成了 196×768了

(3)经过线性投射层

输入维度是(2)中我们算出来的768

输出维度可以调整,论文中还是768

所以最后经过线性投射层投射之后输出还是为196×768

(4)和特殊cls token合并

合并后输出为197×768

(5)加上位置编码信息

直接加

输出还是为197×768

读完这篇文章,应该明白

transformer对比卷积的优势,劣势?

VIT结构中,如果输入图像是224*224,打成16 *16的patch,头个数12,分析他每一层的形状是什么样子的?

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

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

相关文章

LeetCode面试经典150题(day 2)

26. 删除有序数组中的重复项 难度:简单 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯…

【LeetCode-中等题】56. 合并区间

题目 题解一:排序 思路: 1、对数组按第一个元素大小进行排序,使得数组按大小连续排列 2、先将第一个数组提前放入list集合,因为肯定是从第一个开始算起的 3、接着对下一个数组的左边界和list集合最后一个元素的右边界对比&#x…

go学习之go的语法知识

文章目录 1.go语言开发注意事项2.golang常用的转义字符(escape char)3.golang开发常用的问题小结与提示: 4.go语言注释类型(1).注释类型1)行注释2)块注释(多行注释) (2)使用细节:1&a…

CnetSDK .NET OCR SDK Crack

CnetSDK .NET OCR SDK Crack CnetSDK.NET OCR库SDK是一款高度准确的.NET OCR扫描仪软件,用于使用手写、文本和其他符号等图像进行字符识别。它是一款.NET OCR库软件,使用Tesseract OCR引擎技术,可将字符识别准确率提高99%。通过将此.NET OCR扫…

React原理 - React Virtual DOM 原理

目录 扩展学习资料 Virtual DOM 是什么【虚拟dom】 React渲染 Virtual DOM VS 原生DOM【vDom是否比原生Dom更高效】 Virtual DOM数据结构 Virtaual DOM Diff【虚拟dom前后比对,更新不同dom的算法】 源码解读 react源码组织方式: React Stack Rec…

2.含电热联合系统的微电网运行优化

含电热联合系统的微电网运行优化 MATLAB代码:含电热联合系统的微电网运行优化 关键词:微网 电热联合系统 优化调度 参考文档:《含电热联合系统的微电网运行优化》完全复现 仿真平台:MATLAB yalmipcplex [火]主要内容&#xf…

网络安全(黑客)自学剖析

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…

基于Jenkins CICD的代码发布与回滚-------从小白到大神之路之学习运维第87天

第四阶段提升 时 间:2023年8月24日 地 点:2304教室 授课人:李凤海 参加人:全班人员 内 容: 基于Jenkins CICD的代码发布与回滚 目录 一、案例概述 二、案例知识点 三、案例环境 (一&#xff0…

C++类成员的访问权限以及类的封装

C通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。 Java、C# 程序员注意,C 中的 publ…

大数据-玩转数据-Flink时间滚动动窗口

一、说明 时间窗口包含一个开始时间戳(包括)和结束时间戳(不包括), 这两个时间戳一起限制了窗口的尺寸. 在代码中, Flink使用TimeWindow这个类来表示基于时间的窗口. 这个类提供了key查询开始时间戳和结束时间戳的方法, 还提供了针对给定的窗口获取它允许的最大时间戳的方法(m…

HTTP原理与实现

一、基本概念 一、基本原理* 1、全称: HyperText Transfer Protocol (超文本传输协议) 2、底层实现协议:建立在 TCP/IP 上的无状态连接。 3、基本作用:用于客户端与服务器之间的通信,规定客户端和服务器之间的通信格式。包括请…

PTS性能测试工具-使用记录

因为PTS使用是要收费的,所以文中会有大量图片记录,为我自己以后工作中,可能会再次使用PTS做个参照,以免时间长,容易忘记~ 目录 一、创建场景 二、填写一个压测节点 1、填写节点基本信息 2、Body / Header填写 …

牡丹宣言|对国潮化妆品品牌的理解

化妆品的国潮概念? ■ 是中国的时代潮流。 ■ 是传统元素与现代元素的碰撞。 ■ 是一股年轻的力量。 ■ 是大国崛起的象征。 ■ 是中国文化自信的体现。 如何正确认知化妆品? ■ 化妆品不是药品 ■ 化妆品是一种观念 ■ 化妆品是一种习惯 ■ 化…

自动化测试工具:Airtest入门教程

目录 1.什么是Airtest? 2.AirtestIDE下载安装 3.如何开始使用 4.Airtest入门特例教程 5.总结 1.什么是Airtest? Airtest是一款基于 Python 的、跨平台的UI自动化测试框架。因为它基于 图像识别 的原理,所以适用于所有 Android、 iOS和 …

Linux系统安装(虚拟机安装;系统分区;Linux系统安装;远程登录管理工具)

文章目录 1. VMware虚拟机安装与使用2. 系统分区2.1 磁盘分区2.2 格式化2.3 硬件设备文件名2.4 分区设备文件名2.5 挂载2.6 文件系统结构2.7 总结 3. Linux系统安装4. 远程登录管理工具 1. VMware虚拟机安装与使用 VMware是一个虚拟PC的软件,可以在现有的操作系统上…

opencv 车牌号的定位和识别+UI界面识别系统

目录 一、实现和完整UI视频效果展示 主界面: 识别结果界面:(识别车牌颜色和车牌号) 查看历史记录界面: 二、原理介绍: 车牌检测->图像灰度化->Canny边缘检测->膨胀与腐蚀 边缘检测及预处理…

【C++11】future和async等

C11的future和async等关键字 1.async和future的概念 std::async 和 std::future 是 C11 引入的标准库功能,用于实现异步编程,使得在多线程环境中更容易处理并行任务。它们可以帮助你在不同线程中执行函数,并且能够方便地获取函数的结果。 在…

mysql(八)事务隔离级别及加锁流程详解

目录 MySQL 锁简介什么是锁锁的作用锁的种类共享排他锁共享锁排它锁 粒度锁全局锁表级锁页级锁行级锁种类 意向锁间隙临键记录锁记录锁间隙锁 加锁的流程锁的内存结构加锁的基本流程根据主键加锁根据二级索引加锁根据非索引字段查询加锁加锁规律 锁信息查看查看锁的sql语句 数据…

npm install sentry-cli失败的问题

1. 目前报错 2. 终端运行 npm set ENTRYCLI_CDNURLhttps://cdn.npm.taobao.org/dist/sentry-cli npm set sentrycli_cdnurlhttps://cdn.npm.taobao.org/dist/sentry-cli3. 再安装 npx sentry/wizardlatest -i nextjs即可成功

信创测试的应用是什么

信创测试作为评估创意和创新项目的工具,为企业的发展提供了重要的支持和指导。它能够帮助企业降低风险、优化资源配置,促进创意与创新的迭代和改进。其具体应用,小编带大家一起来看看详情吧! 一、产品和服务创新 信创测试可以用于评估新产品和…