模型介绍
内容详情
替代品
模型简介
Kosmos-2是一个基于Transformer架构的多模态模型,专注于图像描述生成和视觉定位任务。它能够理解图像内容并生成相关文本描述,同时还能识别图像中的特定对象并定位其位置。
模型特点
多模态理解
能够同时处理视觉和语言信息,实现图像与文本的联合理解
视觉定位
可以识别图像中的特定对象并生成对应的边界框坐标
多样化任务支持
通过修改提示词可执行多种视觉-语言任务
模型能力
图像描述生成
视觉对象定位
多模态问答
指代表达理解
指代表达生成
使用案例
内容理解
图像自动标注
为图像生成详细的文字描述
生成包含图像主要元素的自然语言描述
视觉问答
回答关于图像内容的特定问题
准确回答图像相关的问题并定位相关对象
辅助工具
无障碍应用
为视障人士描述图像内容
提供详细的图像描述和对象位置信息
pipeline_tag: 图像转文本 tags:
- 图像描述生成 languages:
- 英文 license: mit
Kosmos-2:将多模态大语言模型与现实世界锚定
本Hub仓库包含微软原始Kosmos-2模型的HuggingFace transformers
实现。
模型快速上手
使用以下代码快速体验模型:
import requests
from PIL import Image
from transformers import AutoProcessor, AutoModelForVision2Seq
model = AutoModelForVision2Seq.from_pretrained("microsoft/kosmos-2-patch14-224")
processor = AutoProcessor.from_pretrained("microsoft/kosmos-2-patch14-224")
prompt = "<grounding>一张"
url = "https://huggingface.co/microsoft/kosmos-2-patch14-224/resolve/main/snowman.png"
image = Image.open(requests.get(url, stream=True).raw)
# 原始Kosmos-2演示会先保存图像再重新加载。对某些图像,这会带来细微差异并影响生成结果
image.save("new_image.jpg")
image = Image.open("new_image.jpg")
inputs = processor(text=prompt, images=image, return_tensors="pt")
generated_ids = model.generate(
pixel_values=inputs["pixel_values"],
input_ids=inputs["input_ids"],
attention_mask=inputs["attention_mask"],
image_embeds=None,
image_embeds_position_mask=inputs["image_embeds_position_mask"],
use_cache=True,
max_new_tokens=128,
)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
# 设置`cleanup_and_extract=False`可查看原始模型生成
processed_text = processor.post_process_generation(generated_text, cleanup_and_extract=False)
print(processed_text)
# `<grounding> 一张<phrase>雪人</phrase><object><patch_index_0044><patch_index_0863></object>在<phrase>火堆</phrase><object><patch_index_0005><patch_index_0911></object>旁取暖的图片`
# 默认会清理生成文本并提取实体
processed_text, entities = processor.post_process_generation(generated_text)
print(processed_text)
# `一张雪人在火堆旁取暖的图片`
print(entities)
# `[('雪人', (3, 5), [(0.390625, 0.046875, 0.984375, 0.828125)]), ('火堆', (8, 10), [(0.171875, 0.015625, 0.484375, 0.890625)])]`
任务能力
通过修改提示词,本模型可执行不同任务。
首先定义运行提示的函数:
点击展开
import requests
from PIL import Image
from transformers import AutoProcessor, AutoModelForVision2Seq
model = AutoModelForVision2Seq.from_pretrained("microsoft/kosmos-2-patch14-224")
processor = AutoProcessor.from_pretrained("microsoft/kosmos-2-patch14-224")
url = "https://huggingface.co/microsoft/kosmos-2-patch14-224/resolve/main/snowman.png"
image = Image.open(requests.get(url, stream=True).raw)
def run_example(prompt):
inputs = processor(text=prompt, images=image, return_tensors="pt")
generated_ids = model.generate(
pixel_values=inputs["pixel_values"],
input_ids=inputs["input_ids"],
attention_mask=inputs["attention_mask"],
image_embeds=None,
image_embeds_position_mask=inputs["image_embeds_position_mask"],
use_cache=True,
max_new_tokens=128,
)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
_processed_text = processor.post_process_generation(generated_text, cleanup_and_extract=False)
processed_text, entities = processor.post_process_generation(generated_text)
print(processed_text)
print(entities)
print(_processed_text)
Kosmos-2支持的任务示例:
点击展开
多模态锚定
• 短语定位
prompt = "<grounding><phrase>雪人</phrase>"
run_example(prompt)
# 雪人正在火堆旁取暖
# [('雪人', (0, 2), [(0.390625, 0.046875, 0.984375, 0.828125)]), ('火堆', (7, 9), [(0.203125, 0.015625, 0.453125, 0.859375)])]
• 指代表达理解
prompt = "<grounding><phrase>火堆旁的雪人</phrase>"
run_example(prompt)
# 火堆旁的雪人
# [('火堆旁的雪人', (0, 6), [(0.390625, 0.046875, 0.984375, 0.828125)])]
多模态指代
• 指代表达生成
prompt = "<grounding><phrase>它</phrase><object><patch_index_0044><patch_index_0863></object>是"
run_example(prompt)
# 它是戴帽子和围巾的雪人
# [('它', (0, 1), [(0.390625, 0.046875, 0.984375, 0.828125)])]
感知-语言任务
• 锚定视觉问答
prompt = "<grounding>问题:这张图的特别之处?回答:"
run_example(prompt)
# 问题:这张图的特别之处?回答:图中雪人在雪地篝火旁休息
# [('雪人', (15, 17), [(0.390625, 0.046875, 0.984375, 0.828125)]), ('篝火', (20, 22), [(0.109375, 0.640625, 0.546875, 0.984375)])]
• 通过边界框的多模态指代问答
prompt = "<grounding>问题:<phrase>火堆</phrase><object><patch_index_0005><patch_index_0911></object>旁边是什么?回答:"
run_example(prompt)
# 问题:火堆旁边是什么?回答:雪人旁边
# [('火堆', (3, 5), [(0.171875, 0.015625, 0.484375, 0.890625)]), ('雪人', (12, 14), [(0.390625, 0.046875, 0.984375, 0.828125)])]
锚定图像描述
• 简洁描述
prompt = "<grounding>一张"
run_example(prompt)
# 一张雪人在篝火旁取暖的图
# [('雪人', (2, 4), [(0.390625, 0.046875, 0.984375, 0.828125)]), ('篝火', (7, 9), [(0.109375, 0.640625, 0.546875, 0.984375)])]
• 详细描述
prompt = "<grounding>详细描述这张图:"
run_example(prompt)
# 详细描述这张图:图中雪人坐在雪地的篝火旁,戴着帽子、围巾和手套,附近有锅和杯子。雪人似乎在享受火的温暖,整体氛围温馨舒适。
# [('篝火', (14, 16), [(0.171875, 0.015625, 0.484375, 0.984375)]), ('帽子', (22, 24), [(0.515625, 0.046875, 0.828125, 0.234375)]), ('围巾', (25, 27), [(0.515625, 0.234375, 0.890625, 0.578125)]), ('手套', (29, 31), [(0.515625, 0.390625, 0.640625, 0.515625)]), ('锅', (34, 35), [(0.078125, 0.609375, 0.265625, 0.859375)]), ('杯子', (39, 41), [(0.890625, 0.765625, 0.984375, 0.984375)])]
在图像上绘制实体边界框
获得entities
后,可用以下辅助函数在图像上绘制边界框:
点击展开
import cv2
import numpy as np
import os
import requests
import torch
import torchvision.transforms as T
from PIL import Image
# (此处省略具体实现代码,保留核心功能说明)
# 该函数可接受PIL图像、文件路径或PyTorch张量
# 会自动处理边界框重叠情况,为每个实体添加彩色标注框和文字说明
# 使用示例
url = "https://huggingface.co/microsoft/kosmos-2-patch14-224/resolve/main/snowman.png"
image = Image.open(requests.get(url, stream=True).raw)
entities = [('雪人', (12, 14), [(0.390625, 0.046875, 0.984375, 0.828125)]), ('火堆', (41, 43), [(0.171875, 0.015625, 0.484375, 0.890625)])]
draw_entity_boxes_on_image(image, entities, show=True)
标注效果示例:
引用信息
@article{kosmos-2,
title={Kosmos-2:将多模态大语言模型与现实世界锚定},
author={彭志良 and 王文辉 and 董力 and 郝雅茹 and 黄少晗 and 马树明 and 韦福如},
journal={ArXiv},
year={2023},
volume={abs/2306}
}
@article{kosmos-1,
title={语言非唯一所需:对齐感知与语言模型},
author={黄少晗 and 董力 and 王文辉 and 郝雅茹 and Saksham Singhal and 马树明 and 吕腾超 and 崔磊 and Owais Khan Mohammed and 刘强 and Kriti Aggarwal and 迟泽文 and Johan Bjorck and Vishrav Chaudhary and Subhojit Som and 宋夏 and 韦福如},
journal={ArXiv},
year={2023},
volume={abs/2302.14045}
}
@article{metalm,
title={语言模型是通用接口},
author={郝雅茹 and 宋浩宇 and 董力 and 黄少晗 and 迟泽文 and 王文辉 and 马树明 and 韦福如},
journal={ArXiv},
year={2022},
volume={abs/2206.06336}
}
Clip Vit Large Patch14
CLIP是由OpenAI开发的视觉-语言模型,通过对比学习将图像和文本映射到共享的嵌入空间,支持零样本图像分类
图像生成文本
C
openai
44.7M
1,710
Clip Vit Base Patch32
CLIP是由OpenAI开发的多模态模型,能够理解图像和文本之间的关系,支持零样本图像分类任务。
图像生成文本
C
openai
14.0M
666
Siglip So400m Patch14 384
Apache-2.0
SigLIP是基于WebLi数据集预训练的视觉语言模型,采用改进的sigmoid损失函数,优化了图像-文本匹配任务。
图像生成文本
Transformers

S
google
6.1M
526
Clip Vit Base Patch16
CLIP是由OpenAI开发的多模态模型,通过对比学习将图像和文本映射到共享的嵌入空间,实现零样本图像分类能力。
图像生成文本
C
openai
4.6M
119
Blip Image Captioning Base
Bsd-3-clause
BLIP是一个先进的视觉-语言预训练模型,擅长图像描述生成任务,支持条件式和非条件式文本生成。
图像生成文本
Transformers

B
Salesforce
2.8M
688
Blip Image Captioning Large
Bsd-3-clause
BLIP是一个统一的视觉-语言预训练框架,擅长图像描述生成任务,支持条件式和无条件式图像描述生成。
图像生成文本
Transformers

B
Salesforce
2.5M
1,312
Openvla 7b
MIT
OpenVLA 7B是一个基于Open X-Embodiment数据集训练的开源视觉-语言-动作模型,能够根据语言指令和摄像头图像生成机器人动作。
图像生成文本
Transformers

英语
O
openvla
1.7M
108
Llava V1.5 7b
LLaVA 是一款开源多模态聊天机器人,基于 LLaMA/Vicuna 微调,支持图文交互。
图像生成文本
Transformers

L
liuhaotian
1.4M
448
Vit Gpt2 Image Captioning
Apache-2.0
这是一个基于ViT和GPT2架构的图像描述生成模型,能够为输入图像生成自然语言描述。
图像生成文本
Transformers

V
nlpconnect
939.88k
887
Blip2 Opt 2.7b
MIT
BLIP-2是一个视觉语言模型,结合了图像编码器和大型语言模型,用于图像到文本的生成任务。
图像生成文本
Transformers

英语
B
Salesforce
867.78k
359
精选推荐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应用开发。
简体中文