变形金刚在图像识别方面比CNN更好吗?

链接到文 — https://arxiv.org/pdf/2010.11929.pdf

一、说明

        如今,在自然语言处理(NLP)任务中,转换器已成为goto架构(例如BERT,GPT-3等)。另一方面,变压器在计算机视觉任务中的使用仍然非常有限。大多数研究人员直接使用卷积层,或者将某些注意力块与卷积块一起添加到计算机视觉应用(如Xception,ResNet,EfficientNet,DenseNet,Inception等)中。关于视觉转换器(ViT)的论文在图像序列上实现了纯变压器模型,而无需卷积块来对图像进行分类。本文展示了ViT如何在各种图像识别数据集上获得比大多数最先进的CNN网络更好的结果,同时使用更少的计算资源。

二、视觉变压器 (ViT)

        转换器是对数据序列进行操作的网络,例如一组单词。这些单词集首先被标记化,然后输入到转换器中。转换器添加 Attention(二次运算 — 计算每对标记化单词之间的成对内积。随着字数的增加,操作数也会增加)。

        因此,图像更难在变形金刚上训练。图像由像素组成,每个图像可以包含数千到数百万个像素。因此,在转换器中,每个像素将与图像中的每个其他像素进行成对操作。在大小为 500*500 像素的图像中,即 500^2,因此注意力机制将花费 (500^2)^2 次操作。这是一项艰巨的任务,即使有多个 GPU。因此,对于图像,研究人员大多使用某种形式的局部注意力(像素聚类),而不是使用全局注意力。

        ViT的作者通过使用全局注意力来解决这个问题,但不是在整个图像上,而是在多个图像补丁上。因此,首先将大图像分成多个小块(例如 16*16 像素)。如图 1 所示。

图1.图像分为多个补丁(来源:原始论文中的图像)

        然后将这些映像修补程序展开为一系列映像,如图 2 所示。这些图像序列具有位置嵌入。

图2.图像补丁展开成一系列图像(来源:原始论文中的图像)

最初,变压器不知道哪个补丁应该去哪里。因此,位置嵌入有助于变压器了解每个补丁应该适合的位置。在论文中,作者使用了简单的编号1,2,3...n,以指定补丁的位置,如图 3 所示。这些不仅仅是数字,而是可学习的向量。也就是说,数字 1 不直接使用,而是存在一个查找表,其中包含表示补丁位置的每个数字的向量。因此,对于第一个补丁,从表中抓取第一个矢量并与补丁一起放入变压器中。同样,对于第二个补丁,从表中抓取第二个矢量并与第二个补丁一起放入变压器中,依此类推。如图 2 所示。

图3.带有位置嵌入的补丁(来源:图片来自原始论文)

图4.位置嵌入作为向量表示(来源:作者创建的图像)

映像修补程序是小映像(16*16 像素)。这在某种程度上需要以一种变压器理解它的方式馈送。一种方法是将图像展开为 16*16 = 256 维向量。然而,该论文的作者使用了线性投影。这意味着有一个矩阵,表示为“E”(嵌入)。获取单个补丁并首先解卷成线性向量。然后将该向量与嵌入矩阵 E 相乘。然后将最终结果与位置嵌入一起馈送到变压器。

然后将所有补丁(线性投影)及其单独的位置嵌入送入变压器编码器。该变压器是标准的变压器架构(您只需要注意 - 纸)。

还有一个额外的可学习嵌入,标记为位置零,如图 5 所示。此嵌入的输出用于最终对整个图像进行分类。

图5.整个ViT架构,带有额外的可学习嵌入 - 用红色标记,最左边的嵌入(来源:原始论文的图片)

三、结果

        表1显示了ViT与各种数据集上最先进的CNN架构的结果比较。ViT是在JFT-300数据集上进行预训练的。下面的结果表明,在所有数据集上,ViT的表现都优于基于ResNet的架构和EfficentNet-L2架构(在嘈杂的学生权重上预训练)。这两种模型都是当前最先进的CNN架构。在表1中,ViT-H指的是ViT-Huge(32层),ViT-L指的是ViT-Large(24层)。ViT-H/L 后面的数字 14 和 16 表示从每个图像创建的补丁大小(14*14 或 16*16)。

该表还显示,与其他 2 个 CNN 模型相比,ViT 需要的计算资源要少得多。

表 1.ViT结果与各种图像数据集上其他CNN架构的比较(来源:原始论文中的表格)

图6显示了变压器在对各种图像进行分类时给予的注意。

图6:从输出标记到输入空间的注意力机制(来源:原始论文图片)

四、结论

4.1 视觉变压器是否会在计算机视觉任务中取代CNN?

        到目前为止,CNN已经在计算机视觉任务中占据主导地位。图像基于这样的想法,即一个像素依赖于其相邻像素,下一个像素依赖于其相邻像素(颜色、亮度、对比度等)。CNN对这个想法的研究,并在图像的补丁上使用过滤器来提取重要的特征和边缘。这有助于模型仅从图像中学习必要的重要特征,而不是图像每个像素的细节。

        但是,如果将整个图像数据馈送到模型中,而不仅仅是过滤器可以提取的部分(或它认为重要的部分),则模型表现更好的机会更高。这正是视觉转换器内部正在发生的事情。这可能是在这种情况下,视觉变压器比大多数CNN型号工作得更好的原因之一。

4.2 但这是否意味着变压器将来将在计算机视觉任务中取代CNN?

        好吧,答案是,不会那么快。就在几天前,EfficientNet V2型号发布,其性能甚至比Vision Transformers更好。这只是意味着,现在我们可以期待来自两种类型(CNN和变形金刚)的新架构将在不久的将来推出更新,更好,更高效的模型。

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

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

相关文章

vue3 基础知识 01

加油! 😘 文章目录 一、vue3 带来的变化(源码)二、vue3 带来的变化(性能)三、vue3 带来的变化(新的API)四、声明式 和 命令式五、template六、data七、methods 一、vue3 带来的变化&…

Practices9(双指针)|283. 移动零、11. 盛最多水的容器、15. 三数之和

283. 移动零 1.题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,…

chrome、edge、Firefox关闭音量提醒控件显示

文章目录 1. Chrome2. edge3. firefox 1. Chrome 在地址栏输入: chrome://flags/#hardware-media-key-handling 将Hardware Media Key Handling的状态设为Disabled 2. edge 在地址栏输入 edge://flags/#hardware-media-key-handling 将Hardware Media Key Handling的状态…

第二十三章 原理篇:Pix2Seq

大夏天我好像二阳了真是要命啊。 现在找到工作了,感觉很快乐,但是也有了压力。 《论你靠吹牛混进公司后该怎么熬过试用期》 希望自己能保持学习的习惯!加油! 参考教程: https://arxiv.org/pdf/2109.10852.pdf https://…

高级进阶多线程——多任务处理、线程状态(生命周期)、三种创建多线程的方式

Java多线程 Java中的多线程是一个同时执行多个线程的进程。线程是一个轻量级的子进程,是最小的处理单元。多进程和多线程都用于实现多任务处理。 但是,一般使用多线程而不是多进程,这是因为线程使用共享内存区域。它们不分配单独的内存区域…

Nginx负载均衡以及keepalived高可用实验

Vip 10.1.122 Keepalived-master 10.1.1.132Keepalied-backup 10.1.1.133Realserver_1 10.1.1.136Realserver_2 10.1.1.137 四台机器上安装nginx,编译安装的话需要另外安装pcre包支持,安装在/usr/local/nginx Keepalived-master 和backu…

【网络编程·网络层】IP协议

目录 一、IP协议的概念 二、IP协议的报头 1、四位首部长度 2、16位总长度(解包) 3、8位协议(分用) 4、16位首部校验和 5、8位生存时间 6、32位源IP和32位目的IP 7、4位版本/8位服务类型 8、16位标识 9、3位标志 10、1…

go练习 day02

go中使用mongodb实现增删改查 连接mongodb yaml配置 mongodb:uri: mongodb://localhost:27017初始化连接 package confimport ("context""fmt""time""github.com/spf13/viper""go.mongodb.org/mongo-driver/mongo""…

基于kettle实现pg数据定时转存mongodb

mogodb 待创建 基于kettle实现pg数据定时转存mongodb_kettle 实时迁移 mongodb_呆呆的私房菜的博客-CSDN博客

MFC29-30天 补充中间遇到的一些小问题

宏定义中的#和##的含义&#xff1a; #include <Windows.h> #include <tchar.h> #include <iostream> #define Test(x,y) x##y //自动连接 xy #define T2(x) #x //自动转为字符串 "x"int main() {auto p Test(Message, Box);(*p)(NULL, _T(T2(Hel…

SQLSTATE[42000]: this is incompatible with sql_mode=only_full_group_by in

执行 SELECT *FROM test WHERE id>1 GROUP BY name having AVG(age)>10 ORDER BY id desc limit 1 提示错误 Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause…

C# winform 布局操作组件介绍

Winform布局 布局的2个属性 Anchor:锁定位置 Dock&#xff1a;填充位置 一般Dock是与容器控件配合使用 布局的一些控件 TableLayoutPanel&#xff1a;表格容器 每个表格只能放一个控件 要放置多个时可以在每个表格里面添加一个Panel&#xff08;也可以是其他的容器&#x…

git一次错误merge的回滚

场景&#xff1a;提交到sit的代码&#xff0c;结果解决冲突merge了DEV的代码&#xff0c;所以要回滚到合并之前的代码 &#xff08;原因是我再网页上处理了冲突&#xff0c;他就自动merge了,如图—所以还是idea处理冲突&#xff0c;可控&#xff09; 方式二&#xff1a; &…

✅最新!自然指数中国科研机构百强名单,出炉!

【SciencePub学术】8 月 9 日&#xff0c;自然指数官网发布了最新的中国科研机构百强名单。名单根据各大机构2022年在自然科学领域的论文贡献份额进行排名。 其中&#xff0c;中国科学院以2053.76的论文贡献份额&#xff0c;位列榜首&#xff1b;中国科学院大学和中国科学技术…

PAT1044 Shopping in Mars

个人学习记录&#xff0c;代码难免不尽人意。 做了这么多题难得本题不看答案一遍过&#xff0c;很是激动。 Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diamond has a value (in Mars dollars M$). When making the pa…

c++ | win vscode

vscode 适合新手做一些简单的单个的编译和调试 新手适合去配置c 环境&#xff0c;尤其是当涉及复杂一点的编程&#xff0c;如多文件、多线程&#xff0c;在调试的时候会头大&#xff0c;要求会高一点 但怎么说呢&#xff1f; c 编译和调试是最接近实际开发环境的&#xff0c;与…

06-2_Qt 5.9 C++开发指南_自定义对话框及其调用

本篇介绍到的对话框及其调用实例较为复杂但十分详细&#xff0c;如果做了解可以先参考&#xff1a;QT从入门到实战x篇_13_模态和非模态对话框创建。 文章目录 1. 对话框的不同调用方式2. 对话框QWDialogSize 的创建和使用2.1 创建对话框QWDialogSize2.2 对话框的调用和返回值 …

css内容达到最底部但滚动条没有滚动到底部

也是犯了一个傻狗一样的错误 &#xff0c;滚动条样式是直接复制的蓝湖的代码&#xff0c;有个高度&#xff0c;然后就出现了这样的bug 看了好久一直以为是布局或者overflow的问题&#xff0c;最后发现是因为我给这个滚动条加了个高度&#xff0c;我也是傻狗一样的&#xff0c;…

Vuex 使用教程

Vuex 各子模块的内部结构及作用 这是vuex的内部代码结构&#xff0c;所有的子模块都是一样的 state&#xff1a;存放数据状态&#xff1b; action&#xff1a;指派 mutation &#xff1b; mutation&#xff1a;修改state里面的状态&#xff1b; getter&#xff1a;侧重于对数据…

Mongodb:业务应用(2)

需求&#xff1a; 1、获取保存到mongodb库中的搜索记录列表 2、实现删除搜索记录接口 保存搜索记录数据参考上篇Mongodb&#xff1a;业务应用&#xff08;1&#xff09;_Success___的博客-CSDN博客 获取记录列表 1、创建controller package com.heima.search.controller.v1;…