模型:
google/vit-base-patch16-224-in21k
任务:
特征提取许可:
apache-2.0Vision 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)获得的。当然,增加模型大小会得到更好的性能。
@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} }