モデル概要
モデル特徴
モデル能力
使用事例
🚀 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は、カスタムデータでマルチモーダルモデルを微調整するための堅牢な出発点となります。
モデルの使い方
これらのリソースでは、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によって提供されています。モデルにクエリを送信するには、次のコードスニペットを使用できます。重要なのは、画像をマークダウン構文で取得可能な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 |
モデルタイプ | マルチモーダルモデル(画像 + テキスト) |
言語 | 英語 |
ライセンス | ライセンスセクションを参照 |
親モデル | 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は、2つの単一モーダルのオープンアクセス事前学習モデルを基に構築されており、これらの2つのモダリティを接続します。新しく初期化されたTransformerブロックの形式のパラメータが、ビジョンエンコーダと言語モデルの間のギャップを埋めます。モデルは、画像 - テキストペアと非構造化マルチモーダルウェブドキュメントの混合データでトレーニングされています。
IDEFICS - instructは、IDEFICSを教師付き微調整と命令微調整のデータセットでさらにトレーニングすることで得られるモデルです。これにより、下流の性能が大幅に向上し(idefics - 9b - instructは90億規模で非常に強力なモデルとなります)、モデルを会話に適したものにします。
トレーニングの詳細
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重み | 1e - 3 | 1e - 3 | |
学習率 | 初期最大 | 5e - 5 | 1e - 5 |
初期最小 | 3e - 5 | 6e - 6 | |
減衰スケジュール | 線形 | 線形 | |
線形ウォームアップステップ数 | 2000 | 2000 | |
大規模最適化 | 勾配チェックポインティング | True | True |
精度 | 混合精度bf16 | 混合精度bf16 | |
ZeRO最適化 | ステージ3 | ステージ3 |
📄 ライセンス
ライセンスに関する詳細は、他のライセンス情報として指定されています。具体的なライセンス内容は、このREADMEに記載されていないため、適切なリソースを参照してください。








