240701_昇思学习打卡-Day13-Vision Transformer图像分类

240701_昇思学习打卡-Day13-Vision Transformer图像分类

Transformer最开始是应用在NLP领域的,拿过来用到图像中取得了很好的效果,然后他就要摇身一变,就叫Vision Transformer。

该部分内容还是参考太阳花的小绿豆-CSDN博客大佬的视频11.1 Vision Transformer(vit)网络详解_哔哩哔哩_bilibili及查阅资料,以下为本人学习总结,肯定没有大佬详尽,建议去看大佬视频。

模型网络结构

Vision Transformer(ViT)模型主要由三个模块组成,以下是模型框架:

  • Linear Projection of Flattened Patches(Embedding层)
  • Transformer Encoder(图右侧有给出更加详细的结构)
  • MLP Head(最终用于分类的层结构)

首先,Transformer是从NLP领域学习改进过来的嘛,所以人家训练的认识的是字,也就是一串token(向量)序列,而我们直接给模型输入一个图片,人认识都不认识,更别说预测了。

Embedding层(Linear Projection of Flattened Patches)结构

对于图像数据而言,其数据格式为H,W,C,我们就要先通过Embedding层(图中的Linear Projection of Flattened Patches)给他转换一下,尝试把图片分为一堆小的Patches,此处把输入图片按照16*16的Patch进行划分(就图中左下角画的九宫格这个意思),每个Patch数据shape会变为16,16,3,通过映射得到一个长度为768的向量(token),即16,16,3->768

代码实现中直接使用卷积层,ViT也有好几种类型,此处以ViT-B/16为例,直接使用shape=16X16,stride=16,个数768的卷积层,原输入图像通过这层卷积后维度由224,224,3变成14,14,768,然后把H和W两个维度展平(两个14),即14,14,768->196,768,此时这个二维矩阵正是Transformer想要的。

在输入Transformer Encoder之前要加上classtoken以及Position Embedding。这个classtoken是用于分类的,是一个可训练的参数,数据格式和上面得到的token一样都是一个向量,此处就是一个长度为768的向量,维度为1,768,与上面的token拼接在一起就是197,768,此外,还要添加一个Position Embedding用于定位,定位拆出来的这个块在原图的什么位置,如果没有这个Position Embedding,这就是一堆乱的拼图,有时候我们不知道原图的情况下,玩儿4*4的拼图都费劲,更别说让机器啥都不知道来拼16X16的拼图了,这个Position Embedding原理如下:

图片右侧有色条,最上面最黄色的部分就是相似度最高的,可以看图中左上角第一张图,他的左上角(1,1)的位置就是它本身嘛,肯定就是最像自己的地方,所以在颜色表现上就是最黄的,第一行和第一列都是和他相似度比较高的,所以颜色都在色条的上半部分。就通过这个表现记录了其位置。

Position Embedding是直接在原来的token上进行相加,所以shape应该与原来的token保持一致,为197,768,在这个加法过程中维度不会发生变化,是直接相加。

Transformer Encoder

Transformer Encoder其实就是重复堆叠Encoder Block L次,下图是大佬绘制的Encoder Block,主要由以下几部分组成:

  • Layer Norm,这种Normalization方法主要是针对NLP领域提出的,这里是对每个token进行Norm处理
  • Multi-Head Attention,这个结构之前在讲Transformer中很详细的讲过,见上期240630_昇思学习打卡-Day12-Transformer中的Multiple-Head Attention-CSDN博客
  • Dropout/DropPath,在原论文的代码中是直接使用的Dropout层,在但rwightman实现的代码中使用的是DropPath(stochastic depth),可能后者会更好一点。
  • MLP Block,如图右侧所示,就是全连接+GELU激活函数+Dropout组成也非常简单,需要注意的是第一个全连接层会把输入节点个数翻4倍[197, 768] -> [197, 3072],第二个全连接层会还原回原节点个数[197, 3072] -> [197, 768]

MLP Head

在Transformer Encoder中,输出的shape和输入得shape是一样的,输出的还是197,768,出来之后我们要添加一个Layer Norm层,把我们之前添加进去的classtoken拿出来,这么费工夫不就是为了最后得到这个分类信息嘛,然后通过MLP Head得到最终的分类结果,在训练自己的数据集时,这一层只需要一个简单的Linear,在原论文训练数据集上较为复杂,由Linear+tanh激活函数+Linear组成。

以下为大佬本人画的整个流程图,极其详尽,吹爆了:

因为近期期末周,所以记录的可能较为简单

打卡图片:

参考博客:

11.1 Vision Transformer(vit)网络详解_哔哩哔哩_bilibili

详解Transformer中Self-Attention以及Multi-Head Attention_transformer multi head-CSDN博客

Vision Transformer详解-CSDN博客

以上图片均引用自以上大佬博客,如有侵权,请联系删除

相关推荐
冬奇Lab1 分钟前
每日一个开源项目(第153篇):AgentsView - 跨 30+ AI 编程工具的会话分析和费用追踪,本地优先,无需账号
人工智能·开源·ai编程
泛普软件6 分钟前
工程合约管理软件具备哪些核心功能,解决合同结算各类纠纷难题
大数据·人工智能·区块链
zhangxingchao12 分钟前
AI大模型核心八:从 Agent Skill、长文档 RAG 到知识库更新与训练策略
前端·人工智能·后端
kk的vmware虚拟机安装ubuntu13 分钟前
鱼皮 yu-rpc:从 0 到 1 手写 RPC 框架的实践教程
网络·网络协议·其他·rpc
β添砖java13 分钟前
2025最新快速构建企业级虚拟专用网络环境学习笔记
笔记·学习
bkl_921317 分钟前
GPT-Image-2 文生图:前景与背景怎么区分?
人工智能·gpt
ShineWinsu35 分钟前
对于Linux:网络基础的解析
linux·网络·面试·udp·笔试·ip·tcp
zhangxingchao42 分钟前
AI大模型核心七:从 Workflow、RAG、记忆治理到幂等性
前端·人工智能·后端
LYFlied2 小时前
EVMbench解读:AI Agent如何检测、修复并利用智能合约漏洞
人工智能·网络安全·openai·智能合约·ai agent·evm·智能合约区块链
犀利豆2 小时前
AI in Harness(二)
java·人工智能·后端