LLaVA-Next-Inst-It-Vicuna-7B 是一款在多模态实例级理解方面表现卓越的模型,通过显式视觉提示指令调优增强多模态实例理解。
下载量 14
发布时间 : 12/5/2024
模型介绍
内容详情
替代品
模型简介
该模型基于 LLaVA-NeXT 架构,结合 Vicuna-7B 语言模型,专注于多模态实例级理解任务,支持图像和视频的细粒度分析。
模型特点
多模态实例级理解
通过显式视觉提示指令调优,增强对图像和视频中实例的细粒度理解能力。
支持 Set-of-Marks 视觉提示
可以利用 Set-of-Marks 视觉提示进行更精确的实例引用和分析。
视频帧时间戳引用
支持通过时间戳引用视频中的特定帧,实现时序感知的多模态理解。
模型能力
图像实例级描述
视频时序分析
多模态问答
细粒度视觉理解
开放式文本生成
使用案例
图像理解
图像实例描述
对图像中的特定实例进行详细描述,支持通过实例 ID 引用。
在 Inst-IT-Bench-I-OE 数据集上达到 68.6% 的准确率。
视频理解
视频时序分析
分析视频中特定时间点的内容变化,支持时间戳引用。
在 Inst-IT-Bench-V-OE 数据集上达到 49.3% 的准确率。
多模态问答
图像问答
回答关于图像内容的复杂问题,包括实例级细节。
在 GQA 数据集上达到 65.9% 的准确率。
许可证:apache-2.0
数据集:
- Inst-IT/Inst-IT-Dataset
- lmms-lab/LLaVA-NeXT-Data
语言: - 英语
评估指标: - 准确率
基础模型: - liuhaotian/llava-v1.6-vicuna-7b
任务标签:视频-文本到文本
标签: - 多模态
- 细粒度
- 实例理解
模型索引: - 名称:LLaVA-Next-Inst-It-Vicuna-7B
结果:- 任务:
类型:多模态
数据集:
名称:Inst-IT-Bench-I-OE
类型:开放式
评估指标:- 类型:准确率
值:68.6
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:Inst-IT-Bench-I-MC
类型:多项选择
评估指标:- 类型:准确率
值:63
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:AI2D
类型:ai2d
评估指标:- 类型:准确率
值:71
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:MMMU
类型:mmmu
评估指标:- 类型:准确率
值:37.4
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:POPE
类型:pope
评估指标:- 类型:准确率
值:87.2
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:GQA
类型:gqa
评估指标:- 类型:准确率
值:65.9
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:MM-Vet
类型:mm-vet
评估指标:- 类型:准确率
值:38.1
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:Inst-IT-Bench-V-OE
类型:开放式
评估指标:- 类型:准确率
值:49.3
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:Inst-IT-Bench-V-MC
类型:多项选择
评估指标:- 类型:准确率
值:42.1
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:ActNet-QA
类型:actnet-qa
评估指标:- 类型:准确率
值:53.7
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:EgoSchema
类型:egoschema
评估指标:- 类型:准确率
值:57.8
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:NextQA
类型:nextqa
评估指标:- 类型:准确率
值:70.2
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:VideoMME
类型:videomme
评估指标:- 类型:准确率
值:44.3
名称:准确率
已验证:是
- 类型:准确率
- 任务:
类型:多模态
数据集:
名称:TempoCompass
类型:tempocompass
评估指标:- 类型:准确率
值:59.8
名称:准确率
已验证:是
- 类型:准确率
- 任务:
LLaVA-Next-Inst-It-Vicuna-7B
LLaVA-Next-Inst-It-Vicuna-7B 是一款在多模态实例级理解方面表现卓越的模型,其详情见论文 Inst-IT: 通过显式视觉提示指令调优增强多模态实例理解。
- 架构:clip-vit-large-patch14-336 + Vicuna-7B
- 初始化模型:LLaVA-NeXT
- 数据:LLaVA-NeXT-Data / Inst-IT-Dataset
- 精度:bfloat16
快速开始
安装
我们的代码基于 LLaVA-NeXT,运行前请先安装 LLaVA-NeXT 以准备环境:
pip install git+https://github.com/LLaVA-VL/LLaVA-NeXT.git
加载模型
from llava.model.builder import load_pretrained_model
from llava.constants import (
DEFAULT_IMAGE_TOKEN,
IMAGE_TOKEN_INDEX,
)
from llava.mm_utils import (
KeywordsStoppingCriteria,
get_model_name_from_path,
tokenizer_image_token,
process_images
)
from llava.conversation import SeparatorStyle, conv_templates
overwrite_config = {}
overwrite_config["mm_spatial_pool_stride"] = 2
overwrite_config["mm_spatial_pool_mode"] = 'bilinear'
overwrite_config["mm_pooling_position"] = 'after'
overwrite_config["mm_newline_position"] = 'no_token'
model_path = "Inst-IT/LLaVA-Next-Inst-It-Vicuna-7B"
model_name = get_model_name_from_path(model_path)
tokenizer, model, image_processor, max_length = load_pretrained_model(
model_path=model_path,
model_base=None,
model_name=model_name,
device_map="auto",
torch_dtype='bfloat16',
overwrite_config=overwrite_config,
attn_implementation='sdpa')
图像推理
不使用 SoMs 的推理
我们的模型可以在没有 Set-of-Marks 视觉提示的情况下进行图像推理,此时其使用方式与基础模型 LLaVA-NeXT 相同。
import torch
import requests
from PIL import Image
img_url = "https://github.com/inst-it/inst-it/blob/main/assets/demo/image.jpg?raw=true"
image = Image.open(requests.get(img_url, stream=True).raw)
image_tensor = process_images([image], image_processor, model.config).bfloat16()
image_sizes = [image.size]
question = "描述这张图片。"
question = DEFAULT_IMAGE_TOKEN + "\n" + question
conv_template = 'vicuna_v1'
conv = conv_templates[conv_template].copy()
conv.append_message(conv.roles[0], question)
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()
input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors="pt").unsqueeze(0).cuda()
pad_token_ids = tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
attention_masks = input_ids.ne(pad_token_ids).long().cuda()
stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
keywords = [stop_str]
stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)
with torch.inference_mode():
output_ids = model.generate(
inputs=input_ids,
images=image_tensor,
attention_mask=attention_masks,
modalities="image",
image_sizes=image_sizes,
use_cache=True,
stopping_criteria=[stopping_criteria],
max_new_tokens=4096
)
pred = tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0].strip()
print(pred)
使用 SoMs 的推理
当提供 Set-of-Marks 视觉提示时,我们的模型能进行更细粒度的理解。
您可以通过实例的 ID 来引用您感兴趣的实例。
与之前的推理代码相比,以下代码除了输入图像(已用 Set-of-Marks 进行视觉提示)外没有其他修改。
参考 此链接 了解如何为图像生成 SoMs。
import torch
import requests
from PIL import Image
img_url = "https://github.com/inst-it/inst-it/blob/main/assets/demo/image_som.jpg?raw=true"
image = Image.open(requests.get(img_url, stream=True).raw)
image_tensor = process_images([image], image_processor, model.config).bfloat16()
image_sizes = [image.size]
# 您可以使用 [id] 来引用您感兴趣的实例
question = "详细描述 [8]。"
question = DEFAULT_IMAGE_TOKEN + "\n" + question
conv_template = 'vicuna_v1'
conv = conv_templates[conv_template].copy()
conv.append_message(conv.roles[0], question)
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()
input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors="pt").unsqueeze(0).cuda()
pad_token_ids = tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
attention_masks = input_ids.ne(pad_token_ids).long().cuda()
stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
keywords = [stop_str]
stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)
with torch.inference_mode():
output_ids = model.generate(
inputs=input_ids,
images=image_tensor,
attention_mask=attention_masks,
modalities="image",
image_sizes=image_sizes,
use_cache=True,
stopping_criteria=[stopping_criteria],
max_new_tokens=4096
)
pred = tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0].strip()
print(pred)
视频推理
对于视频,我们将每一帧组织成一个列表。您可以使用格式 <t> 来引用特定的时间戳(例如 <1>)。
不使用 SoMs 的推理
我们的模型可以在没有 Set-of-Marks 视觉提示的情况下进行视频推理,此时其使用方式与基础模型 LLaVA-NeXT 相同。
import torch
import requests
from PIL import Image
frame_urls = [
"https://github.com/inst-it/inst-it/blob/main/assets/demo/frame_1.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/frame_2.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/frame_3.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/frame_4.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/frame_5.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/frame_6.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/frame_7.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/frame_8.jpg?raw=true"
]
video = [Image.open(requests.get(frame_url, stream=True).raw) for frame_url in frame_urls]
video = image_processor.preprocess(video, return_tensors="pt")["pixel_values"].cuda()
video = video.bfloat16()
videos = [video]
question = "描述这段视频。" # 整体视频描述
question = "第 <1> 帧发生了什么?" # 描述特定时刻
question = DEFAULT_IMAGE_TOKEN + "\n" + question
conv_template = 'vicuna_v1'
conv = conv_templates[conv_template].copy()
conv.append_message(conv.roles[0], question)
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()
input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors="pt").unsqueeze(0).cuda()
pad_token_ids = tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
attention_masks = input_ids.ne(pad_token_ids).long().cuda()
stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
keywords = [stop_str]
stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)
with torch.inference_mode():
output_ids = model.generate(
inputs=input_ids,
images=videos,
attention_mask=attention_masks,
modalities="video",
use_cache=True,
stopping_criteria=[stopping_criteria],
max_new_tokens=4096
)
pred = tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0].strip()
print(pred)
使用 SoMs 的推理
当提供 Set-of-Marks 视觉提示时,我们的模型能进行更细粒度的理解。
您可以通过实例的 ID 来引用您感兴趣的实例。
与之前的推理代码相比,以下代码除了输入视频(已用 Set-of-Marks 进行视觉提示)外没有其他修改。
参考 SAM2 和 SoM 了解如何为视频生成 SoMs。
import torch
import requests
from PIL import Image
frame_urls = [
"https://github.com/inst-it/inst-it/blob/main/assets/demo/som_frame_1.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/som_frame_2.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/som_frame_3.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/som_frame_4.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/som_frame_5.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/som_frame_6.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/som_frame_7.jpg?raw=true",
"https://github.com/inst-it/inst-it/blob/main/assets/demo/som_frame_8.jpg?raw=true"
]
video = [Image.open(requests.get(frame_url, stream=True).raw) for frame_url in frame_urls]
video = image_processor.preprocess(video, return_tensors="pt")["pixel_values"].cuda()
video = video.bfloat16()
videos = [video]
# 您可以使用 [id] 来引用您感兴趣的实例
question = "[3] 在 <1> 时可见吗?"
question = DEFAULT_IMAGE_TOKEN + "\n" + question
conv_template = 'vicuna_v1'
conv = conv_templates[conv_template].copy()
conv.append_message(conv.roles[0], question)
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()
input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors="pt").unsqueeze(0).cuda()
pad_token_ids = tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
attention_masks = input_ids.ne(pad_token_ids).long().cuda()
stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
keywords = [stop_str]
stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)
with torch.inference_mode():
output_ids = model.generate(
inputs=input_ids,
images=videos,
attention_mask=attention_masks,
modalities="video",
use_cache=True,
stopping_criteria=[stopping_criteria],
max_new_tokens=4096
)
pred = tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0].strip()
print(pred)
联系方式
如有任何问题或建议,欢迎联系我们:
- 邮箱(彭武健):wjpeng24@m.fudan.edu.cn
- 邮箱(孟令琛):lcmeng20@fudan.edu.cn
引用
@article{peng2024inst,
title={Inst-IT: 通过显式视觉提示指令调优增强多模态实例理解},
author={彭武健 and 孟令琛 and 陈一桐 and 谢一炜 and 刘洋 and 桂涛 and 徐航 and 邱锡鹏 and 吴祖煊 and 姜育刚},
journal={arXiv preprint arXiv:2412.03565},
year={2024}
}
Mistral Small 3.1 24B Instruct 2503 FP8 Dynamic
Apache-2.0
这是一个基于Mistral3架构的24B参数条件生成模型,经过FP8动态量化优化,适用于多语言文本生成和视觉理解任务。
文本到文本
Safetensors
支持多种语言
M
RedHatAI
2,650
5
Mistral Small 3.1 24B Instruct 2503 Quantized.w8a8
Apache-2.0
这是一个经过INT8量化的Mistral-Small-3.1-24B-Instruct-2503模型,由Red Hat和Neural Magic优化,适用于快速响应和低延迟场景。
文本到文本
Safetensors
支持多种语言
M
RedHatAI
833
2
Smolvlm2 2.2B Instruct I1 GGUF
Apache-2.0
SmolVLM2-2.2B-Instruct 是一个2.2B参数规模的视觉语言模型,专注于视频文本到文本任务,支持英语。
文本到文本
英语
S
mradermacher
285
0
Spatialvla 4b Mix 224 Pt
MIT
SpatialVLA是一个视觉-语言-动作模型,通过微调基础模型在分形与桥数据集上获得,专为机器人控制任务设计。
文本到文本
Transformers

英语
S
IPEC-COMMUNITY
72
4
Llava Next Inst It Vicuna 7B
Apache-2.0
LLaVA-Next-Inst-It-Vicuna-7B 是一款在多模态实例级理解方面表现卓越的模型,通过显式视觉提示指令调优增强多模态实例理解。
文本到文本
Safetensors
英语
L
Inst-IT
14
2
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers

支持多种语言
L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers

英语
C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统
中文
R
uer
2,694
98
AIbase是一个专注于MCP服务的平台,为AI开发者提供高质量的模型上下文协议服务,助力AI应用开发。
简体中文