🚀 BEiT(大型モデル、ImageNet-1kで微調整済み)
BEiTモデルは、解像度224x224のImageNet-21k(1400万枚の画像、21841カテゴリ)で自己教師付き学習による事前学習を行い、解像度512x512のImageNet 2012(100万枚の画像、1000カテゴリ)で微調整されています。このモデルはHangbo Bao、Li Dong、Furu Weiによって論文BEIT: BERT Pre-Training of Image Transformersで提案され、このリポジトリで初めて公開されました。
⚠️ 重要な注意事項
BEiTを公開したチームはこのモデルのモデルカードを作成していません。このモデルカードはHugging Faceチームによって作成されています。
🚀 クイックスタート
BEiTモデルは画像分類タスクに使用できます。オリジナルのモデルを使用して画像分類を行うことも、モデルセンターで関心のあるタスクに合わせて微調整されたバージョンを探すこともできます。
✨ 主な機能
- 自己教師付き事前学習:大規模画像データセットであるImageNet-21kで自己教師付き事前学習を行い、画像の内在的な表現を学習します。
- 相対位置埋め込み:元のViTモデルとは異なり、BEiTモデルは(T5に似た)相対位置埋め込みを使用し、絶対位置埋め込みではありません。
- 複数の分類方法:パッチの最終隠れ状態を平均プーリングするか、[CLS]トークンの最終隠れ状態に線形層を配置することで、画像分類を行うことができます。
📚 ドキュメント
モデルの説明
BEiTモデルは、BERTに似たトランスフォーマーエンコーダモデルであるビジュアルトランスフォーマー(ViT)です。元のViTモデルとは異なり、BEiTは224x224ピクセルの大規模画像データセットImageNet-21kで自己教師付き学習による事前学習を行います。モデルの事前学習目標は、マスクされたパッチに基づき、OpenAIのDALL-EのVQ-VAEエンコーダから視覚トークンを予測することです。
次に、モデルは100万枚の画像と1000カテゴリを含むImageNet(ILSVRC2012とも呼ばれる)で教師付き学習による微調整を行います。このときの解像度も224x224です。
画像は固定サイズのパッチシーケンス(解像度16x16)としてモデルに入力され、線形埋め込みが行われます。元のViTモデルとは異なり、BEiTモデルは(T5に似た)相対位置埋め込みを使用し、絶対位置埋め込みではありません。また、画像分類はパッチの最終隠れ状態を平均プーリングすることで行われ、[CLS]トークンの最終隠れ状態に線形層を配置するのではありません。
モデルを事前学習することで、画像の内在的な表現を学習し、下流のタスクに有用な特徴を抽出することができます。たとえば、ラベル付きの画像データセットがある場合、事前学習されたエンコーダの上に線形層を配置して標準的な分類器を訓練することができます。通常、[CLS]トークンに線形層を配置することが多いです。なぜなら、このトークンの最後の隠れ状態は画像全体の表現と見なすことができるからです。または、パッチ埋め込みの最終隠れ状態を平均プーリングし、その上に線形層を配置することもできます。
想定される用途と制限
オリジナルのモデルを使用して画像分類を行うことができます。モデルセンターで、関心のあるタスクに合わせて微調整されたバージョンを探すこともできます。
💻 使用例
基本的な使用法
以下は、このモデルを使用してCOCO 2017データセットの画像を1000のImageNetカテゴリのいずれかに分類する例です。
from transformers import BeitFeatureExtractor, BeitForImageClassification
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 = BeitFeatureExtractor.from_pretrained('microsoft/beit-large-patch16-512')
model = BeitForImageClassification.from_pretrained('microsoft/beit-large-patch16-512')
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をサポートしています。
🔧 技術詳細
学習データ
BEiTモデルは、ImageNet-21k(1400万枚の画像と21kのカテゴリを含む)で事前学習を行い、ImageNet(100万枚の画像と1kのカテゴリを含む)で微調整を行っています。
学習プロセス
前処理
学習/検証中の画像前処理の正確な詳細は、ここで確認できます。
画像は同じ解像度(224x224)にリサイズ/再スケールされ、RGBチャンネルで平均(0.5, 0.5, 0.5)、標準偏差(0.5, 0.5, 0.5)で正規化されます。
事前学習
すべての事前学習関連のハイパーパラメータについては、元の論文の15ページを参照してください。
評価結果
いくつかの画像分類ベンチマークの評価結果については、元の論文の表1と表2を参照してください。微調整に関しては、解像度が高い(384x384)場合に最良の結果が得られます。もちろん、モデルのサイズを大きくすると性能が向上します。
引用情報
@article{DBLP:journals/corr/abs-2106-08254,
author = {Hangbo Bao and
Li Dong and
Furu Wei},
title = {BEiT: {BERT} Pre-Training of Image Transformers},
journal = {CoRR},
volume = {abs/2106.08254},
year = {2021},
url = {https://arxiv.org/abs/2106.08254},
archivePrefix = {arXiv},
eprint = {2106.08254},
timestamp = {Tue, 29 Jun 2021 16:55:04 +0200},
biburl = {https://dblp.org/rec/journals/corr/abs-2106-08254.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@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ライセンスの下で提供されています。