Vision Transformer (ViT)
探索 Vision Transformer (ViT) 在计算机视觉中的强大功能。了解它们如何通过捕获全局图像上下文来超越 CNN。
Vision Transformer (ViT) 是一种 神经网络架构,它将最初为 自然语言处理 (NLP) 设计的非常成功的 Transformer 模型应用于 计算机视觉 (CV) 任务。ViT 由 Google 研究人员在论文 “An Image is Worth 16x16 Words” 中提出,代表着对主流 卷积神经网络 (CNN) 架构的重大突破。ViT 不使用滑动滤波器处理图像,而是将图像视为一系列图像块,从而能够使用 自注意力机制 捕获图像不同部分之间的全局关系。
Vision Transformer 的工作原理
ViT背后的核心思想是以模仿Transformer处理文本的方式来处理图像。该过程涉及几个关键步骤:
- 图像分块: 首先将输入图像分割成固定大小的非重叠网格块。例如,一个 224x224 像素的图像可以被分成 196 个块,每个块 16x16 像素。
- Patch Embedding: 每个patch都被展平为一个向量。然后,这些向量被投影到一个较低维度的空间中,以创建“patch embeddings”。一个可学习的“位置嵌入”被添加到每个patch embedding中,以保留空间信息。
- Transformer 编码器:此嵌入序列被馈送到标准 Transformer 编码器中。通过其自注意力层,模型学习所有补丁对之间的关系,从而使其能够从第一层开始捕获整个图像中的全局上下文。
- 分类头:对于诸如图像分类之类的任务,会将一个额外的可学习嵌入(类似于BERT中的[CLS]令牌)添加到序列中。来自Transformer的相应输出将传递到最终分类层以产生预测。
ViT 与 CNN 的比较
虽然 ViT 和 CNN 都是 计算机视觉 中的基础架构,但它们的方法有显著差异:
- 归纳偏置: CNN 通过其 卷积 和池化层具有很强的归纳偏置(关于数据的假设),例如局部性和平移等变性。 ViT 具有弱得多的归纳偏置,使其更加灵活,但也更依赖于直接从数据中学习模式。
- 数据依赖性:由于其较弱的偏差,ViT 通常需要海量数据集(例如,ImageNet-21k)或广泛的预训练才能胜过最先进的 CNN。 对于较小的数据集,CNN 通常可以更好地泛化。 这就是迁移学习对于 ViT 至关重要的原因。
- 全局与局部上下文:CNN 从局部模式构建到全局模式的分层特征。相比之下,ViT 可以从最早的层对图像块之间的全局交互进行建模,从而可能更有效地捕获某些任务的更广泛的上下文。
- 计算成本:训练 ViT 在计算上可能非常密集,通常需要大量的 GPU 资源。PyTorch 和 TensorFlow 等框架提供了用于训练这些模型的实现。
应用与混合模型
ViT 在各种应用中都表现出了卓越的性能,尤其是在理解全局上下文至关重要的情况下。
- 医学影像分析: ViT 在分析医学扫描图像(如 MRI 或组织病理学图像)方面非常有效。例如,在肿瘤检测中,ViT 可以识别远处组织之间的关系,从而比仅关注局部纹理的模型更准确地对肿瘤进行分类。
- 自动驾驶: 在自动驾驶汽车中,ViT 可以分析复杂的场景以进行物体检测和分割。通过全局处理整个场景,他们可以更好地理解车辆、行人和基础设施之间的交互,正如多项汽车人工智能研究所详述的那样。
ViT 的成功也启发了混合架构。诸如RT-DETR之类的模型将 CNN 主干网络与基于 Transformer 的编码器-解码器相结合,以实现高效的特征提取并对对象关系进行建模。这种方法旨在获得两全其美的效果:CNN 的效率和 Transformer 的全局上下文感知能力。
对于许多实时应用,尤其是在资源受限的 边缘设备 上,像 Ultralytics YOLO 系列(例如,YOLOv8 和 YOLO11)这样高度优化的基于 CNN 的模型,通常能更好地平衡速度和准确性。您可以查看 RT-DETR 和 YOLO11 之间的详细比较,以了解其中的权衡。ViT 和 CNN 之间的选择最终取决于具体的任务、可用数据和计算预算。