ViT 模型介绍(一)——综述

机器人所采用的大模型均为多模态大模型,输入至少为视觉图像及末端笛卡尔坐标系位姿,因此 ViT 算是基础模型之一

在计算机视觉领域,Vision Transformer (ViT) 是由谷歌团队于2020年提出的一个革命性研究成果,它成功挑战了自2012年AlexNet提出以来,卷积神经网络(CNN)在视觉任务中的主导地位

ViT 的核心创新在于将 Transformer 模型直接应用于图像处理任务,彻底打破了传统计算机视觉中依赖卷积神经网络的惯例

ViT的引入对计算机视觉与自然语言处理的融合起到了催化作用。越来越多的多模态任务开始采用Transformer架构作为共同的模型框架。例如,CLIP(Contrastive Language-Image Pretraining)和 Stable Diffusion 等模型,都在其设计中采用了预训练的ViT模型作为图像特征提取的核心组件

目录

1 将 Transformer 应用于计算机视觉任务的挑战

1.1 注意力层的计算复杂度

1.2 如何将二维图像转化为一维序列

1.3 如何与自注意力机制结合

2 基本架构与核心思想

2.1 图像分块

2.2 扁平化和线性变换

2.3 添加位置编码

2.4 Transformer 编码器

2.5 图像分类

3 ViT 相关开源项目

3.1 Google Research ViT GitHub

3.2 Hugging Face Transformers

3.3 Keras-ViT

3.4 Visual Transformers (vit) by Meta

3.5 DPT (Dense Prediction Transformer)

3.6 CLIP by OpenAI


1 将 Transformer 应用于计算机视觉任务的挑战

Transformer 架构可以看之前的笔记文章,其中最关键的 注意力机制(Attention Mechanism)的核心操作是计算输入元素之间的注意力分数

在计算机视觉中,应用 Transformer 面临着几个挑战,主要包括:

1.1 注意力层的计算复杂度

Transformer 中的注意力层计算的是输入元素之间的相似度,并根据这些相似度计算加权平均。具体来说,注意力层需要计算一个注意力矩阵,矩阵中的每个元素表示两个输入元素之间的注意力分数

注意力分数的计算复杂度为 $O(n^2)$,其中 n 是输入序列的长度。这个计算复杂度对于较长的输入序列来说是非常高的

在计算机视觉任务中,输入的图像分辨率通常很高,例如常见的224×224像素的图像,如果将每个像素作为一个元素,那么输入序列的长度就为224 × 224 = 50176,这已经非常庞大,注意力矩阵的计算量极其巨大

对于更大的图像(例如目标检测任务中的416×416像素,甚至视频分类中的800×800像素),计算复杂度将成倍增加,导致直接应用 Transformer 的计算成本难以接受。因此,如何有效地将注意力机制应用于高维图像是将 Transformer 引入计算机视觉的关键问题

1.2 如何将二维图像转化为一维序列

Transformer 最适合处理序列数据,而图像是二维数据。为了将图像输入到 Transformer 中,需要先将图像从二维结构转换为一维序列。最直观的做法是将图像的每个像素视为输入序列的元素,然后将图像拉平成一个长向量

然而,直接将一个高分辨率图像(例如224×224像素)拉直成一个长度为50176的向量,显然计算开销巨大,无法在当前计算资源下高效处理

因此,ViT等模型采用了图像块(patch)的方式,将图像切分成多个较小的块(如16×16像素),然后将每个图像块当作一个元素输入到 Transformer 中。这样既能减小计算量,也能保持图像的空间结构信息。

1.3 如何与自注意力机制结合

如何将注意力机制应用于图像计算就是将 Transformer 应用于计算机视觉领域的重点。最简单的方式就是直接将 CNN 与自注意力机制结合,首先用 CNN 提取特征图(Feature Map),然后将特征图的每个位置视为序列的一个元素,接着应用自注意力机制

自注意力机制的计算过程可以总结为三个步骤,更详细的可以查看之前的笔记文章

  1. 相似度计算:对于输入的每个元素(通常是特征图中的某个位置),使用点积拼接感知机等方式计算它与其他元素的相似度,得到一个注意力权重

  2. 标准化:通过softmax函数对计算出的注意力权重进行标准化,使得所有权重的和为1,从而得到规范化的注意力分数

  3. 加权平均:将注意力分数与对应的value(值向量)进行加权求和,得到最终的输出特征

这种自注意力机制的优势在于其全局性。通过查询(Query)和赋值(Value)操作,它可以捕获特征图中的全局空间信息,适用于处理需要全局上下文理解的任务。

结合原因与思路:

传统的 CNN 只能处理局部信息,因为卷积操作本质上是局部感受野的操作,模型只能关注到卷积核周围的局部区域,无法有效地融合远距离的特征。而自注意力机制能够通过加权融合的方式,处理全局信息,因此在需要全局上下文理解的任务中,表现优于传统 CNN

举个例子:在图像的某个位置(如图像中的一个球体)和图像的其他位置(如另一个球体)之间,存在空间上的远距离关系。自注意力机制能够通过计算注意力权重,将远处的信息加权融合到当前位置的特征表示中,从而提高模型对全局上下文的理解能力

2 基本架构与核心思想

ViT 的架构可以简要总结为以下几个主要步骤:

图像分块 -> 扁平化和线性变换 -> 添加位置编码 -> Transformer 编码器 -> 图像分类

通过这几个步骤,成功将 Transformer 模型应用于图像分类任务,简单介绍一下:

2.1 图像分块

ViT 首先将输入的图像切分为多个固定大小的图像块(patch)。例如,对于一张224x224的图像,若每个块的大小为16x16,那么图像将被切割成14x14=196个块。每个块可以视为一个“词”或者说是一个序列的元素

2.2 扁平化和线性变换

每个图像块被扁平化为一维向量,并通过一个线性投影(即一个全连接层)映射到一个固定维度的向量空间。这些变换后的向量将作为输入送入 Transformer 模型

2.3 添加位置编码

由于 Transformer 模型本身不具备感知输入顺序的能力,因此 ViT 为每个图像块添加了位置编码(Positional Encoding),以保留块在原图中的空间位置信息。位置编码通常采用类似于 NLP 任务中使用的编码方式

2.4 Transformer 编码器

经过位置编码处理后,图像块的向量进入标准的 Transformer 编码器架构中。Transformer 编码器主要由自注意力机制和前馈神经网络组成,通过多层堆叠的自注意力层来捕捉图像块之间的长程依赖关系

2.5 图像分类

Transformer 输出的特征向量经过一个池化层(通常是取平均或最大池化)后,送入一个全连接层进行最终的分类

3 ViT 相关开源项目

3.1 Google Research ViT GitHub

Google Research发布了ViT的原始实现,包括详细的代码和预训练模型,帮助研究人员和开发者能够快速复现ViT的实验。

3.2 Hugging Face Transformers

Hugging Face 提供了一个强大的 Transformer 库,其中包括 ViT 模型的实现。该库支持与多个预训练模型进行交互,包括 ViT,并且集成了许多其他计算机视觉任务(如图像分类、目标检测等)

3.3 Keras-ViT

如果使用 Keras 和 TensorFlow 架构,Keras-ViT 是一个 ViT 的开源实现,可以在 Keras 框架中使用 ViT 模型

3.4 Visual Transformers (vit) by Meta

Meta AI(前 Facebook AI)也发布了自己的 ViT 实现,该项目提供了一个基于 Transformer 的计算机视觉框架,适用于多种任务

3.5 DPT (Dense Prediction Transformer)

DPT 是一个针对 Dense Prediction 任务(如深度估计和语义分割)优化的 ViT 版本,适合需要高精度视觉理解的应用

3.6 CLIP by OpenAI

虽然 CLIP 是一个多模态模型,但它使用了基于 ViT 的图像编码器。OpenAI 开源了 CLIP 模型的代码,并提供了相关的预训练模型,可以用于图像-文本匹配等任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值