Avatar
😀
本站总访问量
  • 对Llama3.2视觉模型进行简单的介绍
    AI Created Wed, 14 Jan 2026 11:26:56 +0800
  • 对LLaVA模型进行简单的介绍
    AI Created Wed, 14 Jan 2026 09:18:59 +0800
  • 对BLIP网络进行简单的介绍
    AI Created Tue, 13 Jan 2026 15:28:43 +0800
  • 对ALBEF网络进行简单的介绍
    AI Created Mon, 12 Jan 2026 21:30:04 +0800
  • Vision Transformer是用Transformer架构解决视觉问题。其可以在不做改动来解决计算机视觉问题。

    其在小规模数据上略输卷积神经网络,而在中等或者大规模数据集上,表现相当或者优于卷积神经网络。在计算效率上,训练同等精度的模型,Transformer模型比卷积神经网络模型更有优势。

    首先将图片按照固定大小分为一个个patch作为token。一个patch如何作为Embedding向量呢?

    可以将这个图像的长乘以宽再乘以通道数的多维矩阵表示展平,再通过一个共享线性层投射到Transformer模型特征维度就完成1个图片转换为向量序列。

    图片切片相当于文本中分词,而线性层相当于Embedding。接下来需要考虑位置编码。

    在ViT中把位置编码为可学习向量,直接加在图像Token向量上。其参考BERT模型,在前面添加1个可学习的分类头。后面用的是Transformer Encoder,因此每个Token都可以看到所有Token。

    其网络结构如下图所示:

    ViT

    其模型类型可分为3种:

    • ViT-Base
    • ViT-Large
    • ViT-Huge

    其中ViT-L/16表示使用的是ViT-Large模型,patch尺寸为16x16。其中patch size越小,序列越长,计算代价越大。

    下面介绍下图像转化为Embedding序列的两种实现方式:

    训练图片大小为224x224,patch大小为16x16,patch数量为14x14。而Transformer里的特征维度(Hidden Size)为1024。

    第一种方式是采用线性映射,将原始图片拆分为多个patch,对于每个patch,shape为(16,16,3),展开为1个长度为768的一维向量,然后通过一个共享的(768,1024)的线性层进行编码。

    第二种方式是卷积操作,直接对原始图片,定义1024个卷积核,每个卷积核大小为patch大小(16,16),步长为16,padding为valid。

    这两种操作是完全等价的。

    另外Encoder输出分类也有两种方法:

    1. 增加一个分类头[cls]token,用最后的Encoder对这个token的输出提取全局信息
    2. 不增加token,用最后Encoder的所有token的向量的全局平均池化GAP提取全局信息

    最后,原作者也在该网络上尝试自监督学习。其借鉴BERT,对50%的patch进行标记,其中的80%标记为可学习的[mask]标签,10%替换为其他patch的Embedding,剩余10%维持不变。

    而预测像素值时,原来是RGB数量255x255x255=16581375色转换为预测8x8x8=256色,效果非常不错。

    参考视频:

    https://www.bilibili.com/video/BV15RDtYqE4r

    Created Mon, 12 Jan 2026 15:59:06 +0800