CV(计算机视觉)中的 **ViT** 全称为 **Vision Transformer**,是一种基于Transformer架构的深度学习模型,主要用于图像分类、检测、分割等视觉任务。 --- ## 🚩 ViT(Vision Transformer)的背景 - ViT 由Google Research团队于2020年提出,论文题为:[**"An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale"**](https://arxiv.org/abs/2010.11929)。 - 之前Transformer在NLP领域广泛使用(如BERT、GPT系列),但在CV领域主流模型通常是CNN(卷积神经网络),如ResNet、DenseNet等。 - ViT的提出标志着Transformer架构正式跨入CV领域,带来了视觉模型设计的新思路。 --- ## 🖼️ ViT 的核心思想 传统的CNN模型使用卷积提取图像特征,而ViT直接使用**Transformer结构处理图像**: - 将输入图像拆分成多个固定大小的小块(Patch)。 - 每个Patch通过线性映射(Linear Projection)得到一个特征向量。 - 将这些特征向量视为序列输入到Transformer中。 - 利用Transformer的Attention机制学习图像Patch之间的关联,最终进行图像分类或其他视觉任务。 简言之,ViT把图像"分割成类似文本序列的结构",并用Transformer捕捉这些序列的内在关系。 --- ## 📌 ViT 模型结构示意图 ```Java 输入图像 → 拆分成Patch → 线性映射 → 加入位置编码 → Transformer Encoder(Attention层)→ 分类头 → 输出类别 ``` 具体步骤: 1. **图像分割**:将图片 (如224×224像素) 分割为多个Patch(例如每个16×16像素)。 2. **Embedding**:每个Patch通过一个Linear层映射成固定长度的向量。 3. **加入位置编码**(Positional Embedding):提供Patch的位置信息(类似Transformer在文本中的应用)。 4. **Transformer Encoder**:多个Transformer层(包含Multi-head Self-Attention和MLP层)对Patch序列特征进行提取和融合。 5. **分类头**:使用一个特殊的分类token(class token)完成图像分类任务。 --- ## 🌟 ViT的优势与特点 - **捕获全局信息**:Transformer的Attention机制能够从全局尺度捕捉图像中远距离的依赖关系,而CNN则更多地关注局部信息。 - **可扩展性强**:在大规模数据集和大尺寸模型训练中表现尤为突出。 - **泛化能力强**:在大规模预训练后,ViT在迁移学习任务中表现优异。 --- ## 📊 ViT的应用场景 - 图像分类(Image Classification) - 目标检测(Object Detection) - 图像分割(Image Segmentation) - 视频理解(Video Understanding) - 多模态学习(Multimodal Learning)等。 --- ## 🚨 ViT的挑战 - ViT相比CNN需要更多的训练数据才能发挥出色性能,通常需要大规模预训练(如ImageNet-21k、JFT-300M)。 - ViT对于图像分辨率敏感,高分辨率输入可能带来巨大的计算负担。 - 后续发展出许多ViT变种,如Swin Transformer等,以提高计算效率和适配更小的数据规模。 --- ## 🔖 常见的ViT变种与发展 - **DeiT (Data-efficient Image Transformers)**:提高了Transformer在小数据集上的性能。 - **Swin Transformer**:提出了层级式结构,引入了局部窗口注意力机制。 - **CvT、CrossViT** 等:结合CNN思想或跨尺度结构进一步提升性能。 --- 综上所述,**ViT** 是视觉领域中Transformer架构的重要突破,开创了CV领域新的模型范式。