视觉转换器(ViT)
探索视觉变换器 (ViT) 在计算机视觉中的强大功能。了解它们如何通过捕捉全局图像上下文来超越 CNN。
视觉转换器(ViT)是一种神经网络架构,它将最初设计用于自然语言处理(NLP)的非常成功的转换器模型应用于计算机视觉(CV)任务。ViT 由谷歌研究人员在论文"一幅图像胜过 16x16 个单词 "中提出,与主流的卷积神经网络(CNN)架构大相径庭。ViT 不使用滑动滤波器处理图像,而是将图像视为一连串补丁,从而能够利用自我注意机制捕捉图像不同部分之间的全局关系。
视觉变形器的工作原理
ViT 背后的核心理念是模仿变形金刚处理文字的方式来处理图像。处理过程包括几个关键步骤:
- 图像修补:首先将输入图像分割成固定大小、不重叠的补丁网格。例如,一幅 224x224 像素的图像可能会被分割成 196 个补丁,每个补丁的大小为 16x16 像素。
- 补丁嵌入:将每个补丁平铺成单一向量。然后将这些向量投影到一个低维空间,创建 "补丁嵌入"。在每个补丁嵌入中添加可学习的 "位置嵌入",以保留空间信息。
- 变换器编码器:将嵌入序列输入标准 Transformer 编码器。通过其自我关注层,该模型可以学习所有斑块对之间的关系,从而从第一层开始就能捕捉整个图像的全局上下文。
- 分类头:对于图像分类等任务,会在序列中添加额外的可学习嵌入(类似于BERT 中的 [CLS] 标记)。变换器的相应输出被传递到最后的分类层,以产生预测结果。
ViT 与 CNN
虽然 ViT 和 CNN 都是计算机视觉领域的基础架构,但它们在方法上有很大不同:
- 归纳偏差:CNN 通过卷积层和池化层具有很强的归纳偏差(对数据的假设),如局部性和平移等差性。ViT 的归纳偏差要弱得多,这使其更加灵活,但也更依赖于直接从数据中学习模式。
- 数据依赖性:由于偏差较小,ViT 通常需要大规模数据集(如ImageNet-21k)或大量预训练才能超越最先进的 CNN。对于较小的数据集,CNN 的泛化效果往往更好。这就是为什么迁移学习对 ViTs 至关重要。
- 全局背景与局部背景:CNN 可从局部模式到全局模式建立分层特征。相比之下,ViTs 可以从最早期的图层开始,为斑块之间的全局互动建模,从而在某些任务中更有效地捕捉更广泛的上下文。
- 计算成本:ViT 的训练需要大量计算,通常需要大量GPU资源。PyTorch和TensorFlow等框架为训练这些模型提供了实现方法。
应用和混合模型
ViT 在各种应用中表现出卓越的性能,尤其是在理解全球背景非常关键的情况下。
- 医学影像分析:ViT 在分析核磁共振成像或组织病理学图像等医学扫描方面非常有效。例如,在肿瘤检测中,ViT 可以识别远处组织之间的关系,与只关注局部纹理的模型相比,有助于更准确地对肿瘤进行分类。
- 自动驾驶:在自动驾驶汽车中,ViT 可以分析复杂场景,进行物体检测和分割。通过对整个场景进行全局处理,它们可以更好地理解车辆、行人和基础设施之间的相互作用,多项汽车人工智能研究对此进行了详细阐述。
ViTs 的成功也激发了混合架构的灵感。RT-DETR等模型将用于高效特征提取的 CNN主干网与基于变换器的编码器-解码器相结合,为对象关系建模。这种方法旨在获得两全其美的效果:CNN 的高效率和 Transformer 的全局上下文感知。
对于许多实时应用,尤其是资源有限的边缘设备,高度优化的基于 CNN 的模型,如Ultralytics YOLO系列(如YOLOv8和YOLO11),往往能更好地兼顾速度和准确性。您可以查看RT-DETR 和 YOLO11 的详细比较,以了解其中的利弊权衡。ViT 和 CNN 之间的选择最终取决于具体任务、可用数据和计算预算。