【深度学习】Vision Transformer

一、Vision Transformer

Vision Transformer (ViT)将Transformer应用在了CV领域。在学习它之前,需要了解ResNet、LayerNorm、Multi-Head Self-Attention。

ViT的结构图如下:

如图所示,ViT主要包括Embedding、Encoder、Head三大部分。Class token、Position Embedding、Extract Class Token等部分会按照顺序穿插讲解。

1. Patch Embedding

由于多头自注意力是针对NLP提出的,它的输入尺度为 [ b a t c h _ s i z e , n u m _ t o k e n , d i m _ t o k e n ] [batch\_size,num\_token,dim\_token] [batch_size,num_token,dim_token],而CV中图像输入尺度通常为 [ b a t c h _ s i z e , n u m _ c h a n n e l , h e i g h t , w i d t h ] [batch\_size, num\_channel,height,width] [batch_size,num_channel,height,width],ViT通过Patch Embedding将其尺度转换至期望的形式。

如上图所示,假设一张图像的尺寸为 [ 3 , 224 , 224 ] [3,224,224] [3,224,224],ViT会将其均分为多个Patch(上图是 3 ∗ 3 = 9 3*3=9 33=9个,结构图中是 14 ∗ 14 = 196 14*14=196 1414=196个),于是每个Patch的尺度为 [ 3 , 16 , 16 ] [3,16,16] [3,16,16] 16 = 224 ÷ 14 16=224\div14 16=224÷14)。对于每个Patch,ViT使用一层2D卷积进行特征提取可以得到尺度为 [ 768 , 14 , 14 ] [768,14,14] [768,14,14]的特征(卷积核大小和步长均与Patch一致,输出通道数为768)。

之后将 [ 768 , 14 , 14 ] [768,14,14] [768,14,14]的特征转置为 [ 14 , 14 , 768 ] [14,14,768] [14,14,768]的并将其展平即可得到 [ 196 , 768 ] [196,768] [196,768]的特征,此时转换完成,196即为token的数量,768为token的向量长度。

由于ViT处理的是分类任务,所以它参考BERT特地拼接上了一个大小为 [ 1 , 768 ] [1,768] [1,768]Class token,于是现在token的大小变成 [ 197 , 768 ] [197,768] [197,768]。ViT中Class token是一个初始化为0的可学习参数向量。通常Class token会被单独拿出来作为ViT提取出来的图像特征用于下游任务,例如,ViT中跟了一个分类头进行分类,广义类发现中GCD、OpenCon等方法直接使用该特征进行半监督聚类。

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

此时,所以token的准备完成,一个批次的图像转换为token后尺度是 [ b a t c h _ s i z e , n u m _ t o k e n , d i m _ t o k e n ] [batch\_size,num\_token,dim\_token] [batch_size,num_token,dim_token] n u m _ t o k e n = 197 , d i m _ t o k e n = 768 ] num\_token=197,dim\_token=768] num_token=197,dim_token=768])。

2. Transformer Encoder

该部分是ViT进行特征提取的主体部分,包括多个下图中的Encoder Block,例如ViT-B/16中有12个,ViT-L/16中有24个:

可以看出,除残差结构、Layer Norm、DropPath外,关键模块为Mutil-Head Attention和MLP Block。个人认为由于Mutil-Head Attention和MLP Block最后可能包含Dropout操作,所以有些方法在后面跟的是DropPath而非Dropout。

对于Mutil-Head Attention,由于ViT已经将图像转为了token,所以Mutil-Head Attention可以被即插即用,本质上它是对输入进行加权,详情请参考Multi-Head Attention。

对于MLP Block,它包括两层全连接(第一层输入大小为 768 768 768输出大小为 768 ∗ 4 768*4 7684,第二层输入大小 768 ∗ 4 768*4 7684输出大小为 768 768 768)、一层激活函数(GELU)、一层Dropout。

所以Transformer Encoder是通过Mutil-Head Attention和MLP进行多次特征提取,提取过程不改变原输出大小,因此Transformer Encoder的输出大小仍为 [ b a t c h _ s i z e , n u m _ t o k e n , d i m _ t o k e n ] [batch\_size,num\_token,dim\_token] [batch_size,num_token,dim_token] n u m _ t o k e n = 197 , d i m _ t o k e n = 768 ] num\_token=197,dim\_token=768] num_token=197,dim_token=768])。

之后,经过Layer Norm,即可取出其中Class token所对应的部分(Extract Class Token),大小为 [ b a t c h _ s i z e , 1 , 768 ] [batch\_size,1,768] [batch_size,1,768]这个就是很多方法直接取用的由ViT提取的图像特征。

3. MLP Head

该部分属于下游任务的自定义部分,ViT使用MLP作为分类头,其结构图如下:

如图所示,MLP Head包括两个部分Pre-Logits和Linear。

Pre-Logits是一个全连接层加一层Tanh激活,通常我们做下游任务时不使用它,而是仅使用Linear,即一个输入为768输出为待分类类别数量的全连接层。

致谢:

本博客仅做记录使用,无任何商业用途,参考内容如下:
ViT| Vision Transformer |理论 + 代码
Vision Transformer详解

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

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

相关文章

OpenHarmony鸿蒙南向开发案例:【智能燃气检测设备】

样例简介 本文档介绍了安全厨房案例中的相关智能燃气检测设备,本安全厨房案例利用轻量级软总线能力,将两块欧智通V200Z-R/BES2600开发板模拟的智能燃气检测设备和燃气告警设备组合成。当燃气数值告警时,无需其它操作,直接通知软总…

VOS3000加装登陆服务器安全防护系统有用吗

VOS3000是一款专业的软交换系统,它主要用于中小规模的VoIP运营业务,包括运营费率设定、套餐管理,账户管理、业终端管理、网关管理、数据查询、卡类管理、号码管理、系统管理等功能1。而关于加装登陆服务器安全防护系统是否有用,这…

2.4 Web容器配置:Tomcat

2.4 Web容器配置 2.4.1Tomcat配置1.常规配置2. HTTPS配置 *********** 2.4.1Tomcat配置 1.常规配置 在SpringBoot项目中,可以内置Tomcat、Jetly、Undertow、Netty等容器。 当开发者添加了spring-boot-starter-web依赖之后,默认会使用Tomcat作为Web容器…

基于Springboot+Vue的Java项目-网上点餐系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

【EdgeBox-8120AI-TX2】Ubuntu18.04 + ROS_ Melodic + 星秒PAVO2单线激光 雷达评测

大家好,我是虎哥,好久不见,最近这断时间出现了一点变故,开始自己创业,很多事需要忙,所以停更了大约大半年,最近一切已经理顺,所以我还是抽空继续我之前的FLAG,CSDN突破十…

牛客NC314 体育课测验(一)【中等 图,BFS,拓扑排序 Java,Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/1a16c1b2d2674e1fb62ce8439e867f33 核心 图,BFS,拓扑排序,队列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修…

数据库——实验9 存储过程的使用

1. 存储过程的定义 存储过程是一系列预先编辑好的、能实现特定数据操作功能的SQL 代码集,它与特定的数据库相关联,存储在SQL Server服务器上。用户可以像使用自定义的函数一样重复调用这些存储过程,实现它所定义的操作。 2. 存储过程的类型…

后台管理系统加水印(react)

效果 代码图片 代码 window.waterMark function (config) {var defaultConfig {content: 我是水印,fontSize: 16px,opacity: 0.3,rotate: -15,color: #ADADAD,modalId: J_waterMarkModalByXHMAndDHL,};config Object.assign({}, defaultConfig, config);var existMarkModal…

镜舟科技荣获金科创新社 2024 年度金融数据智能解决方案奖

近日, 镜舟科技凭借领先的金融实时数仓构建智能经营解决方案,在“金科创新社第六届金融数据智能优秀解决方案评选”活动中,成功入选“数据治理与数据平台创新优秀解决方案”榜单。 金科创新社主办的“鑫智奖”评选活动,旨在展示…

【解决】Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed

问题原因: 在Java8及高版本以上的版本在源应用程序不信任目标应用程序的证书,因为在源应用程序的JVM信任库中找不到该证书或证书链。也就是目标站点启用了HTTPS 而缺少安全证书时出现的异常 解决方案: 我使用的是忽略证书验证 public clas…

【配电网故障定位】基于二进制矮猫鼬优化算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#82】

文章目录 【获取资源请见文章第6节:资源获取】1. 配电网故障定位2. 二进制矮猫鼬优化算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节:资源获取】 1. 配电网故障定位 配电系统故障定位,即在配电网络发生…

vscode微博发布案例

样例: CSS代码: * {margin: 0;padding: 0; }ul{list-style: none; }.w {width: 900px;margin: 0 auto; }.controls textarea {width: 878px;height: 100px;resize: none;border-radius: 10px;outline: none;padding-left: 20px;padding-top: 10px;font-size: 18px; }.controls…

UE4 相机围绕某点旋转

关卡(一个相机CameraActor,一个Cube(名叫Target)): 关卡蓝图里的逻辑(为了大家看得清楚,特意连得很紧凑,也比较乱,不然一张截图放不下): 只对Yaw 只Pitch: 同样对Roll: 围绕任…

汇编语言——将BX中的无符号数和有符号数以二进制、八进制、十六进制、十进制形式输出

文章目录 将BX中的无符号数以二进制形式输出将BX中的无符号数以八进制形式输出将BX中的无符号数以十六进制形式输出将BX中的无符号数以十进制形式输出将BX中的有符号数以十进制形式输出 将BX中的无符号数以二进制形式输出 利用移位指令会影响CF,默认dl30h(数字0)&a…

基于Springboot的社区帮扶对象管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的社区帮扶对象管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

软航H5 PDF签章产品经nginx代理之后浏览器中PDF盖章时提示:签章失败:网络错误 的问题排查及解决办法

目录 问题现象 问题排查思路 问题处理办法 附:软航H5 PDF签章产品介绍 软航电子签章系统 软航版式文档签批系统 问题现象 问题描述:在系统中集成了软航H5 PDF签章产品,软航H5 PDF签章产品的对应服务是通过nginx代理的,在奇安…

leetcode199 二叉树的右视图

题目 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 解析 这道题首先能想到的办法,就是使用迭代法层次遍历&…

Spring Cloud+Uniapp 智慧工地云平台源码 智慧工地云平台AI视频分析应用

目录 AI应用与环境治理 设备管理与危大工程 塔吊安全监管 智慧工地APP端 智慧工地硬件设备 智慧工地主要功能模块 智慧工地可以通过以下几个方面为建筑行业赋能: 1.提高工程效率 2.提高工程安全性 3.提高工程质量 4.提高工程管理效率 绿色施工 质量管理…

遥感图像分割 | 基于一种类似UNet的Transformer算法实现遥感城市场景图像的语义分割_适用于卫星图像+航空图像+无人机图像

项目应用场景 面向遥感城市场景图像语义分割场景,项目采用类似 UNet 的 Transformer 深度学习算法来实现,项目适用于卫星图像、航空图像、无人机图像等。 项目效果 项目细节 > 具体参见项目 README.md (1) 安装依赖 conda create -n airs python3.8…

CAS和synchronized原理

synchronized与CAS Synchronized 原理加锁工作过程一些优化 CAS实现原子类 小结 Synchronized 原理 synchronized 既可以是乐观锁, 也可以是悲观锁.synchronized 既可以是轻量级锁, 也可以是重量级锁.synchronized 重量级锁是由系统的互斥锁实现的; 轻量级锁是基于自旋锁实现的…