モデル概要
モデル特徴
モデル能力
使用事例
🚀 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は、2つの単一モーダルのオープンアクセス事前学習モデルを基に構築されており、これらの2つのモダリティを接続します。新しく初期化されたTransformerブロックの形でのパラメータが、ビジョンエンコーダと言語モデルの間のギャップを埋めます。事前学習されたバックボーンは凍結され、新しく初期化されたパラメータがトレーニングされます。
モデルの使用方法
このモデルは、テキストクエリ/命令と1つまたは複数の画像から構成される入力を持つマルチモーダル(画像 + テキスト)タスクの推論に使用できます。ただし、画像生成はサポートされていません。
特定のユースケースのために、ベースモデルをカスタムデータで微調整することも可能です。命令微調整されたモデルは、ユーザーからの命令に従う能力が大幅に向上しているため、そのまま使用する場合はこれらのモデルを選択することをおすすめします。
モデルの入手方法
これらのリソースでは、IDEFICSを使用した推論(4ビット量子化推論を含む)とモデルの微調整方法が紹介されています。特に、このcolabノートブックでは、LoRAと4ビット量子化を使用して、単一のGoogle Colab GPUで90億パラメータモデルを微調整する方法が示されています。
コード例
ベースモデルの使用
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)
# モデルには、テキスト文字列と画像の任意のシーケンスを入力します。画像はURLまたはPIL画像のいずれかです。
prompts = [
[
"https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
"In this picture from Asterix and Obelix, we can see"
],
]
# --バッチモード
inputs = processor(prompts, return_tensors="pt").to(device)
# --単一サンプルモード
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# 生成パラメータ
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")
巨大なモデルのダウンロード/ロードを待たずにソフトウェアをすぐにテストするには、HuggingFaceM4/tiny-random-idefics
を使用できます。このモデルはトレーニングされておらず、ランダムな重みを持っていますが、迅速なテストには非常に便利です。
命令モデルの使用
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)
# モデルには、テキスト文字列と画像の任意のシーケンスを入力します。画像はURLまたはPIL画像のいずれかです。
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:",
],
]
# --バッチモード
inputs = processor(prompts, add_end_of_utterance_token=False, return_tensors="pt").to(device)
# --単一サンプルモード
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# 生成パラメータ
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には具体的なインストール手順が記載されていないため、このセクションは省略されています。
💻 使用例
基本的な使用法
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)
# モデルには、テキスト文字列と画像の任意のシーケンスを入力します。画像はURLまたはPIL画像のいずれかです。
prompts = [
[
"https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
"In this picture from Asterix and Obelix, we can see"
],
]
# --バッチモード
inputs = processor(prompts, return_tensors="pt").to(device)
# --単一サンプルモード
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# 生成パラメータ
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)
# モデルには、テキスト文字列と画像の任意のシーケンスを入力します。画像はURLまたはPIL画像のいずれかです。
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:",
],
]
# --バッチモード
inputs = processor(prompts, add_end_of_utterance_token=False, return_tensors="pt").to(device)
# --単一サンプルモード
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# 生成パラメータ
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")
📚 ドキュメント
モデルの詳細
属性 | 详情 |
---|---|
開発元 | Hugging Face |
モデルタイプ | マルチモーダルモデル(画像 + テキスト) |
言語 | 英語 |
ライセンス | ライセンスセクションを参照 |
親モデル | laion/CLIP-ViT-H-14-laion2B-s32B-b79K と huggyllama/llama-65b |
詳細情報のリソース | - OBELICSの説明: OBELICS: An Open Web-Scale Filtered Dataset of Interleaved Image-Text Documents - 元論文: Flamingo: a Visual Language Model for Few-Shot Learning |
モデルの用途
このモデルは、テキストクエリ/命令と1つまたは複数の画像から構成される入力を持つマルチモーダル(画像 + テキスト)タスクの推論に使用できます。ただし、画像生成はサポートされていません。
特定のユースケースのために、ベースモデルをカスタムデータで微調整することも可能です。命令微調整されたモデルは、ユーザーからの命令に従う能力が大幅に向上しているため、そのまま使用する場合はこれらのモデルを選択することをおすすめします。
🔧 技術詳細
トレーニング手順
IDEFICSのトレーニング手順は、Flamingoで説明されている手順に厳密に従っています。2つのオープンアクセス事前学習モデル(laion/CLIP-ViT-H-14-laion2B-s32B-b79Kとhuggyllama/llama-65b)を新しいTransformerブロックを初期化することで組み合わせています。事前学習されたバックボーンは凍結され、新しく初期化されたパラメータがトレーニングされます。
トレーニングデータ
モデルは、公開されている英語データの以下のデータ混合でトレーニングされています。
データソース | データの種類 | ソース内のトークン数 | ソース内の画像数 | エポック数 | トークン数の有効比率 |
---|---|---|---|---|---|
OBELICS | 非構造化マルチモーダルウェブドキュメント | 1149億 | 3億5300万 | 1 | 73.85% |
Wikipedia | 非構造化マルチモーダルウェブドキュメント | 31.92億 | 3900万 | 3 | 6.15% |
LAION | 画像 - テキストペア | 299億 | 11億2000万 | 1 | 17.18% |
PMD | 画像 - テキストペア | 16億 | 7000万 | 3 | 2.82% |
OBELICSは、画像とテキストが交互に並んだウェブドキュメントのオープンで大規模なコレクションで、1億4100万のドキュメント、1兆1500億のテキストトークン、3億5300万の画像を含んでいます。データセット内容のインタラクティブなビジュアライゼーションは、こちらで利用できます。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 | |
リサンプラーヘッド次元 | 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の重み | 1e-3 | 1e-3 | |
学習率 | 初期最大 | 5e-5 | 1e-5 |
初期最終 | 3e-5 | 6e-6 | |
減衰スケジュール | 線形 | 線形 | |
線形ウォームアップステップ数 | 2000 | 2000 | |
大規模最適化 | 勾配チェックポインティング | True | True |
精度 | 混合精度bf16 | 混合精度bf16 | |
ZeRO最適化 | ステージ3 | ステージ3 |
📄 ライセンス
このモデルのライセンスは、other
です。詳細については、適切なリソースを参照してください。








