【Transformer系列(5)】vision transformer(ViT)带来的思考?

一、ViT的意义

Vision Transformer(ViT)是一种基于Transformer架构的图像分类模型,它通过将图像划分为一系列的图像块(patches),并将这些块转换为向量序列,然后通过Transformer的自注意力机制对这些序列进行处理,最后通过全连接层进行分类。

与传统的卷积神经网络(CNN)相比,ViT的主要意义在于:
(1)消除了传统卷积神经网络对于图像尺寸的限制。传统的CNN需要固定大小的输入图像,而ViT可以处理任意尺寸的图像,将其划分为块并进行处理,大大提高了模型的灵活性。
(2)提供了一种新的处理序列数据的思路。Transformer最初是针对自然语言处理任务设计的,而ViT将其成功应用于图像分类任务,验证了Transformer在处理序列数据方面的广泛适用性。
(3)可以处理长程依赖关系。由于自注意力机制的存在,ViT可以捕捉图像中任意两个位置之间的关系,从而更好地处理长程依赖关系的问题,如目标检测、图像分割等任务。

因此,Vision Transformer的意义在于为图像分类任务带来了一种全新的模型架构,打破了传统的卷积神经网络对图像尺寸的限制,并且展示了Transformer在图像处理领域的潜力。它为研究人员提供了一种全新的思路,可以进一步探索Transformer模型在计算机视觉领域的应用。

二、使用Position Embedding实现了图像和文本的向量尺度统一

由于多头自注意力是针对NLP提出的,它的输入尺度为[batch size, num token , dim_token] ,而CV中图像输入尺度通常为[batch_size, num_channel, height, width]ViT通过Patch Embedding将其尺度转换至期望的形式。
说白了,就是CV中空间(height*width)对应NLP中的num_tokenCV中的通道num_channel对应NLP中的dim_token
在这里插入图片描述

如上图所示,假设一张图像的尺寸为[ 3 , 224 , 224 ],ViT会将其均分为多个Patch(上图是3 ∗ 3 = 9个,ViT结构图中是14 ∗ 14 = 196个),于是每个Patch的尺度为[ 3 , 16 , 16 ](16 = 224 ÷ 14)。对于每个PatchViT使用一层2D卷积进行特征提取可以得到尺度为[ 768 , 14 , 14 ]的特征(卷积核大小和步长均与Patch一致,输出通道数为768)。之后将[ 768 , 14 , 14 ]的特征转置为[ 14 , 14 , 768 ]的并将其展平即可得到[ 196 , 768 ]的特征。
此时转换完成,其中:
(1)196即为token的数量,对应文本输入尺度[batch size, num token , dim_token] 中的num_token
(2)768token的向量长度,对应文本输入尺度[batch size, num token , dim_token] 中的dim_token
如下图所示。
在这里插入图片描述

由于ViT处理的是分类任务,所以它参考BERT特地拼接上了一个大小为[ 1 , 768 ]Class token,于是现在token的大小变成[ 197 , 768 ]ViTClass token是一个初始化为0的可学习参数向量。通常Class token会被单独拿出来作为ViT提取出来的图像特征用于下游任务。

另外,ViT保留了Transformer中的位置编码(Position Embedding),它也是初始化为0的可学习参数,不过不是拼接而是加入,所以其大小为[ 197 , 768 ],与当前token的大小一致。

此时,所以token的准备完成,一个批次的图像转换为token后尺度是[batch_size, num_token, dim_token] (num_token=197, dim_token=768)

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

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

相关文章

某站戴师兄——Excel实战

1、设置下拉选项:数据——数据验证——设置 如下设置: 2、If、sumif、index、match综合应用: sumif(条件区域,条件,目标区域) sumifs(目标区域,条件区域1,条件1,条件区域2,条件2) …

[渗透利器]某大佬公开自用红队渗透工具

前言 看到群里大佬发的文章,公开了自用的工具,前来拜膜一下。 使用方式 该工具首先需要初始化数据库,Windows推荐使用PHP Study,搭建更方便。 修改默认root密码后新建数据库,账号密码随便填,公网环境注意…

知识库工具:付费的HelpLook AI知识库比免费的牵牛易帮好在哪里

在知识管理的领域中,选择合适的知识库工具对于企业来说很重要。市面上有很多知识库产品,有付费的和免费的,但是还是有很多企业会选择使用付费的,而不是免费的。这是为什么呢?这就是今天要探讨的问题,下面就…

【自用】了解移动存储卡的基本信息

前言 本文是看B站视频做的一个简单笔记,方便日后自己快速回顾,内容主要介绍了存储卡基本参数,了解卡面上的数字、图标代表的含义。对于日后如何挑选判断一张存储卡的好坏、判别一张存储卡是否合格有一定帮助。 视频参考链接:【硬…

spring ioc 容器加载过程 refresh() 方法详解

IOC 加载过程 从 new ClassPathXmlApplicationContext开始 ApplicationContext context new ClassPathXmlApplicationContext("classpath:application.xml");ClassPathXmlApplicationContext类构造方法 public ClassPathXmlApplicationContext(String[] configLo…

Docker重启容器失败

Bug描述 [rootVM-12-15-centos ~]# docker restart ca1008fbdf25 Error response from daemon: Cannot restart container ca1008fbdf25: driver failed programming external connectivity on endpoint nginx_java (aded2fc7cbfa784b2e6a39e08d3ae2e7d00c13af88879a8fe7c5007…

飞腾E2000运行Zephyr操作系统

Phytium-Zephyr-SDK 1. 仓库介绍 1.1 本仓库特色 此项目是一个开源软件,专为物联网领域设计,基于Zephyr实时操作系统,针对Phytium系列CPU进行了专门的适配和应用开发。我们的目标是降低开发者的使用门槛,提供了部署文档和使用指…

Java毕设之学院党员管理系统的设计与实现

运行环境 环境说明: 开发语言:java 框架:springboot,vue JDK版本:JDK1.8 数据库:mysql5.7(推荐5.7,8.0也可以) 数据库工具:Navicat11 开发软件:idea/eclipse(推荐idea) Maven包:Maven3.3.9 系统实现 管理员功能实现 党员管理 管理员进入指定功能操作…

hadoop学习---基于hive的数仓搭建增量信息拉链表的实现

拉链表就是SCD2,它的优点是即满足了反应数据的历史状态,又能在最大程度上节省存储。 拉链表的实现需要在原始字段基础上增加两个新字段: start_time(表示该条记录的生命周期开始时间——周期快照时的状态)end_time(该条记录的生命周期结束时…

1.python爬虫爬取视频网站的视频可下载的源url

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、爬取的源网站二、实现代码总结 一、爬取的源网站 http://www.lzizy9.com/ 在这里以电影片栏下的动作片为例来爬取。 可以看到视频有多页,因此需要…

性能优化 | el-table中内嵌大量el-input控件导致渲染卡顿的问题

场景 项目中有一个应用场景,用户需要在表单中大量使用选择框以及输入框填写数据(每一行大概有三十几个输入框),当选择框与输入框达到一定数量的时候,页面会出现输入不连续、卡顿的现象,如下图:…

c++笔记——概述运算符重载——解析运算符重载的难点

前言:运算符重载是面向对象的一个重要的知识点。我们都知道内置类型可以进行一般的运算符的运算。但是如果是一个自定义类型, 这些运算符就无法使用了。那么为了解决这个问题, 我们的祖师爷就在c中添加了运算符重载的概念。 本篇主要通过实例的实现来讲述…