变形金刚在图像识别方面比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和变形金刚)的新架构将在不久的将来推出更新,更好,更高效的模型。
相关文章:

变形金刚在图像识别方面比CNN更好吗?
链接到文 — https://arxiv.org/pdf/2010.11929.pdf 一、说明 如今,在自然语言处理(NLP)任务中,转换器已成为goto架构(例如BERT,GPT-3等)。另一方面,变压器在计算机视觉任务中的使用…...
【Javascript】ES6新增之类的认识
在现代编程语言中,类是面向对象编程范式中的核心概念之一。 与函数类似,类本质上是一种特殊的函数,它允许我们将数据和操作封装在一起,以创建具有共同行为和状态的对象。 在类的世界里,我们有类表达式和类声明…...

C#随机法 双峰函数 求极值 避免落入局部最优解
避免落入局部最优解,只要让步长够长即可。 x1 resultX1 random1.NextDouble()*100; 如果后面不乘以100,则很大概率落入负数的最大值 Random random1 new Random(DateTime.Now.Millisecond);double x1 0, resultX10,max-999999,maxTemp0;for (int i …...
JavaScript高级:常见设计模式
设计模式是在软件开发中重复出现的问题的解决方案,它们是经过验证的、被广泛接受的最佳实践。设计模式可以让我们避免重复造轮子,提高代码质量和可维护性。在本文中,我们将介绍几种常见的设计模式,以及它们的实现和应用。 1. 单例…...
32bit国产低功耗无线MCU芯片
超低功耗无线MCU芯片MS1642,集成了高性能的32位ARMCortex-M0内核,宽电压工作范围的MCU。嵌入高达64Kbytes高可靠Flash和8Kbytes SRAM存储器,最高工作频率32MHz。芯片集成多路I2C、USART等通讯外设,1路12bit ADC,5个16b…...

scope组件穿透
今天我们以单选框为例来探究一下样式的穿透问题 1.代码 <template><div class""><el-radio v-model"radio" label"1">备选项</el-radio><el-radio v-model"radio" label"2">备选项</el-r…...
分类预测 | Python实现LR逻辑回归多输入分类预测
分类预测 | Python实现LR逻辑回归多输入分类预测 目录 分类预测 | Python实现LR逻辑回归多输入分类预测基本介绍模型描述源码设计学习小结参考资料基本介绍 逻辑回归是一种广义线性的分类模型且其模型结构可以视为单层的神经网络,由一层输入层、一层仅带有一个sigmoid激活函数…...
【微信小程序】通过使用 wx.navigateTo方法进行页面跳转,跳转后的页面中通过一些方式回传值给原页面
以下是几种常见的回传值的方式: 使用 wx.navigateTo 方法传递参数: 在跳转时,可以在目标页面的 URL 中携带参数,然后在目标页面的 onLoad 方法中获取参数,并在目标页面中进行处理。例如: // 原页面跳转到目…...

DIP: Spectral Bias of DIP 频谱偏置解释DIP
On Measuring and Controlling the Spectral Bias of the Deep Image Prior 文章目录 On Measuring and Controlling the Spectral Bias of the Deep Image Prior1. 方法原理1.1 动机1.2 相关概念1.3 方法原理频带一致度量与网络退化谱偏移和网络结构的关系Lipschitz-controlle…...

【考研数学】概率论与梳理统计 | 第一章——随机事件与概率(1)
文章目录 一、随机试验与随机事件1.1 随机试验1.2 样本空间1.3 随机事件 二、事件的运算与关系2.1 事件的运算2.2 事件的关系2.3 事件运算的性质 三、概率的公理化定义与概率的基本性质3.1 概率的公理化定义3.2 概率的基本性质 写在最后 一、随机试验与随机事件 1.1 随机试验 …...

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

word横向页面侧面页码设置及转pdf后横线变竖线的解决方案
在处理材料的时候,会遇到同一个文档里自某一页开始,页面布局是横向的,这时候页码要设置在侧面,方法是双击页脚,然后在word工具栏上选择“插入”——>“文本框”——>“绘制竖版文本框”,然后在页面左…...
华为OD机试 - 字符串划分(Java JS Python)
题目描述 给定一个小写字母组成的字符串 s,请找出字符串中两个不同位置的字符作为分割点,使得字符串分成三个连续子串且子串权重相等,注意子串不包含分割点。 若能找到满足条件的两个分割点,请输出这两个分割点在字符串中的位置下标,若不能找到满足条件的分割点请返回0,…...

使用 `nmcli` 在 CentOS 8 上添加永久路由
CentOS 8 使用 NetworkManager 作为默认的网络管理工具,因此我们可以使用 nmcli 工具来实现相同的目标。使用 nmcli 可以更加直观地管理路由,并且更符合 CentOS 8 的默认网络管理方式。 以下是使用 nmcli 在 CentOS 8 上添加永久路由的步骤:…...
Java基础五之for循环小练习
加油,新时代大工人! 一、Java基础之算术运算符 二、Java基础之类型转换 三、Java基础之【字符串操作以及自增自减操作】 四、Java基础之赋值运算符和关系运算符 package base;import java.io.InputStream; import java.util.Scanner;/*** author wh* date 2023年08…...
解决 Python RabbitMQ/Pika 报错:pop from an empty deque
使用 python 的 pika 包连接rabbitmq,代码如下: import pika import threading import timedef on_message(channel, method_frame, header_frame, body):print(fon_message thread id: {threading.get_ident()})delivery_tag method_frame.delivery_t…...

观察者模式实战
场景 假设创建订单后需要发短信、发邮件等其它的操作,放在业务逻辑会使代码非常臃肿,可以使用观察者模式优化代码 代码实现 自定义一个事件 发送邮件 发送短信 最后再创建订单的业务逻辑进行监听,创建订单 假设后面还需要做其它的…...

035_小驰私房菜_Qualcomm账号注册以及提case流程
全网最具价值的Android Camera开发学习系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 一、账号注册 1)登陆高通网站Wireless Technology & Innovation | Mobile Technology | Qualcomm, 采用…...

uniapp input输入框placeholder文本右对齐
input输入框placeholder文本右对齐 给input标签加上placeholder-class,这个是给placeholder设置样式,右对齐这就是text-align:right;字体颜色之类依次编辑即可。...

分布式监控平台—zabbix
前言一、zabbix概述1.1 什么是zabbix1.2 zabbix的监控原理1.3 zabbix常见五个应用程序1.4 zabbix的监控模式1.5 监控架构1.5.1 C/S(server—client)1.5.2 server—proxy—client1.5.3 master—node—client 二、部署zabbix2.1 部署 zabbix server 端2.2 …...

学习数字孪生,为你的职业发展开辟新赛道
你有没有想过,未来十年哪些技能最吃香? AI、大数据、智能制造、元宇宙……这些词频繁出现在招聘市场和行业报告中。而在它们背后,隐藏着一个“看不见但无处不在”的关键技术——数字孪生(Digital Twin)。 它不仅在制造…...

Kafka入门-消费者
消费者 Kafka消费方式:采用pull(拉)的方式,消费者从broker中主动拉去数据。使用pull的好处就是消费者可以根据自身需求,进行拉取数据,但是坏处就是如果Kafka没有数据,那么消费者可能会陷入循环…...

C++11 Move Constructors and Move Assignment Operators 从入门到精通
文章目录 一、引言二、基本概念2.1 右值引用(Rvalue References)2.2 移动语义(Move Semantics) 三、移动构造函数(Move Constructors)3.1 定义和语法3.2 示例代码3.3 使用场景 四、移动赋值运算符ÿ…...
平滑技术(数据处理,持续更新...)
一.介绍 “平滑”是一种用于减少数据中的短期波动、噪声或者异常值的技术,从而更清晰地揭示数据的长期趋势或周期性特征。 平滑的主要作用: 1.减少噪声。数据中常常包含各种随机噪声或误差,这些误差可能会掩盖数据的真实趋势。平滑可以降低…...
Python训练营打卡Day46(2025.6.6)
知识点回顾: 不同CNN层的特征图:不同通道的特征图什么是注意力:注意力家族,类似于动物园,都是不同的模块,好不好试了才知道。通道注意力:模型的定义和插入的位置通道注意力后的特征图和热力图 i…...
业态即战场:零售平台的生意模型与系统设计解构
目录 一、当我们在电商买菜、点外卖时,其实是零售业态在进化 (一)从“商场选货”到“算法推货”:零售的时代已经不同 (二)“控货”和“卖场”——零售的两种基本商业模式 二、四种经典零售业态解析:控货 vs 卖场,地面 vs 线上 (一)地面控货零售:直营模式的黄金…...

【数据结构】_排序
【本节目标】 排序的概念及其运用常见排序算法的实现排序算法复杂度及稳定性分析 1.排序的概念及其运用 1.1排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 1.2特性…...

【Python 算法零基础 4.排序 ⑨ 堆排序】
目录 一、问题描述 二、算法对比 1.朴素算法 ① 数组模拟容器 ② 有序数组模拟容器 2.二叉堆 ① 二叉堆特点 ② 数组表示二叉树 ③ 堆 ④ 大顶堆 ⑤ 小顶堆 ⑥ 元素插入 ⑦ 获取堆顶 ⑧ 堆顶元素删除 三、代码分析 1.工具函数 2.调整大顶堆函数 Ⅰ、计算子节点索引 Ⅱ、找出最…...

浅聊一下,大模型应用架构 | 工程研发的算法修养系列(二)
大模型应用架构基础 AI应用演进概述 人工智能应用的发展经历了多个关键阶段,每个阶段都代表着技术范式的重大转变。 大语言模型基础 大语言模型(LLM)作为现代AI应用的核心组件,具有独特的技术特性和能力边界,理解这些基础对架构设计至关重要。…...

明基编程显示器终于有优惠了,程序员快来,错过等一年!
最近618的活动已经陆续开始了,好多人说这是买数码产品的好时候,作为一名资深程序员,我做了不少功课,决定给自己升级办公设备,入手明基 RD 系列的显示器,这是市面上首家专注于我们程序员痛点和需求的产品&am…...