🚀 ONNX 转换的 ViT(基础大小模型)
本项目是 ViT-base 的 ONNX 转换版本,带有分类头,可用于图像分类任务。
🚀 快速开始
本项目的 Vision Transformer(ViT)模型在 ImageNet-21k(1400 万张图像,21843 个类别)上以 224x224 分辨率进行预训练,并在 ImageNet 2012(100 万张图像,1000 个类别)上以相同分辨率进行微调。该模型由 Dosovitskiy 等人在论文 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 中提出,并首次在 此仓库 发布。不过,权重是从 Ross Wightman 的 timm 仓库 转换而来,他已将权重从 JAX 转换为 PyTorch,在此对他表示感谢。
需要注意的是,发布 ViT 的团队并未为此模型撰写模型卡片,此模型卡片由 Hugging Face 团队编写。
✨ 主要特性
- 基于 Vision Transformer(ViT)架构,在大规模图像数据集上预训练,具有强大的图像特征提取能力。
- 经过 ONNX 转换,可在支持 ONNX 的推理引擎上高效运行。
- 适用于图像分类任务,可对图像进行准确的类别预测。
📦 安装指南
文档中未提及具体安装步骤,可参考相关依赖库的官方文档进行安装,如 transformers
、optimum
等。
💻 使用示例
基础用法
以下是如何使用此模型将 COCO 2017 数据集中的图像分类为 1000 个 ImageNet 类别之一的示例:
from transformers import AutoFeatureExtractor
from optimum.onnxruntime import ORTModelForImageClassification
from optimum.pipelines import pipeline
feature_extractor = AutoFeatureExtractor.from_pretrained("optimum/vit-base-patch16-224")
model = ORTModelForImageClassification.from_pretrained("optimum/vit-base-patch16-224")
onnx_img_classif = pipeline(
"image-classification", model=model, feature_extractor=feature_extractor
)
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
pred = onnx_img_classif(url)
print("Top-5 predicted classes:", pred)
📚 详细文档
模型描述
Vision Transformer(ViT)是一种基于 Transformer 编码器的模型(类似 BERT),它在大规模图像数据集 ImageNet-21k 上以 224x224 像素的分辨率进行有监督的预训练。之后,该模型在 ImageNet(也称为 ILSVRC2012)数据集上进行微调,该数据集包含 100 万张图像和 1000 个类别,分辨率同样为 224x224。
图像以固定大小的图像块序列(分辨率为 16x16)的形式输入到模型中,并进行线性嵌入。同时,会在序列开头添加一个 [CLS] 标记,用于分类任务。在将序列输入到 Transformer 编码器的各层之前,还会添加绝对位置嵌入。
通过预训练,模型学习到图像的内部表示,可用于提取对下游任务有用的特征。例如,如果有一个带标签的图像数据集,可以在预训练的编码器之上放置一个线性层,训练一个标准分类器。通常会在线性层放置在 [CLS] 标记之上,因为该标记的最后隐藏状态可以看作是整个图像的表示。
预期用途和局限性
可以使用原始模型进行图像分类。可在 模型中心 查找针对感兴趣任务的微调版本。
🔧 技术细节
训练数据
ViT 模型在 ImageNet-21k 上进行预训练,该数据集包含 1400 万张图像和 21k 个类别;并在 ImageNet 上进行微调,该数据集包含 100 万张图像和 1k 个类别。
训练过程
预处理
训练/验证期间图像预处理的具体细节可在 此处 找到。图像会被调整大小/重新缩放至相同的分辨率(224x224),并在 RGB 通道上进行归一化,均值为 (0.5, 0.5, 0.5),标准差为 (0.5, 0.5, 0.5)。
预训练
模型在 TPUv3 硬件(8 核)上进行训练。所有模型变体均以 4096 的批量大小和 10k 步的学习率预热进行训练。对于 ImageNet,作者发现额外应用全局范数为 1 的梯度裁剪是有益的。训练分辨率为 224。
评估结果
关于多个图像分类基准的评估结果,请参考原论文的表 2 和表 5。需要注意的是,在微调时,使用更高的分辨率(384x384)可获得最佳结果。当然,增加模型大小也会提高性能。
📄 许可证
本项目采用 Apache-2.0 许可证。
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}
}