模型简介
模型特点
模型能力
使用案例
🚀 H2OVL-Mississippi-2B模型
H2OVL-Mississippi-2B是由H2O.ai开发的高性能通用视觉语言模型,可处理广泛的多模态任务。该模型拥有20亿参数,在图像描述、视觉问答(VQA)和文档理解等任务中表现出色,同时能满足实际应用的效率需求。它基于H2O-Danube语言模型构建,将功能扩展到视觉和语言任务的集成,在多个基准测试中可与更大的模型竞争,为文档AI、OCR和多模态推理提供了通用且可扩展的解决方案。
模型相关链接

✨ 主要特性
- 20亿参数:在性能和效率之间取得平衡,适用于文档处理、OCR、VQA等多种任务。
- 针对视觉语言任务优化:在包括文档AI、OCR和多模态推理等广泛应用中实现高性能。
- 综合数据集:在1700万图像 - 文本对上进行训练,确保广泛覆盖和强大的任务泛化能力。
📊 基准测试
多个基准测试中相似规模模型的性能比较 - OpenVLM排行榜
模型 | 参数 (B) | 平均得分 | MMBench | MMStar | MMMUVAL | Math Vista | Hallusion | AI2DTEST | OCRBench | MMVet |
---|---|---|---|---|---|---|---|---|---|---|
Qwen2-VL-2B | 2.1 | 57.2 | 72.2 | 47.5 | 42.2 | 47.8 | 42.4 | 74.7 | 797 | 51.5 |
H2OVL-Mississippi-2B | 2.1 | 54.4 | 64.8 | 49.6 | 35.2 | 56.8 | 36.4 | 69.9 | 782 | 44.7 |
InternVL2-2B | 2.1 | 53.9 | 69.6 | 49.8 | 36.3 | 46.0 | 38.0 | 74.1 | 781 | 39.7 |
Phi-3-Vision | 4.2 | 53.6 | 65.2 | 47.7 | 46.1 | 44.6 | 39.0 | 78.4 | 637 | 44.1 |
MiniMonkey | 2.2 | 52.7 | 68.9 | 48.1 | 35.7 | 45.3 | 30.9 | 73.7 | 794 | 39.8 |
MiniCPM-V-2 | 2.8 | 47.9 | 65.8 | 39.1 | 38.2 | 39.8 | 36.1 | 62.9 | 605 | 41.0 |
InternVL2-1B | 0.8 | 48.3 | 59.7 | 45.6 | 36.7 | 39.4 | 34.3 | 63.8 | 755 | 31.5 |
PaliGemma-3B-mix-448 | 2.9 | 46.5 | 65.6 | 48.3 | 34.9 | 28.7 | 32.2 | 68.3 | 614 | 33.1 |
H2OVL-Mississippi-0.8B | 0.8 | 43.5 | 47.7 | 39.1 | 34.0 | 39.0 | 29.6 | 53.6 | 751 | 30.0 |
DeepSeek-VL-1.3B | 2.0 | 39.6 | 63.8 | 39.9 | 33.8 | 29.8 | 27.6 | 51.5 | 413 | 29.2 |
🚀 快速开始
我们提供了使用transformers
运行h2ovl-mississippi-2b的示例代码。
📦 安装依赖
pip install transformers torch torchvision einops timm peft sentencepiece
如果您有安培架构的GPU,可以安装flash-attention以加速推理:
pip install flash_attn
💻 使用示例
基础用法
使用transformers
进行推理:
import torch
from transformers import AutoModel, AutoTokenizer
# 设置模型和分词器
model_path = 'h2oai/h2ovl-mississippi-2b'
model = AutoModel.from_pretrained(
model_path,
torch_dtype=torch.bfloat16,
low_cpu_mem_usage=True,
trust_remote_code=True).eval().cuda()
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True, use_fast=False)
generation_config = dict(max_new_tokens=1024, do_sample=True)
# 纯文本对话
question = 'Hello, who are you?'
response, history = model.chat(tokenizer, None, question, generation_config, history=None, return_history=True)
print(f'User: {question}\nAssistant: {response}')
# 单张图像示例
image_file = './examples/image1.jpg'
question = '<image>\nPlease describe the image in detail.'
response, history = model.chat(tokenizer, image_file, question, generation_config, history=None, return_history=True)
print(f'User: {question}\nAssistant: {response}')
# 多张图像 - 多轮对话示例
image_files = ['./examples/image1.jpg', './examples/image2.jpg']
question = 'Image-1: <image>\nImage-2: <image>\nDescribe the Image-1 and Image-2 in detail.'
response, history = model.chat(tokenizer, image_files, question, generation_config, history=None, return_history=True)
print(f'User: {question}\nAssistant: {response}')
question = 'What are the similarities and differences between these two images.'
response, history = model.chat(tokenizer, image_files, question, generation_config=generation_config, history=history, return_history=True)
print(f'User: {question}\nAssistant: {response}')
高级用法
使用vllm
进行推理:
h2ovl-mississippi模型也支持vllm v0.6.4及更高版本。
首先安装vllm:
pip install vllm
离线推理
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
from PIL import Image
question = "Describe this image in detail"
image = Image.open("assets/a_cat.png")
model_name = "h2oai/h2ovl-mississippi-2b"
llm = LLM(
model=model_name,
)
tokenizer = AutoTokenizer.from_pretrained(model_name,
trust_remote_code=True)
messages = [{'role': 'user', 'content': f"<image>\n{question}"}]
prompt = tokenizer.apply_chat_template(messages,
tokenize=False,
add_generation_prompt=True)
# H2OVL-Mississippi的停止标记
# https://huggingface.co/h2oai/h2ovl-mississippi-2b
stop_token_ids = [tokenizer.eos_token_id]
sampling_params = SamplingParams(n=1,
temperature=0.8,
top_p=0.8,
seed=777, # 可复现性的种子
max_tokens=1024,
stop_token_ids=stop_token_ids)
# 单提示推理
outputs = llm.generate({
"prompt": prompt,
"multi_modal_data": {"image": image},
},
sampling_params=sampling_params)
# 查看输出
for o in outputs:
generated_text = o.outputs[0].text
print(generated_text)
更多示例请见:https://docs.vllm.ai/en/latest/models/vlm.html#offline-inference
使用与OpenAI兼容的视觉API进行在线推理
运行以下命令以使用h2ovl-mississippi-2b模型启动vLLM服务器:
vllm serve h2oai/h2ovl-mississippi-2b --dtype auto --api-key token-abc123
from openai import OpenAI
client = OpenAI(
base_url="http://0.0.0.0:8000/v1",
api_key="token-abc123",
)
# 检查模型名称
model_name = client.models.list().data[0].id
print(model_name)
# 使用聊天完成API
response = client.chat.completions.create(
model=model_name,
messages=[{
'role':
'user',
'content': [{
'type': 'text',
'text': 'describe this image in detail',
}, {
'type': 'image_url',
'image_url': {
'url':
# 来自https://galaxyofai.com/opencv-with-python-full-tutorial-for-data-science/的图像示例
# 这是一只猫
'https://galaxyofai.com/wp-content/uploads/2023/04/image-42.png',
},
}],
}],
temperature=0.8,
top_p=0.8)
print(response)
更多示例请见:https://docs.vllm.ai/en/latest/models/vlm.html#online-inference
📚 详细文档:JSON提取的提示工程
概述
本指南展示了如何创建提示,以提取信息并将其转换为结构化的JSON输出。从基础示例开始,逐步过渡到更复杂的JSON结构,包括处理表格和图表图像中的数据。目标是帮助用户设计可用于各种应用(如自然语言处理、聊天机器人或从视觉输入中提取数据)的有效提示。
目录
开始使用
要开始从图像中提取JSON数据,必须清楚了解要提取的视觉内容以及所需JSON输出的结构。以下示例将指导您如何编写提示以实现这一目标。
示例1:从图像中提取简单信息
假设场景:您有一张包含“姓名”、“出生日期”和“地址”等基本信息的表格图像。
提示:
从表格图像中提取详细信息,并将其结构化为JSON格式:
{
"name": "",
"date_of_birth": "",
"address": ""
}
预期输出:
{
"name": "John Doe",
"date_of_birth": "1990-01-01",
"address": "1234 Elm Street, Springfield"
}
示例2:从图像中提取嵌套信息
假设场景:您有一张包含详细个人信息(包括联系方式和紧急联系人)的表格图像。
提示:
从表格中提取信息,并按以下格式进行格式化:
{
"personal_details": {
"name": "",
"age": 0,
"gender": ""
},
"contact": {
"phone": "",
"email": ""
},
"emergency_contact": {
"name": "",
"relation": "",
"phone": ""
}
}
预期输出:
{
"personal_details": {
"name": "Sarah Connor",
"age": 35,
"gender": "Female"
},
"contact": {
"phone": "555-1234",
"email": "sarah.connor@example.com"
},
"emergency_contact": {
"name": "Kyle Reese",
"relation": "Friend",
"phone": "555-5678"
}
}
示例3:从图像中提取列表和数组
假设场景:您有一张列出多个事件、其时间和地点的日程表图像。
提示:
从日程表图像中提取事件详细信息,并将其结构化为JSON:
{
"events": [
{
"name": "",
"time": "",
"location": ""
}
]
}
预期输出:
{
"events": [
{
"name": "Morning Meeting",
"time": "09:00 AM",
"location": "Conference Room 1"
},
{
"name": "Lunch Break",
"time": "12:00 PM",
"location": "Cafeteria"
},
{
"name": "Project Update",
"time": "02:00 PM",
"location": "Conference Room 2"
}
]
}
示例4:从图像中提取表格数据
表格图像通常包含需要解析并转换为JSON的结构化数据。以下示例展示了如何处理表格数据提取。
假设场景:您有一张列出产品名称、价格和数量的表格图像。
提示:
从表格图像中提取数据,并将其格式化为JSON:
{
"products": [
{
"product_name": "",
"price": "",
"quantity": 0
}
]
}
预期输出:
{
"products": [
{
"product_name": "Apples",
"price": "$2",
"quantity": 10
},
{
"product_name": "Bananas",
"price": "$1",
"quantity": 20
},
{
"product_name": "Oranges",
"price": "$3",
"quantity": 15
}
]
}
示例5:从图像中提取图表数据
图表包含需要准确提取的元数据和数据点。以下是如何构建提示以从图像中提取图表数据的方法。
假设场景:您有一张显示月度销售数据的柱状图图像。
提示:
从图像中提取柱状图的详细信息,包括标题、轴标签和数据点,并将其格式化为JSON:
{
"chart": {
"title": "",
"x_axis": "",
"y_axis": "",
"data_points": [
{
"label": "",
"value": 0
}
]
}
}
预期输出:
{
"chart": {
"title": "Monthly Sales Report",
"x_axis": "Months",
"y_axis": "Sales (in $)",
"data_points": [
{
"label": "January",
"value": 500
},
{
"label": "February",
"value": 600
},
{
"label": "March",
"value": 700
}
]
}
}
最佳实践
- 明确表述:在提示中清晰定义所需的键和结构,以避免歧义。
- 使用示例:提供示例输出,以便系统理解预期格式。
- 考虑变化:考虑视觉数据中可能的变化,并确保提示能够适应这些变化。
- 从简单开始:从简单的结构开始,根据需要逐步增加复杂性。
- 测试和迭代:通过测试优化提示,确保输出的准确性和一致性。
致谢
我们要感谢OpenGVLab的InternVL团队的研究和代码库,我们在此基础上进行了构建和扩展。我们也感谢LLaVA团队和Monkey团队在改进多模态模型方面提供的见解和技术。
免责声明
在使用本仓库中提供的大语言模型之前,请仔细阅读本免责声明。您使用该模型即表示您同意以下条款和条件。
- 偏差和冒犯性:大语言模型是在各种互联网文本数据上进行训练的,这些数据可能包含有偏差、种族主义、冒犯性或其他不适当的内容。使用此模型即表示您承认并接受生成的内容有时可能存在偏差或产生冒犯性或不适当的内容。本仓库的开发者不认可、支持或推广任何此类内容或观点。
- 局限性:大语言模型是基于人工智能的工具,而非人类。它可能会产生不正确、无意义或不相关的回复。用户有责任批判性地评估生成的内容,并自行决定是否使用。
- 自担风险:使用此大语言模型的用户必须对使用该工具可能产生的任何后果承担全部责任。本仓库的开发者和贡献者不对因使用或滥用所提供的模型而导致的任何损害、损失或伤害承担责任。
- 道德考量:鼓励用户负责任和道德地使用大语言模型。使用此模型即表示您同意不将其用于宣扬仇恨言论、歧视、骚扰或任何形式的非法或有害活动。
- 报告问题:如果您遇到大语言模型生成的有偏差、冒犯性或其他不适当的内容,请通过提供的渠道向仓库维护者报告。您的反馈将有助于改进模型并减轻潜在问题。
- 免责声明变更:本仓库的开发者保留随时修改或更新本免责声明的权利,无需事先通知。用户有责任定期查看免责声明,以了解任何变更。
使用本仓库中提供的大语言模型即表示您同意接受并遵守本免责声明中规定的条款和条件。如果您不同意本免责声明的任何部分,则应避免使用该模型及其生成的任何内容。
📄 许可证
本项目采用Apache-2.0许可证。








