Press "Enter" to skip to content

KOSMOS-2:微软的多模态大型语言模型

介绍

2023年是一个人工智能的年份,从语言模型到稳定的扩散模型。其中一个新的玩家登上了舞台,那就是由微软开发的KOSMOS-2。它是一个多模态大型语言模型(MLLM),在理解文本和图像方面具有开创性的能力。开发语言模型是一回事,而为视觉创建模型是另一回事,但拥有同时具备这两种技术的模型则是另一个全新层次的人工智能。在本文中,我们将深入探讨KOSMOS-2的特点和潜在应用,以及它对人工智能和机器学习的影响。

学习目标

  • 了解KOSMOS-2多模态大型语言模型。
  • 了解KOSMOS-2如何执行多模态接地和指称表达生成。
  • 深入了解KOSMOS-2在现实世界中的应用。
  • 在Colab中使用KOSMOS运行推理。

本文是作为 数据科学博客马拉松 的一部分发布的。

了解KOSMOS-2模型

KOSMOS-2是微软研究团队的一项成果,他们在一篇名为“Kosmos-2:将多模态大型语言模型接地到世界”的论文中介绍了这个模型。KOSMOS-2旨在同时处理文本和图像,并重新定义我们与多模态数据的交互方式。KOSMOS-2基于基于Transformer的因果语言模型架构构建,类似于其他著名模型如LLaMa-2和Mistral AI的7b模型。

KOSMOS-2:微软的多模态大型语言模型 四海 第1张

然而,KOSMOS-2的独特训练过程是其与众不同之处。它使用一组庞大的图像-文本对训练数据集,称为GRIT,其中文本以特殊令牌形式包含了对图像中物体的引用边界框。这种创新的方法使KOSMOS-2能够提供对文本和图像的新理解。

什么是多模态接地?

KOSMOS-2的一个亮点功能是其执行“多模态接地”的能力。这意味着它可以为图像生成描述对象及其在图像中的位置的字幕。这大大减少了语言模型中的“幻觉”问题,极大地提高了模型的准确性和可靠性。

这个概念通过独特的令牌将文本与图像中的对象联系起来,有效地将对象“接地”到视觉环境中。这减少了幻觉,增强了模型生成准确图像字幕的能力。

指称表达生成

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

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

使用KOSMOS-2进行代码演示

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

步骤1:设置环境

在这一步中,我们安装必要的依赖库,如🤗 Transformers、Accelerate和Bitsandbytes。这些库对使用KOSMOS-2进行高效推理至关重要。

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

步骤二:加载KOSMOS-2模型

接下来,我们加载KOSMOS-2模型和它的processor。

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

步骤三:加载图片和提示

在这一步中,我们进行图像 grounding。我们加载一张图片并为模型提供一个提示来完成。我们使用独特的<grounding>标记,用于引用图片中的对象。

import requestsfrom PIL import Imageprompt = "<grounding>一张图片:"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:微软的多模态大型语言模型 四海 第2张

步骤四:生成完成结果

接下来,我们使用processor准备图像和提示的输入。然后,让模型自回归生成完成结果。生成的完成结果提供了关于图像及其内容的信息。

inputs = processor(text=prompt, images=image, return_tensors="pt").to("cuda:0")# 自回归生成完成结果generated_ids = model.generate(**inputs, max_new_tokens=128)# 将生成的token ID转换回字符串generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]

步骤五:后处理

我们查看原始生成的文本,该文本可能包含与图像 patch 相关的一些 token。此后处理步骤确保我们获得有意义的结果。

print(generated_text)

<image>. the, to and of as in I that' 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> 一张图片:<phrase>一个雪人</phrase><object><patch_index_0044><patch_index_0863></object> 在火堆旁<phrase>取暖</phrase><object><patch_index_0006><patch_index_0879></object>

步骤六:进一步处理

这一步关注生成文本中初始与图像有关的 token 之外的部分。我们提取包括对象名称、短语和位置 token 在内的细节信息。这些提取的信息更有意义,并使我们能够更好地理解模型的响应。

# 默认情况下,生成的文本经过清理,并提取实体信息。processed_text, entities = processor.post_process_generation(generated_text)print(processed_text)print(entities)

一张图片:一个雪人在火堆旁取暖[('一个雪人', (12, 21), [(0.390625, 0.046875, 0.984375, 0.828125)]), ('一个火堆', (36, 42), [(0.203125, 0.015625, 0.484375, 0.859375)])]

end_of_image_token = processor.eoi_tokencaption = generated_text.split(end_of_image_token)[-1]print(caption)

<grounding> 一张图片:<phrase>一个雪人</phrase><object><patch_index_0044><patch_index_0863></object> 在火堆旁<phrase>取暖</phrase><object><patch_index_0006><patch_index_0879></object>

步骤 7:绘制边界框

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

from PIL import ImageDrawwidth, height = image.sizedraw = 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:微软的多模态大型语言模型 四海 第3张

步骤 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:微软的多模态大型语言模型 四海 第4张

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

prompt = "<grounding> 问题:这个角色是什么<phrase>? 答案:"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]# 默认情况下,生成的文本被清理,并提取实体.processed_text, entities = processor.post_process_generation(generated_text)print(processed_text)print(entities)

问题:这个角色是什么?答案:皮卡丘在动画中。[('this character', (18, 32), [(0.046875, 0.390625, 0.390625, 0.984375)])]

KOSMOS-2的应用领域

KOSMOS-2的能力远远超出实验室,可应用于实际领域。它可以在以下一些领域产生影响:

  1. 机器人技术:想象一下如果你可以告诉你的机器人,如果乌云密集,就叫醒你。它需要能够有上下文地看到天空。机器人能够上下文地看到是一个有价值的功能。KOSMOS-2可以集成到机器人中,以理解它们的环境,遵循指令,并通过观察和理解周围环境以及与文本和图像进行交互来从经验中学习。
  2. 文档智能:除了外部环境,KOSMOS-2还可以用于文档智能。这可以用于分析和理解包含文本、图像和表格的复杂文档,使提取和处理相关信息更加便捷。
  3. 多模态对话:AI的两个常见应用领域是语言和视觉。通过KOSMOS-2,我们可以将聊天机器人和虚拟助手联合起来,使它们能够理解和回应涉及文本和图像的用户查询。
  4. 图像描述和视觉问答:这涉及自动生成图像的描述,并根据视觉信息回答问题,这在广告、新闻报道和教育等行业中有应用。这包括生成掌握特定用例的专业化或精细调整版本。

实际应用案例

我们已经看到,KOSMOS-2的能力不仅限于传统的AI和语言模型。让我们来看一些具体应用:

  • 自动驾驶:它有潜力通过检测和理解车内物体的相对位置(如转向灯和轮子)来改进自动驾驶系统,从而在复杂的驾驶场景中实现更智能的决策。它可以根据行人的体位在高速公路上识别行人并判断他们的意图。
  • 安全与保安:在构建警务机器人时,KOSMOS-2体系结构可以被训练用于检测人们是否“被冻结”或不活动。
  • 市场研究:此外,它可以成为市场研究中的一项创新变革,可以分析庞大的用户反馈、图像和评论。通过量化定性数据并与统计分析相结合,KOSMOS-2提供了发现有价值见解的新方法。

多模态智能的未来

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

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

结论

微软的KOSMOS-2证明了人工智能在结合文本和图像以创造新的功能和应用方面的潜力。它进入到各个领域,我们可以期待看到一些以前被认为超越技术能力的基于AI的创新。未来越来越近,像KOSMOS-2这样的模型正在塑造着它。像KOSMOS-2这样的模型使AI和机器学习迈出了一步,弥合了文本和图像之间的差距,潜在地改变行业,并为创新应用打开了大门。随着我们继续探索多模态语言模型的可能性,我们可以期待在人工智能方面有令人兴奋的进展,为实现像AGI这样的先进机器智能铺平道路。

主要要点

  • KOSMOS-2是一种突破性的多模态大型语言模型,能够理解文本和图像,并具有使用文本引用中的边界框的独特训练过程。
  • KOSMOS-2在多模态定位方面表现出色,可以生成指定物体位置的图像标题,减少幻觉并提高模型准确性。
  • 该模型可以使用边界框回答关于图像特定位置的问题,为与视觉内容的自然语言交互开启了新的可能性。

常见问题

参考资料

  • https://github.com/inuwamobarak/KOSMOS-2
  • https://github.com/NielsRogge/Transformers-Tutorials/tree/master/KOSMOS-2
  • https://arxiv.org/pdf/2306.14824.pdf
  • https://huggingface.co/docs/transformers/main/en/model_doc/kosmos-2
  • https://huggingface.co/datasets/zzliang/GRIT
  • Peng, Z., Wang, W., Dong, L., Hao, Y., Huang, S., Ma, S., & Wei, F. (2023). Kosmos-2: Grounding Multimodal Large Language Models to the World. ArXiv. /abs/2306.14824

本文中出现的媒体不由Analytics Vidhya拥有,仅在作者的自由裁量下使用。

Leave a Reply

Your email address will not be published. Required fields are marked *