Vision Transformer (ViT) —— 多模态学习笔记(一)

本系列文章采用先总体框架后技术细节的方式展开。
原论文:An image is worth 16x16 words: Transformers for image recognition at scale.
Github:google-research/vision_transformer

一、ViT 架构

总体上可以简单理解为:ViT是将Transformer架构引入到计算机视觉中。
Transformer最先在NLP领域提出,它处理序列数据有优势对于标准的Transformer模块,输入是token序列,一般是[num_token, token_dim]。因此ViT的核心思想如下图 Vision Transformer(ViT)的架构图所示,它是通过将图像分割成一系列小块(patches)并视为序列化的token输入到Transformer编码器中,实现对图像特征的提取。

ViT工作流程:

  • 将图像分割成固定大小的图像块(patches)
  • 通过 Linear Projection of Flattened Patches 将每一个 patches 转换成Patch Embedding,然后添加位置编码,得到 Patch + Position Embedding。(每个图像块现在就像一个"单词",而整个图像被看作由这些"单词"组成的一句话。)
  • 嵌入(Patch + Position Embedding)输入到Transformer编码器处理,输出每个图像块的更新特征表示,它不仅包含了图像块自身的特征,还包含了图像块之间的关联信息。
    ViT框架

二、技术细节

让我们以ViT-B/32模型为例,介绍在ViT模型中的数据流。
(注:B是Base的缩写,作者根据设置参数大小训练了Base、Large、Huge等多种模型,32是图像会被分割成多32×32的图像块。如果是16,就是分成16×16)

1. 输入图像

假设输入的图像大小为224×224像素。这个图像会被分割成多个固定大小的图像块。
ViT-B/32中,图像被分成32×32的图像块(patch)。
对于一个224×224的图像,可以被划分为(224 ÷ 32) × (224 ÷ 32) = 7 × 7个图像块,也就是49个图像块。

2. 图像块(Patches)展开和线性投影

  • 每个图像块大小是32×32,展平后是32×32×3 = 3072维的向量(假设输入图像是RGB格式)。此时向量的形状为49×3072
  • 通过线性投影,每个3072维的向量被映射到768维的特征向量。最终得到的是49×768的向量。
    (注:如果是ViT-B/16,展平后是16×16×3 = 768,也许很多人和我一样,有这样的疑惑,为什么ViT-B/32ViT-B/16都是映射到7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值