当前位置: 首页 > article >正文

ViT学习笔记(二) Patch+Position Embedding阶段的详细推演与理解

 我认为讲得最好的一个文章:Vision Transformer详解-CSDN博客

有很多文章,自己并没有完全正确理解。

我的笔记,以ViT的标准应用为例:

        • 输入图像:输入图像的尺寸是224x224,且是RGB图像,因此输入张量的形状是 (224, 224, 3)。

        • Patch大小 patch_size: patch_size x patch_size = 16x16,这意味着每个patch的尺寸是16x16像素,且包含RGB3个颜色通道。如果以像素值为统计单位,每个Patch的大小是16*16*3 = 768。

        • Patch数量:将224x224的图像分割成16x16的patch,得到的patch数量为 (224/16) x (224/16) = 14 x 14 = 196 个patch。

        • 卷积、映射以及展平patch:使用一个卷积层(  nn.Conv2d  ),其卷积核大小(  kernel_size  )和步长(  stride  )均等于  patch_size = 16  ,16*16*3  = 768,这个卷积层实际上执行了一个线性变换,将每个  patch  展平成一个一维向量,其长度为  embed_dim = 768。当前共有14 * 14 = 196 个patch,所以,到了这个步骤,得到的向量的形状是:[196, 768]。

        添加位置信息:为了保留每个patch在图像中的相对位置信息,ViT使用位置embedding。位置embedding是一个可学习的参数,形状为 [196, 768],其中196是patch的数量,768是每个patch的embedding维度。
        加法操作:将位置embedding加到patch embedding上,两个等维度矩阵相加后维度不变,到了这个步骤,得到的向量的形状仍然是:[196, 768]。

        • Class Token(类别标记):在Transformer模型中,需要一个特殊的标记来聚合全局信息并进行分类,所以引入一个可学习的  class_token  ,其维度与  embed_dim  = 768 相同,初始化为零向量或其他值。将  class_token  添加到嵌入后的  patch  序列的开始位置,到了这个步骤,得到的向量的形状是:[197, 768]。

经过以上步骤,获得了形状为[197, 768]的特征向量,将其送入编码器。


http://www.kler.cn/a/430044.html

相关文章:

  • 嵌入式入门Day38
  • 73.矩阵置零 python
  • C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序
  • 基类指针指向派生类对象,基类指针的首地址永远指向子类从基类继承的基类首地址
  • 词作词汇积累:错付、大而无当、语焉不详、愈演愈烈
  • 代码随想录 哈希 test 8
  • 利用机器学习技术进行区块链交易趋势预测的研究【代码实战】
  • Vue Web开发(二)
  • 学习笔记064——如何手动将jar包导入到maven本地库
  • SpringBoot+Resilience4j实现接口限流
  • 5G CPE终端功能及性能评测(四)
  • CSS核心(上)
  • 力扣第96题 不同的二叉搜索树
  • 使用ModelArts PyCharm插件调试训练ResNet50图像分类模型
  • Leetcode688:骑士在棋盘上的概率
  • 软体机器人动态手内笔旋转研究
  • 包管理器npm, cnpm, yarn 和 pnpm 的命令
  • (iOS)响应者链在应用程序中的作用
  • Atcoder ABC382
  • word poi-tl 表格功能增强,实现表格功能垂直合并
  • C# 关于加密技术以及应用(一)
  • 《Vue进阶教程》第一课:什么是组合式API
  • 深度学习常见激活函数介绍
  • ansible学习笔记之02command模块与shell模块
  • apache的BeanUtils的Converter被相互污染覆盖问题
  • 【Linux】NUMA如何梆核