项目介绍:dinov2-small-imagenet1k-1-layer
背景介绍
dinov2-small-imagenet1k-1-layer 是一个小型的视觉转换器(Vision Transformer, ViT)模型,使用 DINOv2 方法经过训练。这一方法由 Oquab 等人在他们的论文《DINOv2: Learning Robust Visual Features without Supervision》中首次提出,并在 GitHub 仓库中首次发布。这个项目由 Hugging Face 团队编写文档,原始发布团队并未提供模型说明。
模型描述
视觉转换器(ViT)是一种类似 BERT 的转换器编码器模型,通过自监督方式预训练在大量图像上。图像以固定大小的图块序列形式输入到模型中,这些图块首先被线性嵌入。除了图块以外,还在序列的开头添加一个 [CLS] 标记,为分类任务提供支持。此外,还在输入序列前添加绝对位置嵌入。
需要注意的是,这个模型并不包含任何微调的头部。通过预训练,模型能够学习图像的内部表示,这种能力可以用于提取可供下游任务使用的特征:比如,如果拥有一个标记图像的数据集,可以在预训练过的编码器上加一个线性层来训练标准分类器。通常,这个线性层放在 [CLS] 标记的顶部,因为这个标记的最后一个隐藏状态可以视为整个图像的表示。
预期使用与限制
用户可以使用此模型在ImageNet 1000个标签中对图像进行分类。用户还可以在模型中心中查看其他针对特定任务微调过的版本。
使用方法
以下是如何使用该模型的示例:
from transformers import AutoImageProcessor, AutoModelForImageClassification
from PIL import Image
import requests
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
processor = AutoImageProcessor.from_pretrained('facebook/dinov2-small-imagenet1k-1-layer')
model = AutoModelForImageClassification.from_pretrained('facebook/dinov2-small-imagenet1k-1-layer')
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
predicted_class_idx = logits.argmax(-1).item()
print("Predicted class:", model.config.id2label[predicted_class_idx])
相关论文参考
如果需要引用该模型,可以使用以下 BibTeX 条目:
misc{oquab2023dinov2,
title={DINOv2: Learning Robust Visual Features without Supervision},
author={Maxime Oquab and Timothée Darcet and Théo Moutakanni and Huy Vo and Marc Szafraniec and Vasil Khalidov and Pierre Fernandez and Daniel Haziza and Francisco Massa and Alaaeldin El-Nouby and Mahmoud Assran and Nicolas Ballas and Wojciech Galuba and Russell Howes and Po-Yao Huang and Shang-Wen Li and Ishan Misra and Michael Rabbat and Vasu Sharma and Gabriel Synnaeve and Hu Xu and Hervé Jegou and Julien Mairal and Patrick Labatut and Armand Joulin and Piotr Bojanowski},
year={2023},
eprint={2304.07193},
archivePrefix={arXiv},
primaryClass={cs.CV}
}