モデル概要
モデル特徴
モデル能力
使用事例
🚀 Migician: マルチモーダル大規模言語モデルにおける自由形式のマルチ画像グラウンディングの魔法を明かす
Migicianは、マルチモーダル大規模言語モデルにおける自由形式のマルチ画像グラウンディングの能力を向上させるモデルです。本モデルは、新しいデータセットとベンチマークを用いて訓練され、既存のモデルを上回る性能を発揮します。
プロパティ | 詳細 |
---|---|
ベースモデル | Qwen/Qwen2-VL-7B-Instruct |
データセット | Michael4933/MGrounding-630k、lmms-lab/M4-Instruct-Data、lmms-lab/LLaVA-OneVision-Data |
言語 | en |
ライセンス | apache-2.0 |
評価指標 | accuracy |
パイプラインタグ | image-text-to-text |
ライブラリ名 | transformers |
📝 概要
近年のマルチモーダル大規模言語モデル(MLLM)の進歩により、単一画像の細粒度な知覚と複数画像の一般的な理解が大幅に向上しました。しかし、既存のMLLMは、複雑なマルチ画像シナリオでの正確なグラウンディングに依然として課題を抱えています。この問題を解決するために、まず、単一画像のグラウンディングとマルチ画像の理解を統合する思考連鎖(CoT)フレームワークを探索しました。これは部分的に有効ですが、非エンドツーエンドの性質により、不安定で抽象的な視覚情報を捉えることが困難です。そこで、複数の画像にまたがって自由形式で正確なグラウンディングを行うことができる最初のマルチ画像グラウンディングモデルである🎩Migicianを導入します。これをサポートするために、既存のデータセットから派生したいくつかのマルチ画像グラウンディングタスクのデータと、新たに生成された自由形式のグラウンディング命令追従データを含むMGrounding-630kデータセットを提示します。さらに、マルチ画像グラウンディング能力を評価するために特別に設計された包括的なベンチマークであるMIG-Benchを提案します。実験結果は、当社のモデルが既存の最高のMLLMを21.61%上回り、さらには70Bモデルをも上回る、顕著に優れたマルチ画像グラウンディング能力を達成していることを示しています。
😮 トップレベルのマルチ画像グラウンディング能力
🚀 クイックスタート
目次
1. 環境 [トップに戻る]
以下のコマンドを実行して、適切な環境を構築します。
conda env create -n migician python=3.10
git clone https://github.com/Michael4933/Migician.git
cd Migician
conda activate migician
pip install -r requirements.txt
2. データの準備 [トップに戻る]
MGrounding-630kは、多様なマルチ画像グラウンディングタスクとさまざまなソースからの多数の画像を含んでいます。使いやすくするために、トレーニングデータセット全体をHuggingfaceにアップロードし、これらの大量のデータコレクションをタスククラスに従って整理しました。
⚠️ 重要提示
マルチ画像タスクの性質上、各トレーニングサンプルには複数の画像が含まれます。その結果、60万以上のトレーニングサンプルには、さらに多くの画像が含まれます。十分なハードディスク容量と安定したインターネット接続が必要です。
データを./data/MGrounding-630k
にダウンロードし、対応する.zipファイルを解凍するだけです。これにより、以下に示すデータ構造が得られます。会話データはすべて./data/MGrounding-630k/MGrounding-630k.json
にまとめられており、各トレーニングサンプルには対応するサブタスククラスがラベル付けされています。各タスクの個別のjsonファイルも提供されています。
Huggingfaceからのダウンロードコードは./data/download.py
に用意されており、ワンクリックですばやくダウンロードできます。
最終的なコード構造は次のようになります。
Migician/
├──data/
│ ├──MGrounding-630k
│ │ ├── Common_Object
│ │ │ ├── COCO
│ │ │ ├── ImageNet
│ │ │ ├── Object365
│ │ │ ├── common_train_70k.json # このレベルの追加.zipファイルは役に立たない場合があります
│ │ │
│ │ ├── Difference
│ │ │ ├── clevr-change
│ │ │ ├── img-diff
│ │ │ ├── magicbrush
│ │ │ ├── spot-the-diff
│ │ │ ├── diff_train_70k.json
│ │ │
│ │ ├── Free-Form
│ │ │ ├── Object365
│ │ │ ├── free_form_grounding_130k.json
│ │ │
│ │ ├── Group_Grounding
│ │ │ ├── SA-1B
│ │ │ ├── _gg_reg_40k.json # グループグラウンディングregタスク
│ │ │ ├── gg_train_120k.json # グループグラウンディングrecタスク
│ │ │
│ │ ├── Object_Tracking
│ │ │ ├── GOT-10k
│ │ │ ├── LaSOT
│ │ │ ├── MOT17_image
│ │ │ ├── TrackingNet
│ │ │ ├── ot_train_130k.json
│ │ │
│ │ ├── Referring_Grounding
│ │ │ ├── ImageNet
│ │ │ ├── refer_train_70k.json
│ │ │
│ │ ├── Region_Locating
│ │ ├── Object365
│ │ ├── region_train_70k.json
│ │
│ ├── MGrounding-630k.json # すべての会話データを含む
│
...
トレーニングデータの例構造は次のとおりです。
{
"id": "5229016_8929009_6793119_3571391", # これは無視して構いません
"images": [
"./MGrounding-630k/Group_Grounding/SA-1B/sa_5229016.jpg",
"./MGrounding-630k/Group_Grounding/SA-1B/sa_8929009.jpg",
"./MGrounding-630k/Group_Grounding/SA-1B/sa_6793119.jpg",
"./MGrounding-630k/Group_Grounding/SA-1B/sa_3571391.jpg"
], # すべてリスト形式で整理されています
"conversations": [
{
"from": "human",
"value": "<image>\n<image>\n<image>\n<image>\nこの文が指す領域のバウンディングボックスを教えてください: <|object_ref_start|>a statue of a man<|object_ref_end|>." # グラウンディングタスクに特殊トークンを採用しています
},
{
"from": "gpt",
"value": "3枚目の画像にあります。 <|box_start|>(316,58),(764,999)<|box_end|>" # 0-1000、相対位置、x1 y1 x2 y2形式
},
{
"from": "human",
"value": "この文が指すターゲット領域を認識してください: <|object_ref_start|>a woman wearing an orange shirt<|object_ref_end|>."
},
{
"from": "gpt",
"value": "1枚目の画像にあります。 <|box_start|>(408,656),(578,997)<|box_end|>"
}
],
"type": "gg_train" # グループグラウンディングタスク
}
3. 推論と評価 [トップに戻る]
推論
論文で述べたように、🎩Migicianは、8*A100-80Gで大量のデータを用いた段階的な2段階のトレーニングプロセスを通じて、Qwen2-VL-7Bをファインチューニングしたものです。以下のコードを通じて、マルチ画像グラウンディングの🪄魔法を体感できます。
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch
model = Qwen2VLForConditionalGeneration.from_pretrained(
"Your_Migician_Path",
torch_dtype=torch.bfloat16,
attn_implementation="flash_attention_2", # flash_attention_2を有効にすると、より高速で省メモリな推論が可能になります。
device_map="auto",
)
messages = [
{
"role": "user",
"content": [
{
"type": "image", "image": resize("./figs/multi_view_1.png"),
},
{
"type": "image", "image": resize("./figs/multi_view_2.png"),
},
{
"type": "image", "image": resize("./figs/multi_view_3.png"),
},
{
"type": "image", "image": resize("./figs/multi_view_4.png"),
},
{
"type": "text", "text": "Please recognize <|object_ref_start|>the common person appearing in all these images<|object_ref_end|> and locate this person in all these image."
}
]
}
]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(text=[text],images=image_inputs,videos=video_inputs,padding=True,return_tensors="pt")
inputs = inputs.to("cuda")
# 推論: 出力の生成
generated_ids = model.generate(**inputs, max_new_tokens=128)
generated_ids_trimmed = [
out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
評価
🤗📜MIG-Benchを使用すると、現在のMLLMのMIG能力を包括的に評価できます。Huggingfaceから直接ダウンロードして、独自の評価を実行できます。評価用のファイル構造は次のとおりです。
Migician/
├──eval/
│ ├── MIG-Bench
│ │ ├── images
│ │ │ ├── common # 10種類の多様なタスク
│ │ │ ├── correspondence
│ │ │ ├── group_grounding
│ │ │ ...
│ │ ├── MIG_data.json # 評価に直接使用できます
│ │
│ ├── eval_output/
│ ├── others/ # MMIUとMIBench
│ │
│ ├── MIG_bench_cot.py # 単一画像のCoTフレームワークを通じてMIGを実行する
│ ├── MIG_bench_eval.py # 直接推論によってMIGを実行する
│ ├── utils.py
│ ├── requirements.txt
│ ├── chat.py
各テストサンプルは以下のようにフォーマットされており、タスククラスラベル、画像パス、質問、正解などの重要な情報が含まれています。
⚠️ 重要提示
正解の座標は0-1の浮動小数点数として正規化されており、
x1 y1 x2 y2
形式に従っています。数値は画像全体の幅と高さに対する相対位置です。
{
"task": "reasoning",
"images": [
"./MIG-Bench/images/reasoning/case097_1.png",
"./MIG-Bench/images/reasoning/case097_2.png"
],
"question": "Which item in Image-2 share the similar feature of Image-1? Find it and locate it in the second image. ",
"answer": [
0.418,
0.391,
0.595,
0.546
],
"additional_info": "Which item in Image-2 share the similar feature of Image-1?",
"need_format": true
}
🤩🤩🤩7つの異なるモデル[Migician、Qwen2-VL、InternVL2、MiniCPM-V_2.6、LLaVA-OneVision、mPLUG-Owl3、Mantis]について、MIG-Benchでのワンクリック評価を行うことができます。MIG_bench_eval.pyスクリプトを実行するだけで、IOU@0.7、IOU@0.5、IOU@0.3、および平均IOUスコアが報告されます。さらに、🤗MIBenchと🤗MMIUの評価も、MIG_bench_eval.pyで異なるモデルに対して容易に行えます。
4. ファインチューニング
2段階のトレーニングプロセスは、主に🏭🏭🏭Llamafactoryに基づいて行われます。
📄 ライセンス
このプロジェクトは、apache-2.0ライセンスの下でライセンスされています。









