Vision Transformer (ViT)浅析

2024-04-18 16:12
文章标签 transformer 浅析 vision vit

本文主要是介绍Vision Transformer (ViT)浅析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vision Transformer (ViT)

概述

为了将Transformer引入视觉任务,Google团队开发出了Vision Transformer (ViT),其中ViT模型以及变种在图像分类任务上一骑绝尘

chart

ViT的结构

model_scheme_00

ViT首先将图像( R H × W × C \mathbb{R}^{H\times W\times C} RH×W×C)划分为多个Patch( P × P P\times P P×P),Patch的维度为 P 2 × C P^2\times C P2×C。可得图片划分的Patch数目为 N = H W P 2 N=\frac{HW}{P^2} N=P2HW。例如输入图片大小为224x224,将图片分为固定大小的patch,patch大小为16x16,则每张图像会生成224x224/16x16=196个patch,即输入序列长度为196,每个patch维度16x16x3=768

然后使每一个Patch展平后进行线性投影为固定长度的向量。在线性投影中直接使用一个卷积核大小为16x16,步距为16,卷积核个数为768的卷积来实现。通过卷积[224, 224, 3] -> [14, 14, 768],然后把H以及W两个维度展平即可[14, 14, 768] -> [196, 768],此时正好变成了一个二维矩阵,正是Transformer想要的。并添加一个特殊的token[cls]与token拼接在一起以便表示为图像分类任务,此时token为的维度是197x768。到目前为止,已经通过patch embedding将一个视觉任务就转化为序列问题。

同时ViT没有采用原始Transformer的位置编码方式,而是直接设置为可学习的位置编码(Positional Encoding)。

这个过程可以公式化为:
z 0 = [ x c l a s s ; x p 1 E ; x p 2 E ; . . . ; x p N E ] + E p o s \begin{aligned} \mathbf{z}_0&=\begin{bmatrix}\boldsymbol{x}_{class};\boldsymbol{x}_p^1\boldsymbol{E};\boldsymbol{x}_p^2\boldsymbol{E};...;\boldsymbol{x}_p^N\boldsymbol{E}\end{bmatrix}+\boldsymbol{E}_{pos}& \\ \end{aligned} z0=[xclass;xp1E;xp2E;...;xpNE]+Epos
表示图块编码和位置编码过程,其中 E E E是线性变换矩阵且 E ∈ E\in E R ( P 2 × C ) × D \mathbb{R}^{(P^2\times C)\times D} R(P2×C)×D, E p o s ∈ R ( N + 1 ) × D E_{pos}\in\mathbb{R}^{(N+1)\times D} EposR(N+1)×D, x c l a s s x_{class} xclass为人为增加的一个可学习的分类向量。

然后在transformer的多头注意力机制中多头自注意力时,先将输入映射到q,k,v,如果只有一个头,qkv的维度都是197x768,如果有12个头(768/12=64),则qkv的维度是197x64,一共有12组qkv,最后再将12组qkv的输出拼接起来,输出维度是197x768,然后在过一层LN,维度依然是197x768
z l ′ = M S A ( L N ( z l − 1 ) ) + z l − 1 , l = 1 , 2 , . . L \mathbf{z}_l'=MSA\Big(LN(\mathbf{z}_{l-1})\Big)+\mathbf{z}_{l-1},\quad l=1,2,..L zl=MSA(LN(zl1))+zl1,l=1,2,..L
公式表示Transformer 编码器中的多头自注意力 (Multi-head Selfattention)、残差连接与层归一化 (Add &Norm) 过程,重复 L次。

紧接着使用MLP将维度放大再缩小回去
z l = M L P ( L N ( z l ′ ) ) + z l ′ , l = 1 , 2 , . . L \mathbf{z}_l=MLP\Big(LN(\mathbf{z}_l')\Big)+\mathbf{z}_l', l=1,2,..L zl=MLP(LN(zl))+zl,l=1,2,..L
公式表示Transformer编码器中前馈神经网络(Feed Forward Network)、残差连接与层归一化 (Add &Norm) 过程,重复 L 次。

最后使用层归一化处理
y = L N ( z L 0 ) \boldsymbol{y}=LN(\mathbf{z}_L^0) y=LN(zL0)
一个block之后维度依然和输入相同,都是197x768,因此可以堆叠多个block。

这篇关于Vision Transformer (ViT)浅析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/915253

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。

Transformer从零详细解读

Transformer从零详细解读 一、从全局角度概况Transformer ​ 我们把TRM想象为一个黑盒,我们的任务是一个翻译任务,那么我们的输入是中文的“我爱你”,输入经过TRM得到的结果为英文的“I LOVE YOU” ​ 接下来我们对TRM进行细化,我们将TRM分为两个部分,分别为Encoders(编码器)和Decoders(解码器) ​ 在此基础上我们再进一步细化TRM的

风暴项目个性化推荐系统浅析

风暴项目的主要任务是搭建自媒体平台,作为主开发人员的我希望把工作重心放在个性化推荐系统上。 目前风暴项目的个性化推荐是基于用户行为信息记录实现的,也就是说对于每条资讯,数据库中有字段标明其类型。建立一张用户浏览表,对用户的浏览行为进行记录,从中可以获取当前用户对哪类资讯感兴趣。 若用户第一次登陆,则按默认规则选取热点资讯做推荐,及所有资讯按浏览量降序排序,取前4个。另外,我考虑到后期可能有商业

中国书法——孙溟㠭浅析碑帖《越州石氏帖》

孙溟㠭浅析碑帖《越州石氏帖》 《越州石氏帖》  是一部汇集多本摹刻的帖,南宋时期的会稽石邦哲(字熙明)把家藏的一些法书碑帖集中一起摹刻成的,宋理宗时临安书商陈思《宝刻丛编》有记載这部帖的目录。现在还存有宋代时拓的残缺本,大多是相传的晋朝唐朝的小楷,后人多有临摹学习,并以此版本重新摹刻。 (图片来源于网络) 图文/氿波整理

浅析网页不安装插件播放RTSP/FLV视频的方法

早期很多摄像头视频流使用的是RTSP、RTMP协议,播放这类协议的视频通常是在网页上安装插件。但现在越来越多的用户,对于网页安装插件比较反感,且随着移动设备的普及,用户更多的希望使用手机、平板等移动设备,直接可以查看这些协议的视频。那是否有什么方案可以直接网页打开RTSP、RTMP协议的视频,直接观看不用安装插件呢?而且对于摄像头的数据,尽可能低延迟的获取实时画面。  其实很多摄像头厂家也注意到

LLM模型:代码讲解Transformer运行原理

视频讲解、获取源码:LLM模型:代码讲解Transformer运行原理(1)_哔哩哔哩_bilibili 1 训练保存模型文件 2 模型推理 3 推理代码 import torchimport tiktokenfrom wutenglan_model import WutenglanModelimport pyttsx3# 设置设备为CUDA(如果可用),否则使用CPU#

逐行讲解Transformer的代码实现和原理讲解:计算交叉熵损失

LLM模型:Transformer代码实现和原理讲解:前馈神经网络_哔哩哔哩_bilibili 1 计算交叉熵目的 计算 loss = F.cross_entropy(input=linear_predictions_reshaped, target=targets_reshaped) 的目的是为了评估模型预测结果与实际标签之间的差距,并提供一个量化指标,用于指导模型的训练过程。具体来说,交叉

使用 VisionTransformer(VIT) FineTune 训练驾驶员行为状态识别模型

一、VisionTransformer(VIT) 介绍 大模型已经成为人工智能领域的热门话题。在这股热潮中,大模型的核心结构 Transformer 也再次脱颖而出证明了其强大的能力和广泛的应用前景。Transformer 自 2017年由Google提出以来,便在NLP领域掀起了一场革命。相较于传统的循环神经网络(RNN)和长短时记忆网络(LSTM), Transformer 凭借自注意力机制

浅析c/c++中 struct的区别

(1)C的struct与C++的class的区别。 (2)C++中的struct和class的区别。 在第一种情况下,struct与class有着非常明显的区别。C是一种过程化的语言,struct只是作为一种复杂数据类型定义,struct中只能定义成员变量,不能定义成员函数(在纯粹的C语言中,struct不能定义成员函数,只能定义变量)。例如下面的C代码片断: 复制代码代码如下: