🚀 Vision Transformer (base-sized model)
Vision Transformer (ViT) は、解像度224x224のImageNet - 21k(1400万枚の画像、21,843クラス)で事前学習され、解像度384x384のImageNet 2012(100万枚の画像、1,000クラス)でファインチューニングされたモデルです。このモデルは、Dosovitskiyらによる論文 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale で導入され、このリポジトリ で最初に公開されました。ただし、重みはRoss Wightmanによって timmリポジトリ から変換されたもので、彼がJAXからPyTorchに重みを変換しています。彼に感謝します。
🚀 クイックスタート
このモデルは画像分類に使用できます。興味のあるタスクでファインチューニングされたバージョンを探すには、モデルハブ を参照してください。
✨ 主な機能
Vision Transformer (ViT) は、教師あり学習で大量の画像コレクション、具体的には解像度224x224ピクセルのImageNet - 21kで事前学習されたトランスフォーマーエンコーダモデル(BERTのような)です。次に、このモデルは、100万枚の画像と1,000クラスからなるデータセットであるImageNet(ILSVRC2012とも呼ばれる)で、解像度384x384でファインチューニングされました。
📦 インストール
このモデルを使用するには、transformers
ライブラリが必要です。以下のコマンドでインストールできます。
pip install transformers
💻 使用例
基本的な使用法
以下は、COCO 2017データセットの画像を1,000の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-base-patch32-384')
model = ViTForImageClassification.from_pretrained('google/vit-base-patch32-384')
inputs = feature_extractor(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])
現在、特徴抽出器とモデルの両方がPyTorchをサポートしています。TensorflowとJAX/FLAXは近日公開予定で、ViTFeatureExtractorのAPIは変更される可能性があります。
📚 ドキュメント
モデルの説明
Vision Transformer (ViT) は、教師あり学習で大量の画像コレクション、具体的には解像度224x224ピクセルのImageNet - 21kで事前学習されたトランスフォーマーエンコーダモデル(BERTのような)です。次に、このモデルは、100万枚の画像と1,000クラスからなるデータセットであるImageNet(ILSVRC2012とも呼ばれる)で、解像度384x384でファインチューニングされました。
画像は固定サイズのパッチ(解像度32x32)のシーケンスとしてモデルに入力され、線形に埋め込まれます。分類タスクに使用するために、シーケンスの先頭に [CLS] トークンも追加されます。また、シーケンスをトランスフォーマーエンコーダのレイヤーに入力する前に、絶対位置埋め込みも追加されます。
モデルを事前学習することで、画像の内部表現を学習し、下流タスクに役立つ特徴を抽出するために使用できます。たとえば、ラベル付き画像のデータセットがある場合、事前学習されたエンコーダの上に線形層を配置して標準的な分類器をトレーニングすることができます。通常、[CLS] トークンの上に線形層を配置します。このトークンの最後の隠れ状態は、画像全体の表現と見なすことができます。
想定される用途と制限
このモデルは画像分類に使用できます。興味のあるタスクでファインチューニングされたバージョンを探すには、モデルハブ を参照してください。
🔧 技術詳細
学習データ
ViTモデルは、1400万枚の画像と21kクラスからなる ImageNet - 21k で事前学習され、100万枚の画像と1kクラスからなる ImageNet でファインチューニングされました。
学習手順
前処理
学習/検証中の画像の前処理の詳細は、こちら を参照してください。
画像は同じ解像度(事前学習時は224x224、ファインチューニング時は384x384)にリサイズ/リスケールされ、RGBチャネル全体で平均 (0.5, 0.5, 0.5) と標準偏差 (0.5, 0.5, 0.5) で正規化されます。
事前学習
モデルはTPUv3ハードウェア(8コア)でトレーニングされました。すべてのモデルバリアントはバッチサイズ4096でトレーニングされ、学習率のウォームアップは10kステップで行われます。ImageNetの場合、グローバルノルム1で勾配クリッピングを追加で適用することが有益であることがわかりました。事前学習の解像度は224です。
評価結果
いくつかの画像分類ベンチマークでの評価結果については、元の論文の表2と表5を参照してください。ファインチューニングでは、より高い解像度(384x384)で最良の結果が得られます。もちろん、モデルサイズを大きくすると、パフォーマンスが向上します。
BibTeXのエントリと引用情報
@misc{https://doi.org/10.48550/arxiv.2010.11929,
doi = {10.48550/ARXIV.2010.11929},
url = {https://arxiv.org/abs/2010.11929},
author = {Dosovitskiy, Alexey and Beyer, Lucas and Kolesnikov, Alexander and Weissenborn, Dirk and Zhai, Xiaohua and Unterthiner, Thomas and Dehghani, Mostafa and Minderer, Matthias and Heigold, Georg and Gelly, Sylvain and Uszkoreit, Jakob and Houlsby, Neil},
keywords = {Computer Vision and Pattern Recognition (cs.CV), Artificial Intelligence (cs.AI), Machine Learning (cs.LG), FOS: Computer and information sciences, FOS: Computer and information sciences},
title = {An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale},
publisher = {arXiv},
year = {2020},
copyright = {arXiv.org perpetual, non-exclusive license}
}
@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}
}
📄 ライセンス
このモデルはApache-2.0ライセンスの下で公開されています。