🚀 ビジュアルトランスフォーマー(大型モデル)
ビジュアルトランスフォーマー(ViT)は、Transformerアーキテクチャに基づく画像認識モデルです。大規模な画像データで事前学習を行い、特定のタスクで微調整することで、画像の特徴を効果的に抽出し、画像分類などの下流タスクに利用できます。
🚀 クイックスタート
ビジュアルトランスフォーマー(ViT)は、Transformerエンコーダに基づくモデル(BERTに似ています)で、大規模な画像データセットであるImageNet - 21k(1400万枚の画像と21843のクラスを含む)で教師あり事前学習を行います。解像度は224x224ピクセルです。その後、このモデルはImageNet(ILSVRC2012とも呼ばれ、100万枚の画像と1000のクラスを含む)で微調整され、解像度も同じく224x224です。
✨ 主な機能
- 事前学習と微調整:ImageNet - 21kで事前学習し、ImageNetで微調整することで、画像の内在的な表現を学習し、下流タスクの特徴抽出に利用できます。
- 画像入力処理:画像を固定サイズのパッチ(解像度16x16)に分割し、線形埋め込みを行った後、分類タスク用に[CLS]トークンを追加し、絶対位置埋め込みを行います。
- 下流タスクの応用:事前学習したエンコーダに線形層を追加し、標準的な分類器を学習させて画像分類に利用できます。
💻 使用例
基本的な使用法
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-224')
model = ViTForImageClassification.from_pretrained('google/vit-large-patch16-224')
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])
📚 ドキュメント
モデルの説明
ビジュアルトランスフォーマー(ViT)は、Transformerエンコーダに基づくモデル(BERTに似ています)で、大規模な画像データセットであるImageNet - 21k(1400万枚の画像と21843のクラスを含む)で教師あり事前学習を行います。解像度は224x224ピクセルです。その後、このモデルはImageNet(ILSVRC2012とも呼ばれ、100万枚の画像と1000のクラスを含む)で微調整され、解像度も同じく224x224です。
画像は固定サイズのパッチ列(解像度16x16)としてモデルに入力され、線形埋め込みが行われます。また、列の先頭には分類タスク用の[CLS]トークンが追加されます。列をTransformerエンコーダ層に入力する前に、絶対位置埋め込みも追加されます。
事前学習により、モデルは画像の内在的な表現を学習し、下流タスクに有用な特徴を抽出するために利用できます。たとえば、ラベル付きの画像データセットがある場合、事前学習したエンコーダに線形層を追加して、標準的な分類器を学習させることができます。通常、[CLS]トークンの最後の隠れ状態は画像全体の表現と見なせるため、線形層の上にさらに線形層を追加することが多いです。
想定される用途と制限
元のモデルを使用して画像分類を行うことができます。関心のあるタスクに合わせて微調整されたバージョンを探すには、モデルセンターを参照してください。
学習データ
ViTモデルはImageNet - 21kで事前学習され、このデータセットは1400万枚の画像と21000のクラスを含みます。また、ImageNetで微調整され、このデータセットは100万枚の画像と1000のクラスを含みます。
学習プロセス
前処理
学習/検証時の画像前処理の詳細はこちらで確認できます。
画像は同じ解像度(224x224)にリサイズ/スケーリングされ、RGBチャネルで平均(0.5, 0.5, 0.5)、標準偏差(0.5, 0.5, 0.5)で正規化されます。
事前学習
このモデルはTPUv3ハードウェア(8コア)で学習されました。すべてのモデルバリエーションは、バッチサイズ4096と学習率10000ステップのウォームアップで学習されました。ImageNetの場合、著者はグローバルノルム1の勾配クリッピングを追加することが有益であることを発見しました。事前学習の解像度は224です。
評価結果
いくつかの画像分類ベンチマークの評価結果については、元の論文の表2と表5を参照してください。微調整の場合は、より高い解像度(384x384)で最良の結果が得られることに注意してください。もちろん、モデルサイズを大きくすると性能が向上します。
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}
}
📄 ライセンス
このプロジェクトはApache - 2.0ライセンスを採用しています。
属性 |
詳細 |
モデルタイプ |
ビジュアルトランスフォーマー(大型モデル) |
学習データ |
事前学習データ:ImageNet - 21k(1400万枚の画像、21843のクラス);微調整データ:ImageNet(100万枚の画像、1000のクラス) |
⚠️ 重要な注意
現在、特徴抽出器とモデルはどちらもPyTorchをサポートしています。TensorflowとJAX/FLAXのサポートは間もなく追加され、ViTFeatureExtractorのAPIは変更される可能性があります。
💡 使用上のヒント
画像分類タスクを行う場合は、まずモデルセンターの微調整されたバージョンを参照し、自分のタスクに適したモデルを選択して使用してください。