Vision Transformer (ViT)
探索视觉 Transformer (ViT) 的强大功能。了解自注意力机制和分块 Token 化如何通过 Ultralytics 打破 CNN 局限,彻底改变计算机视觉。
Vision Transformer (ViT) 是一种深度学习架构,它调整了原本为自然语言处理 (NLP) 设计的自注意力机制来解决视觉任务。与传统的卷积神经网络 (CNN)(通过局部像素网格的层级结构处理图像)不同,ViT 将图像视为离散补丁的序列。这一方法因具有里程碑意义的研究论文"An Image is Worth 16x16 Words"而广受欢迎,该论文证明了纯 Transformer 架构能够在不依赖卷积层的情况下,在计算机视觉 (CV) 中实现先进的性能。通过利用全局注意力,ViT 能够从第一层开始捕获整张图像的远距离依赖关系。
视觉 Transformer 的工作原理#
ViT 的根本创新在于其构建输入数据的方式。为了使图像与标准的 Transformer 兼容,该模型将视觉信息分解为一系列向量,模仿语言模型处理单词句子的方式。
-
补丁标记化 (Patch Tokenization): 输入图像被划分为固定大小的正方形网格,通常为 16x16 像素。每个正方形被展平为一个向量,实际上变成了一个视觉标记 (token)。
-
线性投影 (Linear Projection): 这些展平的补丁通过一个可训练的线性层,以创建稠密的嵌入 (embeddings)。这一步将原始像素值映射到模型可以处理的高维空间中。
-
位置编码 (Positional Encoding): 由于该架构并行处理序列并且缺乏对顺序或空间的固有理解,因此将可学习的位置编码添加到补丁嵌入中。这使得模型能够保留关于每个补丁在原始图像中属于哪个位置的空间信息。
-
自注意力机制 (Self-Attention Mechanism): 序列进入 Transformer 编码器,在这里自注意力允许每个补丁与其他所有补丁同时交互。这使网络能够学习全局上下文,理解左上角的像素如何与右下角的像素相关联。
-
分类头 (Classification Head): 对于图像分类等任务,通常会在序列前置一个特殊的“类别标记 (class token)”。该标记的最终输出状态用作图像的聚合表示,然后将其馈送到分类器中,例如多层感知机 (MLP)。
视觉 Transformer 与 CNN 的对比#
尽管这两种架构都旨在理解视觉数据,但它们在操作理念上存在显著差异。CNN 具有强大的“归纳偏置”(称为平移不变性),这意味着它们本身假设局部特征(如边缘和纹理)无论其位置如何都很重要。这使得 CNN 具有很高的数据效率,并且在较小的数据集上非常有效。
相反,Vision Transformer 具有较少与图像相关的偏置。它们必须使用海量的训练数据(例如 JFT-300M 或完整的 ImageNet 数据集)从头开始学习空间关系。虽然这使得训练更加消耗计算资源,但它使 ViT 能够实现卓越的扩展;在拥有充足的数据和计算能力的情况下,它们可以通过捕获局部卷积可能遗漏的复杂全局结构来超越 CNN。
实际应用#
理解全局上下文的能力使得 ViT 在复杂、高风险的环境中特别有用。
- 医学图像分析: 在医疗保健 AI 中,ViT 用于分析诸如 MRI 或组织病理学切片等高分辨率扫描。例如,在肿瘤检测中,ViT 可以将组织中的微细纹理异常与切片上的更广泛结构变化关联起来,从而识别局部处理可能会忽略的恶性模式。
- 卫星图像与遥感: ViT 在卫星图像分析方面表现出色,在此类分析中,对象之间的关系跨越很大的距离。例如,将森林砍伐点连接到远处的伐木道路需要理解景观的“宏观全景”,而 ViT 的全局注意力在此任务中的表现优于标准 CNN 有限的感受野。
利用 Ultralytics 使用 Transformer#
ultralytics 库支持基于 Transformer 的架构,其中最显著的是 RT-DETR (实时检测 Transformer)。虽然旗舰产品 YOLO26 通常因其在边缘设备上的速度和精度平衡而备受青睐,但 RT-DETR 为优先考虑全局上下文的场景提供了一个强有力的替代方案。
以下 Python 示例演示了如何加载预训练的基于 Transformer 的模型并运行推理:
from ultralytics import RTDETR
# Load a pre-trained RT-DETR model (Vision Transformer-based)
model = RTDETR("rtdetr-l.pt")
# Run inference on an image source
# The model uses self-attention to detect objects globally
results = model("https://ultralytics.com/images/bus.jpg")
# Display the detection results
results[0].show()未来展望#
研究正在快速发展,以应对 ViT 高昂的计算成本。诸如 FlashAttention 等技术正在使这些模型更快且更节省内存。此外,将 CNN 的效率与 Transformer 的注意力相结合的混合架构正变得越来越普遍。对于希望管理这些高级工作流的团队,Ultralytics Platform 提供了一个统一的环境来注释数据、通过云端训练复杂的模型,并将它们部署到不同的端点。






