Model Overview
Model Features
Model Capabilities
Use Cases
🚀 IDEFICS
このモデル名の発音方法は、Youtubeチュートリアルをご覧ください。
IDEFICS(Image-aware Decoder Enhanced à la Flamingo with Interleaved Cross-attentionS)は、Deepmindによって開発された閉ソースの視覚言語モデルであるFlamingoをオープンアクセスで再現したものです。GPT - 4と同様に、このマルチモーダルモデルは画像とテキストの任意のシーケンスを入力として受け取り、テキスト出力を生成します。IDEFICSは、公開されているデータとモデルのみを使用して構築されています。
このモデルは、画像に関する質問に答えたり、視覚的な内容を説明したり、複数の画像を元にストーリーを作成したり、または視覚入力なしで純粋な言語モデルとして動作することができます。
IDEFICSは、コンテキスト内の少ないショット学習で評価した場合、視覚的質問応答(自由記述型および選択肢型)、画像キャプショニング、画像分類など、様々な画像 - テキストベンチマークで、元の閉ソースモデルと同等の性能を発揮します。このモデルには、800億パラメータの大規模バージョンと、90億パラメータのバージョンの2種類があります。
また、教師付き微調整と命令微調整のデータセットの混合データでベースモデルを微調整しています。これにより、下流の性能が大幅に向上し、モデルを会話設定でより使いやすくなります。具体的には、idefics - 80b - instructとidefics - 9b - instructです。これらの命令微調整モデルは性能が高いため、ゼロからモデルを使用する場合はこれらを優先することをおすすめします。
IDEFICSのトレーニング中に遭遇した技術的な課題の詳細については、こちらをご覧ください。
デモを試してみましょう!
🚀 クイックスタート
モデルの概要
IDEFICSは、画像とテキストのシーケンスを入力として受け取り、テキスト出力を生成する大規模なマルチモーダル英語モデルです。このモデルは、コンテキスト内の少ないショット学習能力が強く、閉ソースモデルと同等の性能を発揮します。この特性により、IDEFICSはカスタムデータでマルチモーダルモデルを微調整するための強力な出発点となります。
モデルの使い方
ベースモデルの使用
import torch
from transformers import IdeficsForVisionText2Text, AutoProcessor
device = "cuda" if torch.cuda.is_available() else "cpu"
checkpoint = "HuggingFaceM4/idefics-9b"
model = IdeficsForVisionText2Text.from_pretrained(checkpoint, torch_dtype=torch.bfloat16).to(device)
processor = AutoProcessor.from_pretrained(checkpoint)
# We feed to the model an arbitrary sequence of text strings and images. Images can be either URLs or PIL Images.
prompts = [
[
"https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
"In this picture from Asterix and Obelix, we can see"
],
]
# --batched mode
inputs = processor(prompts, return_tensors="pt").to(device)
# --single sample mode
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# Generation args
bad_words_ids = processor.tokenizer(["<image>", "<fake_token_around_image>"], add_special_tokens=False).input_ids
generated_ids = model.generate(**inputs, bad_words_ids=bad_words_ids, max_length=100)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)
for i, t in enumerate(generated_text):
print(f"{i}:\n{t}\n")
命令微調整モデルの使用
import torch
from transformers import IdeficsForVisionText2Text, AutoProcessor
device = "cuda" if torch.cuda.is_available() else "cpu"
checkpoint = "HuggingFaceM4/idefics-9b-instruct"
model = IdeficsForVisionText2Text.from_pretrained(checkpoint, torch_dtype=torch.bfloat16).to(device)
processor = AutoProcessor.from_pretrained(checkpoint)
# We feed to the model an arbitrary sequence of text strings and images. Images can be either URLs or PIL Images.
prompts = [
[
"User: What is in this image?",
"https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
"<end_of_utterance>",
"\nAssistant: This picture depicts Idefix, the dog of Obelix in Asterix and Obelix. Idefix is running on the ground.<end_of_utterance>",
"\nUser:",
"https://static.wikia.nocookie.net/asterix/images/2/25/R22b.gif/revision/latest?cb=20110815073052",
"And who is that?<end_of_utterance>",
"\nAssistant:",
],
]
# --batched mode
inputs = processor(prompts, add_end_of_utterance_token=False, return_tensors="pt").to(device)
# --single sample mode
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# Generation args
exit_condition = processor.tokenizer("<end_of_utterance>", add_special_tokens=False).input_ids
bad_words_ids = processor.tokenizer(["<image>", "<fake_token_around_image>"], add_special_tokens=False).input_ids
generated_ids = model.generate(**inputs, eos_token_id=exit_condition, bad_words_ids=bad_words_ids, max_length=100)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)
for i, t in enumerate(generated_text):
print(f"{i}:\n{t}\n")
テキスト生成推論
ホストされている推論APIは、Text Generation Inferenceによって提供されています。モデルにクエリを投げるには、次のコードスニペットを使用できます。重要なのは、画像をMarkdown構文で取得可能なURLとして渡すことです。
from text_generation import Client
API_TOKEN = "<YOUR_API_TOKEN>"
API_URL = "https://api-inference.huggingface.co/models/HuggingFaceM4/idefics-80b-instruct"
DECODING_STRATEGY = "Greedy"
QUERY = "User: What is in this image?<end_of_utterance>\nAssistant:"
client = Client(
base_url=API_URL,
headers={"x-use-cache": "0", "Authorization": f"Bearer {API_TOKEN}"},
)
generation_args = {
"max_new_tokens": 256,
"repetition_penalty": 1.0,
"stop_sequences": ["<end_of_utterance>", "\nUser:"],
}
if DECODING_STRATEGY == "Greedy":
generation_args["do_sample"] = False
elif DECODING_STRATEGY == "Top P Sampling":
generation_args["temperature"] = 1.
generation_args["do_sample"] = True
generation_args["top_p"] = 0.95
generated_text = client.generate(prompt=QUERY, **generation_args)
print(generated_text)
なお、現在は命令微調整モデルの推論のみをホストしています。
✨ 主な機能
- 画像に関する質問に答えることができます。
- 画像の内容を説明することができます。
- 複数の画像を元にストーリーを作成することができます。
- 視覚入力なしで純粋な言語モデルとして動作することができます。
📦 インストール
このREADMEには具体的なインストール手順が記載されていないため、インストールセクションは省略されます。
💻 使用例
基本的な使用法
上述のベースモデルと命令微調整モデルの使用例が基本的な使用法のサンプルです。
高度な使用法
このREADMEに高度な使用法に関する具体的なコード例が記載されていないため、このセクションは省略されます。
📚 ドキュメント
モデルの詳細
- 開発者: Hugging Face
- モデルタイプ: マルチモーダルモデル(画像 + テキスト)
- 言語 (NLP): 英語
- ライセンス: ライセンスセクションを参照
- 親モデル: laion/CLIP - ViT - H - 14 - laion2B - s32B - b79K と huggyllama/llama - 65b
- 詳細情報のリソース:
IDEFICSは、画像とテキストのシーケンスを入力として受け取り、テキスト出力を生成する大規模なマルチモーダル英語モデルです。このモデルは、コンテキスト内の少ないショット学習能力が強く、閉ソースモデルと同等の性能を発揮します。この特性により、IDEFICSはカスタムデータでマルチモーダルモデルを微調整するための強力な出発点となります。
IDEFICSは、2つの単一モダリティのオープンアクセス事前学習モデルを基に構築されており、これら2つのモダリティを接続します。Transformerブロックの形で新たに初期化されたパラメータが、ビジョンエンコーダと言語モデルの間のギャップを埋めます。このモデルは、画像 - テキストペアと非構造化マルチモーダルウェブドキュメントの混合データでトレーニングされています。
IDEFICS - instructは、IDEFICSを教師付き微調整と命令微調整のデータセットでさらにトレーニングすることで得られたモデルです。これにより、下流の性能が大幅に向上し(idefics - 9b - instructは90億規模で非常に強力なモデルとなります)、モデルを会話により適したものにします。
用途
このモデルは、入力がテキストクエリ/命令と1つまたは複数の画像で構成されるマルチモーダル(画像 + テキスト)タスクの推論に使用できます。ただし、画像生成はサポートしていません。
特定のユースケースのために、ベースモデルをカスタムデータで微調整することも可能です。命令微調整されたモデルは、ユーザーからの命令に従う能力が大幅に優れているため、ゼロからモデルを使用する場合はこれらを優先することをおすすめします。
以下のスクリーンショットは、命令微調整モデルとの対話の例です。
🔧 技術詳細
IDEFICSのトレーニング
Flamingoで示されたトレーニング手順に従い、2つのオープンアクセス事前学習モデル(laion/CLIP - ViT - H - 14 - laion2B - s32B - b79Kとhuggyllama/llama - 65b)を新たなTransformerブロックを初期化することで組み合わせます。事前学習されたバックボーンは凍結され、新たに初期化されたパラメータのみがトレーニングされます。
このモデルは、以下の公開されている英語データの混合データでトレーニングされています。
データソース | データの種類 | ソース内のトークン数 | ソース内の画像数 | エポック数 | トークン数の有効比率 |
---|---|---|---|---|---|
OBELICS | 非構造化マルチモーダルウェブドキュメント | 1149億 | 3.53億 | 1 | 73.85% |
Wikipedia | 非構造化マルチモーダルウェブドキュメント | 31.92億 | 3900万 | 3 | 6.15% |
LAION | 画像 - テキストペア | 299億 | 112億 | 1 | 17.18% |
PMD | 画像 - テキストペア | 16億 | 7000万 | 3 | 2.82% |
OBELICSは、画像とテキストが交互に配置されたウェブドキュメントのオープンで大規模なコレクションで、1.41億のドキュメント、1150億のテキストトークン、3.53億の画像を含んでいます。データセット内容のインタラクティブなビジュアライゼーションはこちらで利用できます。2020年2月から2023年2月までのCommon Crawlダンプを使用しています。
Wikipediaは、2023年2月20日に作成された英語版のWikipediaダンプを使用しています。
LAIONは、Common Crawlのウェブページから収集された画像 - テキストペアのコレクションで、テキストは各画像の代替テキストを使用して取得されています。Webster et al., 2023に従って重複排除され、フィルタリングされ、Spawning APIを使用してオプトアウトされた画像が削除されています。
PMDは、公開されている画像 - テキストペアデータセットのコレクションです。このデータセットには、Conceptual Captions、Conceptual Captions 12M、WIT、Localized Narratives、RedCaps、COCO、SBU Captions、Visual Genome、およびYFCC100Mデータセットのサブセットのペアが含まれています。前処理時のサーバー障害のため、SBUキャプションは含まれていません。
マルチモーダルウェブドキュメントの場合、モデルにはテキスト段落と画像の連続に対応するシーケンスが供給されます。画像 - テキストペアの場合、画像とそのキャプションをパッキングしてトレーニングシーケンスを形成します。画像はビジョンエンコーダでエンコードされ、ビジョン隠れ状態はTransformer Perceiverブロックでプールされ、クロスアテンションブロックを通じてテキストシーケンスに融合されます。
Dehghani et al., 2023に従い、Perceiverとクロスアテンションブロックの投影されたクエリとキーにレイヤー正規化を適用しています。これにより、初期の実験でトレーニングの安定性が向上しました。トレーニング可能なレイヤー正規化にはRMSNormの実装を使用しています。
トレーニングの目的は、標準的な次のトークン予測です。
使用されるハイパーパラメータとトレーニングパラメータは以下の通りです。
パラメータ | IDEFICS - 80b | IDEFICS - 9b | |
---|---|---|---|
Perceiver Resampler | レイヤー数 | 6 | 6 |
潜在数 | 64 | 64 | |
ヘッド数 | 16 | 16 | |
Resamplerヘッド次元 | 96 | 96 | |
モデル | 言語モデルバックボーン | Llama - 65b | Llama - 7b |
ビジョンモデルバックボーン | laion/CLIP - ViT - H - 14 - laion2B - s32B - b79K | laion/CLIP - ViT - H - 14 - laion2B - s32B - b79K | |
クロスレイヤー間隔 | 4 | 4 | |
トレーニング | シーケンス長 | 1024 | 1024 |
有効バッチサイズ(トークン数) | 367万 | 131万 | |
最大トレーニングステップ | 20万 | 20万 | |
重み減衰 | 0.1 | 0.1 | |
オプティマイザ | Adam(0.9, 0.999) | Adam(0.9, 0.999) | |
勾配クリッピング | 1.0 | 1.0 | |
Z - lossの重み | 0.001 | 0.001 | |
学習率 | 初期最大 | 5e - 5 | 1e - 5 |
初期最小 | 3e - 5 | 6e - 6 | |
減衰スケジュール | 線形 | 線形 | |
線形ウォームアップステップ | 2000 | 2000 | |
大規模最適化 | 勾配チェックポインティング | True | True |
精度 | Mixed - pres bf16 | Mixed - pres bf16 | |
ZeRO最適化 | ステージ3 | ステージ3 |
📄 ライセンス
ライセンスは「other」ですが、具体的なライセンス情報はREADMEに記載されていないため、詳細は不明です。








