图像识别中的 Vision Transformers (ViT)

引言

Vision Transformers (ViT) 最近已成为卷积神经网络(CNN) 的竞争替代品,而卷积神经网络 (CNN) 目前在不同的图像识别计算机视觉任务中处于最先进的水平。ViT 模型在计算效率和准确性方面比当前最先进的 (CNN) 模型高出近 4 倍。

Transformer 模型已成为自然语言处理 (NLP) 领域事实上的SOTA。例如,流行的 ChatGPT AI 聊天机器人就是基于 Transformer 的语言模型。具体来说,它基于 GPT(生成式预训练Transformer)架构,该架构使用自注意力机制来对文本中单词之间的依赖关系进行建模。 在计算机视觉研究中,最近人们对Vision Transformers (ViT) 和多层感知机 (MLP)的兴趣日益浓厚。

本文将涵盖以下主题:

  • 什么是Vision Transformers (ViT)?
  • 在图像识别中使用 ViT 模型
  • Vision Transformers如何工作?
  • Vision Transformer 的用例和应用

图像识别中的 Vision Transformer (ViT)

虽然 Transformer 架构已成为涉及自然语言处理 (NLP)的任务的事实基准,但其与计算机视觉 (CV)相关的用例仍然很少。在许多计算机视觉任务中,注意力要么与卷积网络(CNN)结合使用,要么用于替代卷积网络的某些方面,同时保持其整个组成完整。流行的图像识别算法包括ResNet、VGG、YOLOv3、YOLOv7或YOLOv8以及Segment Anything (SAM)。下图展示了广泛流行的CNN结构:
在这里插入图片描述
然而,这种对 CNN 的依赖不是强制性的,直接应用于图像块序列的纯 Transformer 可以在图像分类任务上表现得非常好。

Vision Transformers在CV中的性能

Vision Transformers (ViT)最近在 图像分类、目标检测和语义分割等多种计算机视觉应用的基准测试中取得了极具竞争力的性能。 CSWin Transformer是一个高效且有效的基于 Transformer 的主干网,用于通用视觉任务。它使用一种名为“十字形窗口自注意力”的新技术来同时分析图像的不同部分,从而使其速度更快。 CSWin Transformer 超越了 Swin Transformer 等之前最先进的方法。在基准任务中,CSWIN取得了优异的性能,包括在ImageNet-1K上达到85.4%的Top-1准确率,在COCO检测任务上达到53.9 box AP和46.4 mask AP,在ADE20K语义分割任务上达到52.2 mIOU。下图展示了CV中的分割应用:
在这里插入图片描述

什么是Vision Transformers?

在 ICLR 2021 上作为会议论文发表的一篇研究论文中介绍了 Vision Transformer (ViT) 模型架构,题为“An Image is Worth 16*16 Words: Transformers for Image Recognition at Scale”。它由 Neil Houlsby、Alexey Dosovitskiy 以及Google 研究大脑团队的另外 10 位作者开发和发布。 微调代码 和预训练的ViT模型可在 Google 研究团队的 GitHub 上获取。 你可以在这里找到它们。ViT 模型在 ImageNet 和 ImageNet-21k 数据集上进行了预训练。

Vision Transformers模型的起源和历史

下面,我们重点介绍多年来开发的一些最重要的Vision Transformers。它们基于 Transformer 架构,该架构最初于 2017 年提出用于自然语言处理 (NLP)。

在这里插入图片描述

Transformer 是一种深度学习方法吗?

机器学习中的Transformer是一种深度学习模型,它使用注意力机制,对输入数据序列的每个部分的重要性进行不同的权衡。机器学习中的 Transformer 由多个自注意力层组成。它们主要用于自然语言处理(NLP)和计算机视觉(CV)的人工智能子领域。 机器学习中的Transformer有很大潜力成为可应用于各种数据模态的通用学习方法,包括计算机视觉领域最近取得的突破,以更好的参数效率实现了最先进的标准精度。

Vision Transformers和图像分类

图像分类是计算机视觉中的一项基本任务,涉及根据图像的内容为其分配标签。多年来,像YOLOv7这样的深度卷积神经网络 (CNN)一直是最先进的图像分类方法。 然而,Transformer架构的最新进展最初是为自然语言处理(NLP)而引入的,在图像分类任务中取得有竞争力的结果显示出了巨大的希望。下图展示了医疗图像分类的一个具体应用:
在这里插入图片描述
CrossViT就是一个例子,它是一种用于图像分类的交叉注意力ViT。计算机视觉研究表明,当使用足够多的数据进行预训练时,ViT 模型至少与ResNet 模型一样稳健。 其他论文表明,Vision Transformer 模型在保护隐私的图像分类方面具有巨大潜力,并且在抵御攻击的鲁棒性和分类准确性方面优于最先进的方法。

CNN 和 ViT 的区别(ViT vs. CNN)

与卷积神经网络 (CNN) 相比,Vision Transformer (ViT) 取得了显著的效果,同时需要的预训练计算资源要少得多。与 卷积神经网络 (CNN)相比,Vision Transformer (ViT) 通常表现出较弱的归纳偏差,导致 在较小数据集上训练时对模型正则化或数据增强(AugReg)的依赖增加。 ViT 是一种基于Transformer架构的视觉模型,最初是为基于文本的任务而设计的。ViT 模型将输入图像表示为一系列图像块,就像使用Transformer处理文本时使用的一系列词嵌入一样,并直接预测图像的类标签。当使用足够的数据进行训练时,ViT 表现出非凡的性能,以减少 4 倍的计算资源打破了类似的最先进 CNN 的性能。下图展示了CNN vs ViT 的FLOPs和吞吐量:
在这里插入图片描述
这些 Transformer 在 NLP 模型方面具有很高的成功率,现在也应用于图像识别任务。CNN 使用像素数组,而 ViT 将输入图像切分成视觉tokens。ViT将图像划分为固定大小的块,正确地嵌入每个块,并将位置嵌入作为Transformer编码器的输入。此外,在计算效率和准确性方面,ViT 模型的性能比 CNN 高出近四倍。

ViT 中的自注意力层使得在整个图像中全局嵌入信息成为可能。该模型还学习训练数据来对图像块的相对位置进行编码,以重建图像的结构。

ViT包括以下内容:

  • 多头自注意力层(MSP):该层将所有注意力输出线性连接到正确的维度。许多注意力头有助于训练图像中的局部和全局依赖性。
  • 多层感知器 (MLP) 层:该层包含具有高斯误差线性单元 (GELU) 的两层。
  • 层范数 (LN):这是在每个块之前添加的,因为它不包含训练图像之间的任何新依赖关系。这有助于提高训练时间和整体表现。

此外,每个块之后都包含残差连接,因为它们允许组件直接流过网络,而无需经过非线性激活。 在图像分类的情况下,MLP 层实现分类头。它在预训练时使用一个隐藏层,并使用一个线性层进行微调。

什么是 Vision Transformer 的 self-attention?

自注意力机制是 Transformer 架构的关键组成部分,用于捕获输入数据中的远程依赖关系和上下文信息。自注意力机制允许 ViT 模型根据输入数据与当前任务的相关性来关注输入数据的不同区域。

因此,自注意力机制计算输入数据的加权和,其中权重是根据输入特征之间的相似性计算的。这使得模型能够更加重视相关的输入特征,这有助于它捕获输入数据的更多信息表示。

因此,自注意力是一种计算原生语言,用于量化成对实体交互,帮助网络学习输入数据中存在的层次结构和对齐方式。事实证明,注意力是视觉网络实现更高鲁棒性的关键要素。下图展示了原始图像(左)和 ViT-S/16 模型的注意力图(右):
在这里插入图片描述

ViT 的注意力图是什么?

Vision Transformer (ViT) 的注意力图是表示输入图像的不同部分对模型学习表示的不同部分的重要性的矩阵。在 ViT 中,输入数据的整个图像首先被划分为不重叠的块,然后将其展平并输入到 Transformer 编码器中(更多关于下面的架构)。

注意力图是指在图像中的每个token(或块)与所有其他tokens之间计算的注意力权重的可视化。这些注意力图是使用自注意力机制计算的,其中每个token都会关注所有其他token以获得其表示的加权和。

注意力图可以可视化为热力图网格,其中每个热力图代表给定token和所有其他token之间的注意力权重。热力图中像素的颜色越亮,相应token之间的注意力权重就越高。通过分析注意力图,我们可以深入了解图像的哪些部分对于手头的分类任务最重要。下图展示了来自 ImageNet-A- Source的图像上 ViT 注意力图的可视化:
在这里插入图片描述

ViT 架构

文献中已经提出了几种ViT模型。Vision Transformer架构的整体结构包括以下步骤:

  • 将图像分割成patches(固定大小)
  • 展平图像patches
  • 从这些展平的图像块创建低维线性嵌入
  • 引入位置嵌入
  • 将序列作为输入提供给最先进的ViT
  • 使用图像标签预训练 ViT 模型,然后在大数据集上进行全面监督
  • 微调下游数据集以进行图像分类

下图展示了Vision Transformer 架构:
在这里插入图片描述
Vision Transformers (ViT) 是一种使用自注意力机制来处理图像的架构。Vision Transformer 架构由一系列Transformer blocks组成。每个Transformer block由两个子层组成:多头自注意力层和前馈层。

自注意力层根据图像中每个像素与所有其他像素的关系计算其注意力权重,而前馈层对自注意力层的输出应用非线性变换。多头注意力通过允许模型同时关注输入序列的不同部分来扩展这种机制。

ViT 还包括一个额外的patch嵌入层,它将图像划分为固定大小的patches,并将每个patch映射到高维向量表示。然后将这些patch嵌入馈送到Transformer blocks中以进行进一步处理。 ViT 架构的最终输出是类预测,通过将最后一个 Transformer 块的输出传递给分类头来获得,分类头通常由单个全连接层组成。下图展示了在 ImageNet 上从头开始训练时,Vision Transformers (ViT) 与ResNet和 MobileNet 的性能基准比较。
在这里插入图片描述

虽然 ViT full-transformer架构对于视觉处理任务来说是一个有潜力的选择,但当在 ImageNet 等中等规模的数据集上从头开始训练时,ViT 的性能仍然不如类似大小的 CNN 替代方案(例如ResNet )。总体而言,ViT 架构允许以更灵活、更高效的方式处理图像,而无需依赖预定义的手工特征。

ViT如何工作?

ViT模型的性能取决于优化器、网络深度和特定于数据集的超参数等决策。与 ViT 相比,CNN 更容易优化。 纯 Transformer 的不同之处在于将 Transformer 与 CNN 前端结合起来。通常的 ViT 词干利用 1616 卷积和 16 步长。相比之下,步幅为 2 的 33 卷积增加了稳定性并提高了精度。

CNN 将基本像素转换为特征图。随后,特征图被分词器转换为一系列分词,然后输入到Transformer中。然后,Transformer应用注意力技术来创建一系列输出token。 最终,一个projector将输出token重新连接到特征图。后者允许检查潜在的关键像素级细节。这从而减少了需要研究的token数量,从而显着降低了成本。

特别的,如果 ViT 模型在超过 1400 万张图像的庞大数据集上进行训练,它的性能可以超越 CNN。如果没有,最好的选择是坚持使用ResNet或 EfficientNet。

ViT模型甚至在微调过程之前就在巨大的数据集上进行了训练。唯一的变化是忽略 MLP 层并添加新的 D 倍 KD*K 层,其中 K 是小数据集的类数。 为了微调更好的分辨率,完成了预训练位置嵌入的 2D 表示。这是因为可训练的衬垫层对位置嵌入进行建模。

ViT的挑战

ViT面临很多挑战,其中包括与架构设计、泛化、鲁棒性、可解释性和效率相关的问题。 总的来说,Transformer 与 CNN 相比缺乏一些归纳偏差,并且严重依赖海量数据集进行大规模训练,这就是为什么数据质量显着影响 Transformer 在计算机视觉任务中的泛化性和鲁棒性。

虽然 ViT 在 VTAB 和 CIFAR 等下游图像分类任务上表现出出色的性能,但直接将 ViT 主干应用于目标检测未能超越 CNN 的结果。

此外,充分理解为什么 Transformer 在视觉任务上表现良好仍然是一个挑战。此外,开发可部署在资源有限设备上的高效计算机视觉Transformer模型是一个具有挑战性的问题。

真实世界 ViT 应用

ViT在流行的图像识别任务中有着广泛的应用,例如目标检测、分割、图像分类和动作识别。此外,ViT 还应用于生成建模和多模型任务,包括视觉基础、视觉问答和视觉推理。 视频预测和活动识别都是视频处理中需要ViT的部分。此外,图像增强、着色和图像超分辨率也使用ViT模型。最后但并非最不重要的一点是,ViT 在 3D 分析中有许多应用,例如分割和点云分类。下图展示了体育运动中图像分割的一个应用:
在这里插入图片描述

结论

ViT模型在计算机视觉中使用多头自注意力,不需要图像领域特定的bias。该模型将图像切分成一系列位置嵌入块,由Transformer编码器处理。 这样做是为了了解图像所具有的局部和全局特征。最后但并非最不重要的一点是,ViT 在大型数据集上具有更高的准确率,同时减少了训练时间。

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

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

相关文章

【Vulnhub 靶场】【Corrosion: 1】【简单】【20210731】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/corrosion-1,730/ 靶场下载:https://download.vulnhub.com/corrosion/Corrosion.ova 靶场难度:简单 发布日期:2021年07月31日 文件大小:7.8 GB 靶场作者&#xf…

【C++】bind绑定包装器全解(代码演示,例题演示)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Linux》…

5.OpenResty系列之深入理解(一)

本文基于Centos8进行实践,请读者自行安装OpenResty。 1. 内部调用 进入默认安装路径 cd /usr/local/openresty/nginx/conf vim nginx.conflocation /sum {# 只允许内部调用internal;content_by_lua_block {local args ngx.req.get_uri_args()ngx.print(tonumber…

java进阶学习笔记

学习java深度学习,提升编程思维,适合掌握基础知识的工作者学习 1.反射和代理1.1 概念介绍1.2应用场景1.3 反射-reflect1.3.1 获得类-Class1.3.2 获得类的字段-Field1.3.3 动态访问和修改对象实例的字段1.3.4 获得类方法-Method1.3.5 调用方法.invoke1.3.…

评论回复功能数据库设计

1. 评论的场景 类似csdn博客评论 2. 建表sql CREATE TABLE comment (id varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT id,parent_id varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 父级评论id(…

Kubernetes pod ip 暴露

1. k8s pod 和 service 网络暴露 借助 iptables 的路由转发功能,打通k8s集群内的pod和service网络,与外部网络联通 # 查看集群的 pod 网段和 service 网段 kubectl -n kube-system describe cm kubeadm-config networking:dnsDomain: cluster.localpod…

Vue2和Vue3组件间通信方式汇总(2)------$emit

组件间通信方式是前端必不可少的知识点,前端开发经常会遇到组件间通信的情况,而且也是前端开发面试常问的知识点之一。接下来开始组件间通信方式第二弹------$emit,并讲讲分别在Vue2、Vue3中的表现。 Vue2Vue3组件间通信方式汇总(1&#xff0…

JavaEE进阶学习:Spring MVC 程序开发

1.什么是 Spring MVC Spring Web MVC 是基于Servlet API 构建的原始 Web 框架,从一开始就包含在Spring 框架中。它的正式名称 “Spring Web MVC” 来自其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。 从上述定义我们可以得出两个关键信…

如何改善与 Next Paint (INP) 的交互

但谷歌也会关注访问者到达后你的网站体验有多好。 在过去的几年里,谷歌已经彻底改变了哪些页面体验信号被收集并用作排名因素。 在引入核心网络指标后,谷歌逐渐调整了它们的衡量方式,以便更好地反映真实的用户体验。 然而,随着…

Unity中获取时间戳、日期、时间、毫秒、秒以相互转换、自定义格式时间

Unity中获取时间戳、日期、时间、毫秒、秒以相互转换、自定义格式时间 介绍时间戳是什么什么时候用时间戳 获取时间获取当前时间获取时间戳日期转时间戳时间戳转日期将时间戳转换为多久之前星期自定义格式时间 总结 介绍 这里附带一个时间戳和时间转换的网址 时间戳是什么 时…

【Spring实战】01 配置单数据源

文章目录 1. 定义2. 准备3. 打印连接信息4. 实战1)创建表2)添加数据3)查询数据3)执行 5. 详细代码总结 在我们常见的应用程序中,与数据库的交互是不可避免的一部分。Spring 提供了简单而强大的数据访问抽象&#xff0c…

九州金榜|家庭教育幼小衔接家长如何做?

孩子从幼儿园升入小学,很多家长会非常忧虑,进入小学便是孩子学校生涯正式开始,这个阶段作为家长会非常焦虑,会考虑孩子能不能适应小学生活?学习跟不跟得上,一般这个时候,大部分家长就会考虑给孩…

数值分析期末复习

第一章 科学计算 误差 解题步骤 先求绝对误差: ∣ x − x ∗ ∣ |x - x^*| ∣x−x∗∣求相对误差限: ∣ x − x ∗ ∣ x ∗ \frac{|x\,\,-\,\,x^*|}{x^*} x∗∣x−x∗∣​求有效数字 ∣ x − x ∗ ∣ 需要小于它自身的半个单位 |x-x^*|\text{需要小于它自身的半个单位} ∣…

Python入门学习篇(六)——for循环while循环

1 for循环 1.1 常规for循环 1.1.1 语法结构 for 变量名 in 可迭代对象:# 遍历对象时执行的代码 else:# 当for循环全部正常运行完(没有报错和执行break)后执行的代码1.1.2 示例代码 print("----->学生检查系统<------") student_lists["张三",&qu…

MLX vs MPS vs CUDA:苹果新机器学习框架的基准测试

如果你是一个Mac用户和一个深度学习爱好者&#xff0c;你可能希望在某些时候Mac可以处理一些重型模型。苹果刚刚发布了MLX&#xff0c;一个在苹果芯片上高效运行机器学习模型的框架。 最近在PyTorch 1.12中引入MPS后端已经是一个大胆的步骤&#xff0c;但随着MLX的宣布&#x…

在Excel中,如何简单快速地删除重复项,这里提供详细步骤

当你在Microsoft Excel中使用电子表格时&#xff0c;意外地复制了行&#xff0c;或者如果你正在制作其他几个电子表格的合成电子表格&#xff0c;你将遇到需要删除的重复行。这可能是一项非常无脑、重复、耗时的任务&#xff0c;但有几个技巧可以让它变得更简单。 删除重复项 …

Android Canvas画布saveLayer与对应restoreToCount,Kotlin

Android Canvas画布saveLayer与对应restoreToCount&#xff0c;Kotlin private fun mydraw() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.heigh…

【Win10安装Qt6.3】安装教程_保姆级

前言 Windows系统安装Qt4及Qt5.12之前版本和安装Qt.12之后及Qt6方法是不同的 &#xff1b;因为之前的版本提供的有安装包&#xff0c;直接一路点击Next就Ok了。但Qt5.12版本之后&#xff0c;Qt公司就不再提供安装包了&#xff0c;不论是社区版&#xff0c;专业版等&#xff0c…

并发控制工具类CountDownLatch、CyclicBarrier、Semaphore

并发控制工具类CountDownLatch、CyclicBarrier、Semaphore 1.CountDownLatch 可以使一个或多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 是多线程控制的一种工具&#xff0c;它被称为 门阀、 计数器或者闭锁。这个工具经常用来用来协调多个线程之间的同步&…

项目从vue2 升级vue3,项目大迁移 ,UI组件库更换

目录 背景描述 开发准备 第一步&#xff1a;升级环境 第二步&#xff1a;划分功能迁移顺序 第三步&#xff1a;详细了解需要迁移的业务页面 第四步&#xff1a;项目的一些配置的准备 详细开发流程 总结/分析&#xff1a; 背景描述 之前的版本&#xff1a;vue 2.6.8 i…