介绍

2023 年是 AI 的一年,从语言模型到稳定的扩散模型。占据中心舞台的新玩家之一是 Microsoft 开发的 KOSMOS-2。它是一种多模态大型语言模型 (MLLM),在理解文本和图像方面具有突破性的能力。开发语言模型是一回事,而创建视觉模型是另一回事,但拥有两种技术的模型是人工智能的另一个整体层次。在本文中,我们将深入探讨 KOSMOS-2 的功能和潜在应用及其对 AI 和机器学习的影响。

学习目标

● 了解 KOSMOS-2 多模态大型语言模型。

● 了解 KOSMOS-2 如何执行多模态接地和参照表达式生成。

● 深入了解 KOSMOS-2 的实际应用。

● 在 Colab 中使用 KOSMOS 运行推理

了解 KOSMOS-2 模型

KOSMOS-2 是 Microsoft 研究团队在题为“Kosmos-2:将多模态大型语言模型推向世界”的论文中的心血结晶。KOSMOS-2 旨在同时处理文本和图像,并重新定义我们与多模态数据的交互方式,它建立在基于 Transformer 的因果语言模型架构之上,类似于 LLaMa-2 和 Mistral AI 的 7b 模型等其他著名模型。

KOSMOS-2:Microsoft 的多模态大型语言模型-Mo 动态

然而,KOSMOS-2 的与众不同之处在于其独特的训练过程。它是在称为 GRIT 的接地图像文本对的庞大数据集上训练的,其中文本包含对图像中对象的引用,其形式为边界框作为特殊标记。这种创新方法使 KOSMOS-2 能够提供对文本和图像的新理解。

什么是多式联运接地?

KOSMOS-2 的突出特点之一是它能够执行“多模式接地”。这意味着它可以为描述对象及其在图像中的位置的图像生成标题。这减少了语言模型中的常见问题“幻觉”,大大提高了模型的准确性和可靠性。

这个概念通过独特的标记将文本与图像中的对象连接起来,有效地将对象“接地”在视觉上下文中。这减少了幻觉,并增强了模型生成准确图像标题的能力。

引用表达式生成

KOSMOS-2 在“引用表达式生成”方面也表现出色。此功能允许用户使用图像中的特定边界框和问题来提示模型。然后,该模型可以回答有关图像中特定位置的问题,从而为理解和解释视觉内容提供强大的工具。

这个令人印象深刻的“引用表达式生成”用例允许用户使用提示,并为自然语言与视觉内容的交互开辟了新的途径。

使用 KOSMOS-2 的代码演示

我们将看到如何使用 KOSMOS-2 模式在 Colab 上运行推理。在此处查找完整代码:https://github.com/inuwamobarak/KOSMOS-2

第 1 步:设置环境

在此步骤中,我们将安装必要的依赖项,例如 Hugging Face、 Transformers、Accelerate 和 Bitsandbytes。这些库对于使用 KOSMOS-2 进行高效推理至关重要。

!pip install -q git+https://github.com/huggingface/transformers.git accelerate bitsandbytes

第 2 步:加载 KOSMOS-2 模型

接下来,我们加载 KOSMOS-2 模型及其处理器。

from transformers import AutoProcessor, AutoModelForVision2Seq

processor = AutoProcessor.from_pretrained("microsoft/kosmos-2-patch14-224")
model = AutoModelForVision2Seq.from_pretrained("microsoft/kosmos-2-patch14-224", load_in_4bit=True, device_map={"": 0})

第 3 步:加载图像和提示

在此步骤中,我们进行图像接地。我们加载图像并提供模型完成的提示。我们使用独特的标记,这对于引用图像中的对象至关重要。

import requests
from PIL import Image

prompt = "<grounding>An image of"
url = "https://huggingface.co/microsoft/kosmos-2-patch14-224/resolve/main/snowman.png"
image = Image.open(requests.get(url, stream=True).raw)
image

KOSMOS-2:Microsoft 的多模态大型语言模型-Mo 动态

第 4 步:生成完成

接下来,我们准备图像并使用处理器提示模型。然后,我们让模型自回归生成完成。生成的完成提供有关图像及其内容的信息。

inputs = processor(text=prompt, images=image, return_tensors="pt").to("cuda:0")

# Autoregressively generate completion
generated_ids = model.generate(**inputs, max_new_tokens=128)
# Convert generated token IDs back to strings
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]

第 5 步:后处理

我们查看原始生成的文本,其中可能包括一些与图像补丁相关的标记。这个后处理步骤确保我们得到有意义的结果。

print(generated_text)
<image>. the, to and of as in I that&#039; for is was- on’ it with The as at bet he have from by are " you his “ this said not has an ( but had we her they will my or were their): up about out who one all been she can more would It</image><grounding> An image of<phrase> a snowman</phrase><object><patch_index_0044><patch_index_0863></object> warming up by<phrase> a fire</phrase><object><patch_index_0006><patch_index_0879></object>

第 6 步:进一步处理

此步骤重点介绍生成的文本,而不是与图像相关的初始标记。我们提取详细信息,包括对象名称、短语和位置标记。这种提取的信息更有意义,使我们能够更好地理解模型的响应。

# By default, the generated text is cleaned up and the entities are extracted.
processed_text, entities = processor.post_process_generation(generated_text)

print(processed_text)
print(entities)
An image of a snowman warming up by a fire
[(&#039;a snowman&#039;, (12, 21), [(0.390625, 0.046875, 0.984375, 0.828125)]), (&#039;a fire&#039;, (36, 42), [(0.203125, 0.015625, 0.484375, 0.859375)])] 
end_of_image_token = processor.eoi_token
caption = generated_text.split(end_of_image_token)[-1]
print(caption)
<grounding> An image of<phrase> a snowman</phrase><object><patch_index_0044><patch_index_0863></object> warming up by<phrase> a fire</phrase><object><patch_index_0006><patch_index_0879></object>

第 7 步:绘制边界框

我们展示了如何可视化图像中标识的对象的边界框。这一步使我们能够了解模型在特定对象的位置。我们利用提取的信息来注释图像。

from PIL import ImageDraw

width, height = image.size
draw = ImageDraw.Draw(image)

for entity, _, box in entities:
    box = [round(i, 2) for i in box[0]]
    x1, y1, x2, y2 = tuple(box)
    x1, x2 = x1 * width, x2 * width
    y1, y2 = y1 * height, y2 * height
    draw.rectangle(xy=((x1, y1), (x2, y2)), outline="red")
    draw.text(xy=(x1, y1), text=entity)

image

KOSMOS-2:Microsoft 的多模态大型语言模型-Mo 动态

第 8 步:接地问答

KOSMOS-2 允许您与图像中的特定对象进行交互。在此步骤中,我们使用边界框和与特定对象相关的问题来提示模型。该模型根据上下文和图像中的信息提供答案。

url = "https://huggingface.co/ydshieh/kosmos-2-patch14-224/resolve/main/pikachu.png"
image = Image.open(requests.get(url, stream=True).raw)
image

KOSMOS-2:Microsoft 的多模态大型语言模型-Mo 动态

我们可以为皮卡丘准备一个问题和一个边界框。使用特殊的<短语>标记表示问题中存在短语。此步骤展示了如何使用扎根问答从图像中获取特定信息。

prompt = "<grounding> Question: What is<phrase> this character</phrase>? Answer:"

inputs = processor(text=prompt, images=image, bboxes=[(0.04182509505703422, 0.39244186046511625, 0.38783269961977185, 1.0)], return_tensors="pt").to("cuda:0")

第 9 步:生成接地答案

我们允许模型自回归完成问题,根据提供的上下文生成答案。

generated_ids = model.generate(**inputs, max_new_tokens=128)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]

# By default, the generated text is cleaned up, and the entities are extracted.
processed_text, entities = processor.post_process_generation(generated_text)

print(processed_text)
print(entities)
Question: What is this character? Answer: Pikachu in the anime.
[(&#039;this character&#039;, (18, 32), [(0.046875, 0.390625, 0.390625, 0.984375)])]

KOSMOS-2的应用

KOSMOS-2 的功能远远超出了实验室,进入了实际应用。它可以产生影响的一些领域包括:

1. 机器人:想象一下,如果你能告诉你的机器人,如果云看起来很重,把你从睡眠中唤醒。它需要能够根据上下文看到天空。机器人的上下文查看能力是一项有价值的功能。KOSMOS-2 可以集成到机器人中,通过观察和理解周围环境并通过文本和图像与世界互动来了解他们的环境、遵循指令并从他们的经验中学习。

2. 文档智能: 除了外部环境,KOSMOS-2 还可用于文档智能。这可能是分析和理解包含文本、图像和表格的复杂文档,使提取和处理相关信息更容易访问。

3. 多模态对话:人工智能的两种常见用途在语言或视觉中更为常见。借助 KOSMOS-2,我们可以使用聊天机器人和虚拟助手协同工作,使它们能够理解和响应涉及文本和图像的用户查询。

4. 图像说明和视觉问答:这些涉及自动生成图像标题并根据视觉信息回答问题,这在广告、新闻和教育等行业都有应用。这包括生成专门或微调的版本,掌握特定的用例。

实际使用案例

我们已经看到,KOSMOS-2 的功能超越了传统的 AI 和语言模型。让我们看看具体的应用:

自动驾驶: 它有可能通过检测和理解车辆中物体(如交通者和车轮)的相对位置来改进自动驾驶系统,从而在复杂的驾驶场景中实现更智能的决策。它可以识别行人,并根据他们的身体位置告诉他们在高速公路上的意图。

安全保障:在构建警察安全机器人时,可以训练 KOSMOS-2 架构来检测人们何时被“冻结”或不被“冻结”。

市场调查:此外,它可以改变市场研究的游戏规则,可以一起分析大量的用户反馈、图像和评论。KOSMOS-2 通过量化定性数据并将其与统计分析相结合,提供了大规模展示有价值的见解的新方法。

多模态人工智能的未来

KOSMOS-2 代表了多模态人工智能领域的一次飞跃。它能够精确地理解和描述文本和图像,开辟了可能性。随着人工智能的发展,像 KOSMOS-2 这样的模型使我们更接近实现先进的机器智能,并将彻底改变行业。

这是最接近通用人工智能(AGI)的模型之一,通用人工智能目前只是一种假设的智能代理类型。如果实现,AGI 可以学习执行人类可以执行的任务。

结论

Microsoft 的 KOSMOS-2 证明了AI 在结合文本和图像以创建新功能和应用程序方面的潜力。随着进入各个领域,我们可以期待看到人工智能驱动的创新,这些创新被认为是技术无法企及的。未来越来越近了,像 KOSMOS-2 这样的模型正在塑造它。像 KOSMOS-2 这样的模型是人工智能和机器学习向前迈出的一步。它们将弥合文本和图像之间的差距,有可能彻底改变行业,并为创新应用打开大门。随着我们继续探索多模态语言模型的可能性,我们可以期待人工智能的激动人心的进步,为实现 AGI 等先进的机器智能铺平道路。

关键要点

● KOSMOS-2 是一个开创性的多模态大型语言模型,可以理解文本和图像,具有独特的训练过程,涉及文本中的边界框引用。

● KOSMOS-2 擅长多模态接地,可生成指定物体位置的图像标题,从而减少幻觉并提高模型准确性。

● 该模型可以使用边界框回答有关图像中特定位置的问题,从而为自然语言与视觉内容的交互开辟了新的可能性。

常见问题解答

Q1:什么是 KOSMOS-2,它的独特之处是什么?

A1:KOSMOS-2 是 Microsoft 开发的多模态大型语言模型。它的与众不同之处在于它能够同时理解文本和图像,并具有独特的训练过程,涉及文本中的边界框引用。

Q2:KOSMOS-2 如何提高语言模型的准确性?

A2:KOSMOS-2 通过执行多模态接地来提高精度,多模态接地会生成带有物体位置的图像标题。这减少了幻觉,并提供了对视觉内容的理解。

Q3:什么是多模式接地,为什么它很重要?

A3:多模态接地是 KOSMOS-2 使用唯一标记将文本连接到图像中的对象的能力。这对于减少语言模型中的歧义和提高其在视觉内容任务中的性能至关重要。

Q4:KOSMOS-2 有哪些实际应用?

A4:KOSMOS-2 可以集成到机器人、文档智能、多模态对话系统和图像字幕中。它使机器人能够理解其环境、处理复杂的文档以及与视觉内容的自然语言交互。

问题 5:KOSMOS-2 如何为具有对象位置的图像生成标题?

A5:KOSMOS-2 使用唯一的标记和边界框文本引用来表示图像中的对象位置。这些标记指导模型生成包含对象位置的准确标题。

原文地址:https://www.analyticsvidhya.com/blog/2023/11/kosmos-2-a-multimodal-large-language-model-by-microsoft/


非常感谢大家的阅读,小Mo在这里祝你在末来的 Python 学习职业生涯中一切顺利!

后续小Mo会不定期更新书籍、视频等学习资源,以上这些书籍资料也可通过关注微信公众号免费获取哦!

欢迎关注我们的微信公众号:MomodelAl

同时,欢迎使用「Mo AI编程」微信小程序

以及登录官网,了解更多信息:Mo 人工智能教育实训平台

Mo,发现意外,创造可能

注:部分资源来源于互联网,若有侵权,请直接联系作者删除。