模型简介
模型特点
模型能力
使用案例
🚀 Migician:揭示多模态大语言模型中自由形式多图像定位的奥秘
Migician是首个能够在多图像上进行自由形式和精确定位的多图像定位模型。它基于大规模数据集MGrounding - 630k进行训练,并通过MIG - Bench基准进行评估,在多图像定位能力上显著超越现有模型。
🚀 快速开始
目录
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,并根据任务类别对这些大量数据进行了整理。
⚠️ 重要提示
由于多图像任务的性质,每个训练示例都涉及多个图像。因此,600k +的训练示例总共包含了更多数量的图像。请确保你有足够的硬盘存储空间和稳定的网络连接。
你可以在./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 # 组定位回归任务
│ │ │ ├── gg_train_120k.json # 组定位识别任务
│ │ │
│ │ ├── 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|>一个男人的雕像<|object_ref_end|>。" # 我们在定位任务中采用特殊标记
},
{
"from": "gpt",
"value": "它在第三张图像中。<|box_start|>(316,58),(764,999)<|box_end|>" # 0 - 1000,相对位置,x1 y1 x2 y2格式
},
{
"from": "human",
"value": "识别此句子所指的目标区域:<|object_ref_start|>一个穿着橙色衬衫的女人<|object_ref_end|>。"
},
{
"from": "gpt",
"value": "它在第一张图像中。<|box_start|>(408,656),(578,997)<|box_end|>"
}
],
"type": "gg_train" # 组定位任务
}
3. 推理与评估 [返回顶部]
推理
如论文中所述,🎩Migician在[Qwen2 - VL - 7B](https://huggingface.co/Qwen/Qwen2 - VL - 7B - Instruct)上通过渐进式两阶段训练过程进行微调,使用了8 * A100 - 80G上的大量数据。你可以通过以下代码感受多图像定位的神奇之处:
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": "请识别<|object_ref_start|>所有这些图像中出现的共同人物<|object_ref_end|>,并在所有这些图像中定位此人。"
}
]
}
]
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](https://huggingface.co/datasets/Michael4933/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": "图像2中哪个物品与图像1具有相似特征?找到它并在第二张图像中定位它。 ",
"answer": [
0.418,
0.391,
0.595,
0.546
],
"additional_info": "图像2中哪个物品与图像1具有相似特征?",
"need_format": true
}
你可以在MIG - Bench上对🤩🤩🤩七个不同的模型[Migician、[Qwen2 - VL](https://huggingface.co/Qwen/Qwen2 - VL - 7B - Instruct)、[InternVL2](https://huggingface.co/OpenGVLab/InternVL2 - 8B)、[MiniCPM - V_2.6](https://huggingface.co/openbmb/MiniCPM - V - 2_6)、[LLaVA - OneVision](https://huggingface.co/llava - hf/llava - onevision - qwen2 - 7b - ov - hf)、[mPLUG - Owl3](https://huggingface.co/mPLUG/mPLUG - Owl3 - 7B - 241101)和[Mantis](https://huggingface.co/TIGER - Lab/Mantis - 8B - Idefics2)]进行一键评估。只需运行MIG_bench_eval.py脚本,它将报告IOU@0.7、IOU@0.5、IOU@0.3和平均IOU分数。我们还在MIG_bench_eval.py中为不同模型简化了对🤗MIBench和🤗MMIU的评估。
4. 微调
我们的两阶段训练过程主要基于🏭🏭🏭[Llamafactory](https://github.com/hiyouga/LLaMA - Factory)进行,其中对整个大语言模型(LLM)的骨干参数进行了微调。 我们提供了这两个阶段的训练脚本和requirements.txt文件:
Migician/
├── train/
│ ├── stage-1_finetune_full.yaml
│ ├── stage-2_finetune_full.yaml
│ ├── requirements.txt
✨ 主要特性
顶尖的多图像定位能力
📚 详细文档
摘要
近期,多模态大语言模型(MLLMs)的发展显著提升了它们对单图像的细粒度感知和对多图像的整体理解能力。然而,现有的MLLMs在复杂的多图像场景中实现精确的定位仍然面临挑战。为了解决这个问题,我们首先探索了一种思维链(CoT)框架,该框架将单图像定位与多图像理解相结合。虽然部分有效,但由于其非端到端的性质,它仍然不稳定,并且难以捕捉抽象的视觉信息。因此,我们引入了🎩Migician,这是第一个能够在多个图像上进行自由形式和精确定位的多图像定位模型。为了支持这一模型,我们提出了[MGrounding - 630k](https://huggingface.co/datasets/Michael4933/MGrounding - 630k)数据集,该数据集包含从现有数据集中派生的多个多图像定位任务的数据,以及新生成的自由形式定位指令跟随数据。此外,我们还提出了[MIG - Bench](https://huggingface.co/datasets/Michael4933/MIG - Bench),这是一个专门用于评估多图像定位能力的综合基准。实验结果表明,我们的模型在多图像定位能力上有显著提升,比现有的最佳MLLMs高出21.61%,甚至超过了更大的70B模型。
🔧 技术细节
基础信息
属性 | 详情 |
---|---|
基础模型 | Qwen/Qwen2 - VL - 7B - Instruct |
数据集 | Michael4933/MGrounding - 630k、lmms - lab/M4 - Instruct - Data、lmms - lab/LLaVA - OneVision - Data |
语言 | 英语 |
许可证 | apache - 2.0 |
评估指标 | 准确率 |
任务类型 | 图像文本到文本 |
库名称 | transformers |
📄 许可证
本项目遵循apache - 2.0许可证。
📝 引用
@misc{li2025migicianrevealingmagicfreeform,
title={Migician: Revealing the Magic of Free-Form Multi-Image Grounding in Multimodal Large Language Models},
author={You Li and Heyu Huang and Chen Chi and Kaiyu Huang and Chao Huang and Zonghao Guo and Zhiyuan Liu and Jinan Xu and Yuhua Li and Ruixuan Li and Maosong Sun},
year={2025},
url={https://arxiv.org/abs/2501.05767},
}









