❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦
- 🕵️♂️ 「监控室崩溃实录:8块屏幕20路视频,找个人要瞎?多图像AI定位神器来了!」
大家好,我是蚝油菜花。你是否经历过——
- 🔍 翻遍监控录像,目标在多个镜头间「闪现」就是定位不准
- 🚗 自动驾驶测试时,多摄像头数据各自为战漏判关键障碍物
- 📑 学术论文配图分散,想对比图3与图5的细胞结构得来回翻页...
今天揭秘由北交大×清华×华科联手研发的 Migician 多模态大模型,它实现了:
- ✅ 跨图像精准定位:支持「以图搜图」「文本+图像」组合查询
- ✅ 端到端推理:1个模型处理20+图像关联分析
- ✅ 百万级指令训练:MGrounding-630k数据集构建技术护城河
接下来我们将用安防/医疗案例,展示这个「多图像侦探」如何重塑视觉理解范式!
🚀 快速阅读
Migician 是一款专门用于自由形式多图像定位(Multi-Image Grounding, MIG)任务的多模态语言模型。
- 核心功能:支持跨图像对象定位、灵活的文本与图像组合查询、多任务处理能力。
- 技术原理:基于端到端框架设计,结合两阶段训练方法与大规模指令调优数据集 MGrounding-630k 提升定位性能。
Migician 是什么
Migician 是由北京交通大学、清华大学和华中科技大学的研究团队联合推出的一款多模态大语言模型(MLLM)。它专注于自由形式的多图像定位任务,能够根据文本描述、图像或两者的组合,在多幅图像中精确定位目标对象或区域。该模型通过两阶段训练方法,结合大规模指令调优数据集 MGrounding-630k,实现了端到端的多图像理解与定位能力。
Migician 的设计思路为复杂视觉场景中的多模态模型应用提供了新的可能性,尤其是在自动驾驶、安防监控等领域的多图像理解与细粒度视觉定位任务中展现了巨大潜力。
Migician 的主要功能
- 跨图像定位:在多幅图像中找到与查询相关的对象或区域,并给出其精确位置(如坐标框)。
- 灵活的输入形式:支持文本、图像或两者的组合作为查询,例如“在图2中找到与图1相似的物体,但颜色不同”。
- 多任务支持:可处理多种与多图像相关的任务,如对象跟踪、差异识别、共同对象定位等。
- 高效推理:基于端到端的模型设计,直接在多图像场景中进行推理,避免传统方法中的多步推理和错误传播问题。
Migician 的技术原理
- 端到端的多图像定位框架:直接处理多图像定位任务,避免传统方法中将任务分解为多个子任务的复杂性和效率问题,同时理解多幅图像内容并根据查询输出目标对象的位置。
- 大规模指令调优数据集(MGrounding-630k):包含超过 63 万条多图像定位任务的数据,涵盖静态差异定位、共同对象定位、对象跟踪等多种任务类型。
- 两阶段训练方法:
- 第一阶段:在多种多图像任务上训练,学习基本的多图像理解和定位能力。
- 第二阶段:基于自由形式的指令调优,提升模型在复杂查询下的定位能力。
- 多模态融合与推理:结合视觉和语言模态信息,实现对复杂查询的理解和定位,处理抽象的视觉语义信息。
如何运行 Migician
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
并解压到 ./data/MGrounding-630k
目录下。可通过脚本 ./data/download.py
实现一键快速下载。
3. 推理与评估
使用以下代码进行推理:
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",
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 the common person appearing in all these images 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)
4. 模型微调
使用提供的两阶段训练脚本 stage-1_finetune_full.yaml
和 stage-2_finetune_full.yaml
对模型进行微调。
资源
- 项目主页:https://migician-vg.github.io/
- GitHub 仓库:https://github.com/thunlp/Migician
- HuggingFace 模型库:https://huggingface.co/Michael4933/Migician
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦