英文

Vision Transformer (基础模型)

Vision Transformer (ViT) 模型在 ImageNet-21k 数据集(1400万张图像,21843个类别)上进行了预训练,分辨率为224x224。该模型在 Dosovitskiy等人的论文 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 中首次提出,并在 this repository 中首次发布。然而,模型的权重是由 Ross Wightman 从 timm repository 中转换而来的,而他已经将权重从 JAX 转换为 PyTorch。感谢他的贡献。

免责声明:发布 ViT 的团队没有为该模型编写模型卡片,因此这个模型卡片是由 Hugging Face 团队编写的。

模型描述

Vision Transformer (ViT) 是一个在大量图像上以有监督方式进行预训练的 Transformer 编码器模型(类似于 BERT),分辨率为224x224像素。

图像以固定大小的补丁序列(16x16 分辨率)的形式被呈现给模型,然后线性嵌入。我们还在序列的开头添加一个 [CLS] 标记以用于分类任务。在将序列提供给 Transformer 编码器的层之前,还添加了绝对位置嵌入。

需要注意的是,该模型不提供任何经过微调的头部,因为这些头部已被 Google 研究人员清零。但是,模型包括了预训练的池化器,可以用于下游任务(例如图像分类)。

通过预训练模型,它学习了图像的内部表示,可以用于提取用于下游任务的特征:例如,如果您有一个标记图像的数据集,可以在预训练的编码器之上放置一个线性层来训练一个标准分类器。通常在 [CLS] 标记之上放置一个线性层,因为该标记的最后隐藏状态可以看作是整个图像的表示。

预期用途和限制

您可以将原始模型用于图像分类。查看 model hub 以找到您感兴趣的任务上的微调版本。

如何使用

以下是如何在 PyTorch 中使用此模型:

from transformers import ViTImageProcessor, ViTModel
from PIL import Image
import requests

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)

processor = ViTImageProcessor.from_pretrained('google/vit-base-patch16-224-in21k')
model = ViTModel.from_pretrained('google/vit-base-patch16-224-in21k')
inputs = processor(images=image, return_tensors="pt")

outputs = model(**inputs)
last_hidden_states = outputs.last_hidden_state

以下是如何在 JAX/Flax 中使用此模型:

from transformers import ViTImageProcessor, FlaxViTModel
from PIL import Image
import requests

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)

processor = ViTImageProcessor.from_pretrained('google/vit-base-patch16-224-in21k')
model = FlaxViTModel.from_pretrained('google/vit-base-patch16-224-in21k')

inputs = processor(images=image, return_tensors="np")
outputs = model(**inputs)
last_hidden_states = outputs.last_hidden_state

训练数据

ViT 模型是在 ImageNet-21k 上进行预训练的,该数据集包含1400万张图像和21k个类别。

训练过程

预处理

训练/验证期间图像的预处理的详细信息可以在 here 找到。

图像被调整大小/缩放到相同的分辨率(224x224),并在 RGB 通道上使用均值(0.5, 0.5, 0.5)和标准差(0.5, 0.5, 0.5)进行归一化。

预训练

模型在 TPUv3 硬件(8个核心)上进行训练。所有模型变体都使用4096的批量大小和10000个步骤的学习率预热进行训练。对于 ImageNet,作者发现在全局范数1的情况下额外应用梯度裁剪是有益的。预训练分辨率为224。

评估结果

关于多个图像分类基准的评估结果,请参考原论文的表2和表5。请注意,对于微调任务,最佳结果是在更高的分辨率下(384x384)获得的。当然,增加模型大小会得到更好的性能。

BibTeX 引用和引文信息

@misc{wu2020visual,
      title={Visual Transformers: Token-based Image Representation and Processing for Computer Vision}, 
      author={Bichen Wu and Chenfeng Xu and Xiaoliang Dai and Alvin Wan and Peizhao Zhang and Zhicheng Yan and Masayoshi Tomizuka and Joseph Gonzalez and Kurt Keutzer and Peter Vajda},
      year={2020},
      eprint={2006.03677},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}
@inproceedings{deng2009imagenet,
  title={Imagenet: A large-scale hierarchical image database},
  author={Deng, Jia and Dong, Wei and Socher, Richard and Li, Li-Jia and Li, Kai and Fei-Fei, Li},
  booktitle={2009 IEEE conference on computer vision and pattern recognition},
  pages={248--255},
  year={2009},
  organization={Ieee}
}