🚀 視覺變換器(小型模型):基於DINOv2並使用寄存器訓練
本項目是基於DINOv2訓練的視覺變換器(小型模型),並使用了寄存器。它能有效解決圖像特徵提取和分類問題,為下游圖像任務提供強大的特徵表示。
🚀 快速開始
本模型是由Darcet等人在論文 Vision Transformers Need Registers 中提出的視覺變換器(ViT)模型,並首次在 此倉庫 發佈。
需注意,發佈帶有寄存器的DINOv2團隊並未為此模型編寫模型卡片,此卡片由Hugging Face團隊編寫。
✨ 主要特性
模型描述
視覺變換器(ViT)是一種類似BERT的變換器編碼器模型,最初被引入用於在ImageNet上進行有監督的圖像分類(原始論文)。
隨後,人們找到了讓ViT在無監督圖像特徵提取(即學習有意義的特徵,也稱為嵌入)方面表現出色的方法,無需任何標籤。相關示例論文包括 DINOv2 和 MAE。
DINOv2的作者注意到ViT在注意力圖中存在偽影,這是由於模型將一些圖像塊用作“寄存器”。作者提出了一個解決方案:添加一些新的令牌(稱為“寄存器”令牌),僅在預訓練期間使用(之後丟棄)。這樣做的結果是:

有/無寄存器訓練的各種模型注意力圖可視化。取自 原始論文。
需要注意的是,此模型不包含任何微調的頭部。
通過預訓練模型,它學習到圖像的內部表示,可用於提取對下游任務有用的特徵:例如,如果您有一個帶標籤的圖像數據集,可以在預訓練的編碼器上放置一個線性層來訓練一個標準分類器。通常,會在 [CLS] 令牌上放置一個線性層,因為該令牌的最後隱藏狀態可以看作是整個圖像的表示。
預期用途和限制
您可以使用原始模型將圖像分類到1000個可能的ImageNet類別中。您可以在 模型中心 查找針對您感興趣的任務進行微調的版本。
💻 使用示例
基礎用法
from transformers import AutoImageProcessor, AutoModelForImageClassification
import torch
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-with-registers-small-imagenet1k-1-layer')
model = AutoModelForImageClassification.from_pretrained('facebook/dinov2-with-registers-small-imagenet1k-1-layer')
inputs = processor(images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
class_idx = outputs.logits.argmax(-1).item()
print("Predicted class:", model.config.id2label[class_idx])
BibTeX引用
@misc{darcet2024visiontransformersneedregisters,
title={Vision Transformers Need Registers},
author={Timothée Darcet and Maxime Oquab and Julien Mairal and Piotr Bojanowski},
year={2024},
eprint={2309.16588},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2309.16588},
}
📄 許可證
本項目採用Apache-2.0許可證。