【深度学习】深刻理解ViT

ViT(Vision Transformer) 是谷歌研究团队于2020年提出的一种新型图像识别模型,首次将Transformer架构成功应用于计算机视觉任务中。Transformer最初应用于自然语言处理(如BERT和GPT),而ViT展示了其在视觉任务中的潜力。ViT的核心思想是将图像划分为小的固定大小的块(patches),然后将这些块视为一个序列输入Transformer模型,类似于NLP中的词序列。这种方法不同于传统的卷积神经网络(CNN),它不依赖卷积操作,而是完全基于全局的自注意力机制。

论文原文:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

1. 方法

Transformer用encoder-decoder结构,通过学习语言的拆解组装对照表,实现了很好的机器翻译效果。BERT模型在此基础上通过encoder间的团结协作,在NLP领域实现了多种任务的处理。而视觉领域就是ViT模型了。与BERT相比,ViT的主要框架没有什么改变,都是采用多个Transformer encoder,依然使用多层多头的结构。其主要工作在于输入阶段,把图片进行向量化,转换成embeddings的词结构,从而实现了NLP中类似句子一样的效果,后续encoder的操作和原始Transformer中完全相同。

1.1. patch embedding

就如同ViT的题目所说的那样,将原始二维图像分成小块,称为patch,大小为16x16。每个patch也就相当于在机器翻译中句子中的一个词,然后经过全连接层,把patch压成一个向量。在向量的开头加入class token <cls>,目的是便于后期实现特征分类。

1.2. position embedding

将这个长x宽x通道数的矩阵表示进行展平,然后通过一个共享的线性层投射到Transformer模型里面的特征维度,比如1024。在投影后的固定长度的向量上加入tokens的位置信息,即加入一个可学习的向量,为后面的self-attention计算做准备。位置编码可以理解为一张表,表一共有N行,N的大小和输入序列长度相同,每一行代表一个向量,向量的维度和输入序列embedding的维度相同,其中位置编码的操作是sum,而不是concatenate。因为后面采用的是Transformer Encoder,每个Token不论在哪个位置都可以看到所有的Token。

  • **1-D 位置编码:**例如3x3共9个patch,patch编码为1到9

  • **2-D 位置编码:**patch 编码为11,12,13,21,22,23,31,32,33,即同时考虑X和Y轴的信息,每个轴的编码维度是D/2

  • 实际实验结果表明,不管使用哪种位置编码方式,模型的精度都很接近,甚至不适用位置编码,模型的性能损失也没有特别大。原因可能是ViT是作用在image patch上的,而不是image pixel,对网络来说这些patch之间的相对位置信息很容易理解,所以使用什么方式的位置编码影像都不大。

1.3. MLP Head

Transformer之后的MLP Head其实就是一个全连接层,先把输入时添加的分类向量拿出来,输入到这个网络里,输出就是图像的分类类别了。

2. ViT训练

与BERT模型类似,ViT也根据encoder层数的不同训练连三种模型------ViT-BaseViT-Large 和**ViT-Huge。**patch size越小,序列越长,计算代价越大,一般来说效果也会越好。ViT的训练与BERT一样,也分为pre-training和fine-tuning两个过程。

论文中对学习到的位置编码进行了可视化,发现相近的图像块的位置编码较相似,且同行或列的位置编码也相近。随着encoder的增加,每个头关注的像素距离越来越远,关注全局信息。

参考资料:

ViT(Vision Transformer)解析 - 知乎https://zhuanlan.zhihu.com/p/445122996

【深度学习】详解 Vision Transformer (ViT)-CSDN博客https://blog.csdn.net/qq_39478403/article/details/118704747

【ViT模型】Transformer向视觉领域开疆拓土......_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV13B4y1x7jQ?spm_id_from=333.788.videopod.sections&vd_source=0dc0c2075537732f2b9a894b24578eed

VIT (Vision Transformer)深度讲解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV15RDtYqE4r/?spm_id_from=333.337.search-card.all.click&vd_source=0dc0c2075537732f2b9a894b24578eed

相关推荐
MSTcheng.44 分钟前
构建自定义算子库:基于ops-nn和aclnn两阶段模式的创新指南
人工智能·cann
User_芊芊君子1 小时前
CANN图编译器GE全面解析:构建高效异构计算图的核心引擎
人工智能·深度学习·神经网络
lili-felicity1 小时前
CANN加速Whisper语音识别推理:流式处理与实时转录优化
人工智能·whisper·语音识别
沈浩(种子思维作者)1 小时前
系统要活起来就必须开放包容去中心化
人工智能·python·flask·量子计算
行走的小派1 小时前
引爆AI智能体时代!OPi 6Plus全面适配OpenClaw
人工智能
云边有个稻草人1 小时前
CANN:解构AIGC底层算力,ops-nn驱动神经网络算子加速
人工智能·神经网络·aigc·cann
爱吃大芒果1 小时前
CANN神经网络算子库设计思路:ops-nn项目的工程化实现逻辑
人工智能·深度学习·神经网络
人工智能培训1 小时前
具身智能如何让智能体理解物理定律?
人工智能·多模态学习·具身智能·ai培训·人工智能工程师·物理定律
lili-felicity1 小时前
CANN加速Stable Diffusion文生图推理:从UNet优化到内存复用
人工智能·aigc
哈__1 小时前
CANN加速语音合成TTS推理:声学模型与声码器优化
人工智能