项目介绍:vit-large-patch16-384
项目背景
Vit-large-patch16-384是一个大尺寸的视觉Transformer模型(Vision Transformer,简称ViT)。该模型最初在ImageNet-21k数据集上进行预训练,分辨率为224x224像素,包含了约1400万张图片和21843个类别。随后,该模型在ImageNet 2012数据集上进行了微调,微调时的分辨率提升到了384x384像素,ImageNet 2012数据集包含约100万张图片和1000个类别。
该模型由Dosovitskiy等人提出于论文《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》中首次发布,并由Ross Wightman从JAX框架转换至PyTorch框架。
模型描述
ViT是一种类BERT的Transformer编码器模型,先在一个大型图片集合(ImageNet-21k)上以监督的方式进行了预训练,然后在ImageNet数据集上进行了微调。图片在模型中被表示为一系列固定大小的图像块(16x16像素),这些图像块经过线性嵌入后,并在序列开始位置加入一个用于分类的[CLS]标记。
通过预训练,模型学习到图片的内部表示,这些表示可以用于提取对下游任务有用的特征。这意味着,如果有一个带有标签的图片数据集,可以使用它在预训练编码器之上添加一个线性层来训练一个标准分类器。通常,此线性层放置在[CLS]标记上,因为这个标记的最后隐藏状态可以被视为整个图像的表示。
预期用途与限制
此模型可用于图像分类任务。在此处可以找到针对特定任务微调过的模型版本。
如何使用
以下是一个如何使用该模型将COCO 2017数据集的图像分类为1000个ImageNet类别的示例代码:
from transformers import ViTFeatureExtractor, ViTForImageClassification
from PIL import Image
import requests
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
feature_extractor = ViTFeatureExtractor.from_pretrained('google/vit-large-patch16-384')
model = ViTForImageClassification.from_pretrained('google/vit-large-patch16-384')
inputs = feature_extractor(images=image, return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
# 模型预测1000个ImageNet类别之一
predicted_class_idx = logits.argmax(-1).item()
print("Predicted class:", model.config.id2label[predicted_class_idx])
当前,该特征提取器和模型支持PyTorch框架,Tensorflow和JAX/FLAX版的支持即将到来。
训练数据
ViT模型是在ImageNet-21k数据集上预训练的,此数据集包含了1400万张图片和21843个类别,微调使用的是ImageNet数据集,用于图像分类和识别。
训练过程
-
预处理:在训练和验证过程中,图像根据输入大小(预训练时为224x224,微调时为384x384)进行调整,并对RGB通道进行标准化。
-
预训练:模型在TPUv3(8核心)硬件上训练,批量大小为4096,学习率在10000步内进行预热。在ImageNet上,梯度裁剪应用于全局标准为1,以提高训练效果。
评估结果
在多个图像分类基准上的评估结果可参考原论文中的表2和表5。在微调阶段,使用更高的分辨率(384x384)能获得最佳结果,而增大模型尺寸也能提高性能。
这就是vit-large-patch16-384项目的全面介绍,旨在帮助大家了解该模型的结构、用途和使用方法。