基础模型:
- Qwen/Qwen2-VL-7B-Instruct
数据集:
- Michael4933/MGrounding-630k
- lmms-lab/M4-Instruct-Data
- lmms-lab/LLaVA-OneVision-Data
语言:
- 英文
许可证: apache-2.0
评估指标:
- 准确率
任务标签: 图像文本到文本
库名称: transformers
魔术师:揭示多模态大语言模型中自由形式多图像定位的魔力
魔术师:揭示多模态大语言模型中自由形式多图像定位的魔力
李由, 黄鹤宇*, 池晨, 黄凯宇, 黄超, 郭宗浩, 刘志远, 徐济南, 李宇华, 李瑞轩, 孙茂松

本仓库托管了我们的训练数据集MGrounding-630k和基准MIG-Bench的使用详情,以及魔术师的训练实现,这是首个具备自由形式定位能力的竞争性多图像定位多模态大语言模型。
📰 新闻
- [2025.01.13] 🌷🌷🌷 我们进一步在Huggingface🤗上发布了大规模多图像定位训练数据集MGrounding_630k和多图像定位基准MIG-Bench。欢迎下载并应用于您自己的用途。
- [2025.01.12] 🌟🌟🌟 模型权重现已在HuggingFace上可用!🤗 在Huggingface模型下载并尝试吧!\n* [2025.01.10] 🌞🌞🌞 我们在新年伊始在Arxiv上发布了我们的论文!\n\n## 📝 摘要
多模态大语言模型(MLLMs)的最新进展显著提升了其对单幅图像的细粒度感知和多幅图像的通用理解能力。然而,现有的MLLMs在复杂的多图像场景中仍难以实现精确定位。为此,我们首先探索了一种思维链(CoT)框架,将单图像定位与多图像理解相结合。虽然部分有效,但由于其非端到端的特性,它仍不稳定且难以捕捉抽象的视觉信息。因此,我们引入了🎩魔术师,这是首个能够在多幅图像中进行自由形式且精确定位的多图像定位模型。为支持这一目标,我们提出了MGrounding-630k数据集,该数据集包含来自现有数据集的多个多图像定位任务数据,以及新生成的自由形式定位指令跟随数据。此外,我们提出了MIG-Bench,这是一个专门设计用于评估多图像定位能力的综合基准。实验结果表明,我们的模型在多图像定位能力上显著优于现有最佳MLLMs,超出21.61%,甚至超越了更大的70B模型。
😮 顶尖的多图像定位能力
如上雷达图所示,魔术师在所有任务上均大幅超越更大的70B规模模型。此外,它在多个通用多图像理解基准上也表现出极强的竞争力。我们期待魔术师在广泛的现实场景中展现出令人期待的应用前景。
👉 快速开始
目录:
按照以下命令建立合适的环境。
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
MGrounding-630k包含多样化的多图像定位任务和来自不同来源的大量图像。为方便使用,我们已将整个训练数据集上传至Huggingface,并根据任务类别组织这些庞大的数据集合。
[!注意]
由于多图像任务的特性,每个训练示例涉及多幅图像。因此,60万+的训练示例总共包含更多的图像。
请确保您有足够的硬盘存储空间和稳定的网络连接。
您可以在./data/MGrounding-630k
下载数据,然后解压相应的.zip文件。这将为您呈现如下所示的数据结构。我们将所有对话数据集中放在./data/MGrounding-630k/MGrounding-630k.json
以便使用,其中每个训练示例都标有其对应的子任务类别。我们还提供了每个任务的单独json文件。我们只想为您提供最好的~~~🥰
从huggingface下载的代码位于./data/download.py
,实现了一键快速下载。
最终的代码结构如下:
Migician/
├──data/
│ ├──MGrounding-630k
│ │ ├── 共同对象
│ │ │ ├── COCO
│ │ │ ├── ImageNet
│ │ │ ├── Object365
│ │ │ ├── common_train_70k.json # 此级别的附加.zip文件可能帮助有限
│ │ │
│ │ ├── 差异
│ │ │ ├── clevr-change
│ │ │ ├── img-diff
│ │ │ ├── magicbrush
│ │ │ ├── spot-the-diff
│ │ │ ├── diff_train_70k.json
│ │ │
│ │ ├── 自由形式
│ │ │ ├── Object365
│ │ │ ├── free_form_grounding_130k.json
│ │ │
│ │ ├── 群组定位
│ │ │ ├── SA-1B
│ │ │ ├── _gg_reg_40k.json # 群组定位回归任务
│ │ │ ├── gg_train_120k.json # 群组定位识别任务
│ │ │
│ │ ├── 对象跟踪
│ │ │ ├── GOT-10k
│ │ │ ├── LaSOT
│ │ │ ├── MOT17_image
│ │ │ ├── TrackingNet
│ │ │ ├── ot_train_130k.json
│ │ │
│ │ ├── 参考定位
│ │ │ ├── ImageNet
│ │ │ ├── refer_train_70k.json
│ │ │
│ │ ├── 区域定位
│ │ ├── 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" # 群组定位任务
}
推理
如论文所述,🎩魔术师通过在8*A100-80G上使用大量数据进行渐进式两阶段训练,基于Qwen2-VL-7B微调而成。您可以通过以下代码体验多图像定位的🪄魔力。
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch
model = Qwen2VLForConditionalGeneration.from_pretrained(
"您的魔术师路径",
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