Transformer之Vision Transformer结构解读

news2024/12/25 9:03:16

论文地址
代码地址

写在前面

什么是Transformer呢?就是把符号向量化为Token, 再和位置编码求和或者做阿达玛积,最后送入一定层数的Attention Block构成的Encoder和Decoder,就完成了Transformer的基础功能。

  那么,把上述过程,用在图片上面,这就是Vision Transformer,简称ViT

ViT的特点

CNNTransformer
作用范围局部全局
作用频域低频高频
平移不变性强(有)弱(无)

正是因为CNN具有以上归纳偏置(这个词不好理解,比如说,一个孩子,第一次见到蛇被吓了一跳,日后遇到类似蛇的绳子,也会被吓一大跳,孩子对这个蛇状东西的认知,就是孩子的归纳偏置,这是一种方法论,而非具体的操作或者认知)的特点,所以在图像方面也就更适合,相对于Transformer,需要的数据相对就会少很多
  以上似乎说的是Transformer用于图像上会有很多缺点,那么就没有优点么?有的,

  • 对图像尺寸的处理更为灵活,不太需要类似CNN哪种dedicated design的卷积核、步长和padding设计,以满足output的尺寸要求;
  • 较强的并行计算能力,不需要类似CNN那样,以Kernel为一个窗口在图上滑动,一个个计算窗口中的卷积值(但这似乎也是个缺点,显然,CNN这样做一定是省计算资源的);
  • Transformer可以处理多模态任务,尤其是插入prompt之后,可以在一个网络模型中完成特征提取;
  • Transformer对全局特征的把握强于CNN(但是这好像也不算一个优点,对于尺度小的目标,就不行了,例如BEV视角中的目标普遍都很小,用ViT效果还是不如CNN);
  • Transformer对空间信息的利用会更高一点;

ViT的结构

在这里插入图片描述
ViT和Transformer的步骤是相同的,只不过对Token的处理上会有些许差异,具体如下:

  • 利用nn.Conv2d(kernel_size=patch_size, stride=patch_size),把图像按照patch_size切割成小块,然后用卷积进行DownSample
    在这里插入图片描述
  • 这里有一个 [ 256 , 256 , 3 ] [256, 256, 3] [256,256,3]的图片
  • 图片被切分成了 16 × 16 16 \times 16 16×16个小patch,每个patch内拥有 p a t c h _ s i z e = 16 × 16 patch\_size = 16\times 16 patch_size=16×16个像素
  • 送入nn.Conv2d(kernel_size=16, stride=16),把 p a t c h _ s i z e = 16 × 16 patch\_size = 16\times 16 patch_size=16×16卷成 p a t c h _ s i z e = 1 × 1 patch\_size = 1\times 1 patch_size=1×1
  • 经过Patch_embedding后,生成一个经过Conv下采样的 16 × 16 16\times 16 16×16个patch的Tokens
  • 生成位置编码Position-Embedding(PE)(详情参考Transformer之位置编码的通俗理解)
  • 上述两个步骤的结果相加,生成一个 [ B , H × W , C ] [B, H\times W, C] [B,H×W,C]的向量,作为后面Attention的输入
  • 将上述结果送入多层Transformer的Attention(详情参考Transformer之Attention的通俗理解),具体结构如下

在这里插入图片描述
如图所示,如果有12层这样的结构,那么这就是 V i T _ B a s e ViT\_Base ViT_Base,如果有24层,那么就是 V i T _ L a r g e ViT\_Large ViT_Large,一定要注意看别人代码中用的是哪一个ViT,因为对应的Pth预训练文件是不同的。

ViT的Pipeline

按照上面步骤,将ViT组装起来,就是ViT的pipeline

在这里插入图片描述

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

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

相关文章

关于模的问题

写代码的时候遇到模的问题 class Solution:def countCompleteDayPairs(self, hours: List[int]) -> int:ans 0t [0 for _ in range(24)]for h in hours:u (24-h%24)%24ans t[u]t[h%24] 1return ans如果写成 u (24-h%24) 是不对的,没有考虑h等于0的情况

【多任务YOLO】 A-YOLOM: You Only Look at Once for Real-Time and Generic Multi-Task

You Only Look at Once for Real-Time and Generic Multi-Task 论文链接:http://arxiv.org/abs/2310.01641 代码链接:https://github.com/JiayuanWang-JW/YOLOv8-multi-task 一、摘要 高精度、轻量级和实时响应性是实现自动驾驶的三个基本要求。本研究…

51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动TFT大屏_I2C_HW参考代码(v1.3) 硬件I2C方式

本篇介绍单片机使用硬件I2C方式控制RA8889驱动彩屏。 提供STC8H8K64U和STC8051U34K64的参考代码。 【硬件部份】STC8H8K64U/STC8051U34K64 RA8889开发板 7寸TFT 800x480 1. 实物连接图:STC8H8K64URA8889开发板,使用P2口I2C接口: 2.实物连…

怎样制作高品质的电子画册,一看就会

随着数字化进程的加速,电子画册以其便捷的传播方式、丰富的展现形式,越来越受到各类人士的青睐。一份高品质的电子画册,不仅需要有吸引人的内容,更需要有专业的制作技巧。下面,就让我来为您详细解析,如何制…

量子计划 Quark 捯饬

1 蓝牙 系统镜像中具有内置的蓝牙驱动程序,可以按照以下步骤启动蓝牙: bluetoothctl# 进入 bluetoothctl 界面后。运行scan扫描列出附近所有的蓝牙设备 scan on# 复制设备的MAC地址,然后使用以下命令连接到设备: pair A4:xx:xx:…

艺术与技术的交响曲:CSS绘图的艺术与实践

在前端开发的世界里,CSS(层叠样式表)作为网页布局和样式的基石,其功能早已超越了简单的颜色和间距设置。近年来,随着CSS3的普及,开发者们开始探索CSS在图形绘制方面的潜力,用纯粹的代码创造出令…

32_ConvNeXt网络详解

1.1 简介 ConvNeXt是一种计算机视觉模型,由Meta AI(前Facebook AI)的研究人员在2022年提出,它旨在探索卷积神经网络(CNN)在图像识别任务上的潜力,尤其是在与当时流行的Vision Transformer&…

【windows】【系统还原】亦是美kms执行一键关闭defender 之后,windows defender 被卸载了,无论如何都打不开

在那之后,你是否一直无法启动 defender??? 你是否一直担心电脑的安全问题?? 我也尝试了很多方法 无论是 powershell 执行 dism.exe /online /cleanup-image /scanhealth dism.exe /online /cleanup-ima…

【项目】星辰博客介绍

目录 一、项目背景 二、项目功能 1. 登录功能: 2. 列表页面: 3. 详情页面: 4. 写博客: 三、技术实现 四、功能页面展示 1. 用户登录 2. 博客列表页 3. 博客编辑更新页 4.博客发表页 5. 博客详情页 五.系统亮点 1.强…

c# 开发AutoCAD扩展

在C#中开发AutoCAD扩展涉及使用AutoCAD的.NET API, 利用AutoCAD的功能并创建自定义命令、对话框、块、图层和其他图形元素。以下是一些关键步骤和概念,可以帮助你开始使用C#开发AutoCAD扩展: 准备开发环境 安装AutoCAD:确保你有一…

图片转文档,和同行比我的优势在哪?

图片转Word/Excel | 极简AI工具箱,我自己做的这个在线工具。 图片转word,图片转excel这个功能,我认为还是有不小的需求的。百度上搜索,可以看到不少广告。说明有需求才会有这么多公司愿意花钱打广告。 我这里说的不是单纯的文字识…

CPU工作模式- 保护模式

保护模式 概述 随着软件的规模不断增加,需要更高的计算量、更大的内存容量内存一大,首先要解决的问题是寻址问题,因为16位的寄存器最好只能表示 2 16 2^{16} 216个地址,所以CPU的寄存器和运算单元都要扩展成32位虽然扩展CPU内部…

UDP详细总结

UDP协议特点 UDP是无连接的传输层协议; UDP使用尽最大努力交付,不保证可靠交付; UDP是面向报文的,对应用层交下来的报文,不合并,不拆分,保留原报文的边界; UDP没有拥塞控制&#…

ArrayList.subList的踩坑

需求描述&#xff1a;跳过list中的第一个元素&#xff0c;获取list中的其他元素 原始代码如下&#xff1a; List<FddxxEnterpriseVerify> companyList fddxxEnterpriseVerifyMapper.selectList(companyQueryWrapper);log.info("获取多个法大大公司数据量为&#…

【python 已解决】 ‘ValueError: invalid literal for int() with base 10’解决方案深度解析

【python 已解决】 ‘ValueError: invalid literal for int() with base 10’解决方案深度解析 在Python编程中&#xff0c;ValueError: invalid literal for int() with base 10是一个常见的错误&#xff0c;它通常表明在尝试将字符串转换为整数时&#xff0c;字符串中包含了无…

【开发踩坑】生僻字插入MySQL失败

背景 生产环境插入数据报错&#xff1a; java.sql.SQLException: Incorrect string value: \xF0\xAC\xB1\x96 for column answer at row 1设置answer字段值为 “&#x2cc56;”出现错误 生僻字设置出错&#xff1b; 排查 编码 查看库表属性&#xff1a; ENGINE InnoDB A…

【接口自动化_08课_Pytest+Yaml+Allure框架】

上节课一些内容 的补充 1、openxl这个方法&#xff0c;第一个元素是从1开始的&#xff0c;不是从0开始 回写的列在程序里写的是11&#xff0c;是因为是固定值 一、1. Yaml入门及应用 1、什么是yaml YAML&#xff08;/ˈjməl/&#xff0c;尾音类似camel骆驼&#xff09;是一…

springboot+vue+mybatis校园热点新闻系统+PPT+论文+讲解+售后

21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存储达到…

贪心算法(算法篇)

算法之贪心算法 贪心算法 概念&#xff1a; 贪心算法是一种思想&#xff0c;并不是一种算法&#xff0c;贪心算法是分阶段地工作&#xff0c;在每一个阶段&#xff0c;可以认为所作决定是好的&#xff0c;而不考虑将来地后果。算法的每个阶段总是选择当前阶段最优&#xff0…

ChatGPT成功背后的秘密——RLHF,北京大学NLP团队的论文详解来了

1、简介&#xff1a; 人工智能对齐(AIAlignment) 旨在使人工智能系统的行为与人类的意图和价值观相一致。随着人工智能系统的能力日益增强&#xff0c;对齐失败带来的风险也在不断增加。数百位人工智能专家和公众人物已经表达了对人工智能风险的担忧&#xff0c;他们认为“减轻…