在本教程中,您将学习如何应用 Meta Llama 3.2-90b-vision-instruct 模型,该模型现在可通过 watsonx.ai 访问,用于计算机视觉任务,例如图片字幕和视觉问答。
我们中的许多人都熟悉单模态 AI 应用。ChatGPT 就是一款广受欢迎的单模态 AI 工具。像 ChatGPT 这样的聊天机器人利用自然语言处理 (NLP) 技术来理解用户问题并实时自动生成回复。这些单模态大型语言模型 (LLM) 可应用的输入类型仅限于文本。
多模态人工智能 (AI) 依赖于构建在神经网络之上的机器学习模型。这些神经网络能够运用复杂的深度学习技术,处理并整合来自多种数据类型的信息。这些由生成式 AI 模型(有时称为 gen AI 模型)生成的不同模态可包括文本、图像、视频和音频输入。
多模态 AI 系统有许多实际的用例,涵盖了从医疗保健领域的医学影像诊断,到利用计算机视觉技术,再到翻译应用中的语音识别等多个方面。这些 AI 科技进步能够优化各个领域。多模态架构的主要优势在于其能够处理不同类型数据的能力。
多模态 AI 包含三个要素:
输入模块
输入模块建立在多个单模态神经网络之上,用于对不同数据类型进行预处理。在此,数据为融合模块中执行的机器学习算法作好准备。
融合模块
本模块负责数据的合并、对齐和处理。融合过程针对每种数据模态进行。本模块中通常使用多种技术。其中一个示例是早期融合,即将所有输入类型的原始数据进行合并。此外,中期融合是指在不同的预处理阶段对不同模式的数据进行编码。最后,后期融合是在数据经过输入模块中对应各个模态的不同模型初步处理后,再对数据进行整合。
输出模块
输出模块通过理解融合模块中生成的数据,以期望的输出格式生成结果。此类输出可呈现各种形式,例如文本、图像或多种格式组合。
请参阅 IBM 技术的 YouTube 视频,其中分步讲解了第 1 步和第 2 步的设置说明。
尽管您可以从多种工具中进行选择,但本教程最适合使用 Jupyter Notebook。Jupyter Notebook 广泛应用于数据科学领域,用于将代码与文本、图像等各种数据源以及数据可视化相结合。
本教程将引导您完成设置 IBM 帐户以使用 Jupyter Notebook 的步骤。
使用您的 IBM Cloud 帐户登录 watsonx.ai使用您的 IBM Cloud 帐户。
创建一个 watsonx.ai 项目。
您可以从项目内部获取项目 ID。点击管理选项卡。然后,从常规页面的详细信息部分复制项目 ID。您需要此 ID 来完成本教程。
创建一个 Jupyter Notebook。
此步骤将打开一个笔记本环境,您可以在其中复制代码,来自行实现提示微调。或者,您也可以将此笔记本下载到本地系统并将其作为资产上传到您的 watsonx.ai 项目。可以在 GitHub 上找到本 Jupyter 笔记本以及使用的数据集。
为避免 Python 包依赖关系冲突,我们建议设置虚拟环境。
在本教程中,我们建议使用 watsonx.ai 上的 Meta 3.2-90b-vision-instruct 模型与获得类似的结果。您可以自由选择选择任何支持多模态学习的 AI 模型。有多种多模态 AI 模型可供选择,包括 OpenAI 的 GPT-4 V(ision)、DALL-E 3 以及 Google 的 Gemini。若使用其他模型,请确保使用相应的 API,因为本教程专为 watsonx.ai 而设计。
创建一个 watsonx.ai 运行时服务实例(选择适当的区域并选择精简计划,这是一个免费实例)。
生成 API 密钥。
将 watsonx.ai 运行时服务实例与您在 watsonx.ai 中创建的项目关联。
学习本教程时,您将需要一些库和模块。请确保导入以下内容;如果尚未安装,可以通过快速的 pip 安装来解决。
为了设置凭据,我们需要您在第 1 步中生成的 WATSONX_APIKEY 和 WATSONX_PROJECT_ID。您可以将它们存储在您目录的 .env 文件中,或替换占位符文本。我们还将设置作为 API 端点的 URL。
我们可以使用凭据类来封装传递的凭证。
在本教程中,我们将处理多个图片,用于图像字幕和对象检测等多模态 AI 应用。我们将要使用的图片可以通过以下 URL 访问。我们可以将这些 URL 存储在一个列表中,以便迭代地对它们进行编码。
为了更好地了解我们的数据输入,让我们来展示一些图片。
输出:
url_image_0
url_image_1
url_image_2
url_image_3
为了以 LLM 可理解的方式对这些图片进行编码,我们先将图片编码为字节,然后再解码为 UTF-8 格式。
现在,我们的图片可以传递到 LLM,接下来我们为 watsonx API 调用设置一个函数。augment_api_request_body 函数将用户查询和图像作为参数,并增强 API 请求的主体。我们将在每次迭代中使用这个函数。
def augment_api_request_body(user_query, image): messages = [ { "role": "user", "content": [{ "type": "text", "text": 'You are a helpful assistant. Answer the following user query in 1 or 2 sentences: ' + user_query }, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{image}", } }] } ] return messages
让我们使用 ModelInference 类来实例化模型接口。在本教程中,我们将使用 themeta-llama/llama-3-2-90b-vision-instruct 模型。
现在,我们可以循环查看图片,查看模型针对“这张图片中发生了什么?”的询问时生成的文本描述。
输出:
此图显示了一条繁忙的城市街道,上面有高楼和汽车,还有在人行道上行走的人们。街上满是交通信号灯、树木和路标,还有几个人正在十字路口过马路。
图片描绘了一们身着运动服的女子在街上跑步,背景中可以看到一栋建筑物和一辆汽车。该女子身穿黄色连帽衫、黑色紧身裤和运动鞋,看起来正在进行慢跑或跑步。
图片描绘了一个被洪水淹没的地区,水覆盖了地面和周围的建筑物。洪水看起来很严重,水位甚至达到了某些建筑物的屋顶。
**图片说明**
* 图片展示了一张营养成分标签的特写,一根手指正指着它。
* 该标签提供了特定食品的详细营养成分信息,包括:
+
热量 + 脂肪 + 纳
+
碳水化合物
+ 其他相关信息
* 标签以白底黑字显示,使其易于阅读和理解。
Llama 3.2-90b-vision-instruct 模型能够成功地为每张图片生成详细字幕。
既然我们已在上一步展示了模型执行图文转换的能力,现在让我们向模型提出一些需要检测的问题。关于第二张描绘女在士户外奔跑的图片,我们将询问模特:“这张图片中有几辆汽车?”
输出:这张图中只有一辆车。车停在街上,位于建筑物的右侧。
该模型正确识别了图片中的一台车辆。现在,让我们来询问一下洪灾图片中的损失情况。
输出:该图片中的破坏非常严重,洪水淹没了大部分土地,并可能对建筑物和农作物造成大范围的损害。水位看起来至少齐腰深,可能会给该地区的业主和农民带来重大损失。
这一回复凸显了多模态 AI 对保险等领域的价值。该模型能够检测到洪水对房屋造成损坏的严重程度。这对于改进保险理赔处理时间来说,可能是一个强大的工具。
接下来,我们询问模型营养成分标签图片中的纳含量是多少。
输出:**钠含量:** 640 毫克 (mg)
太棒了!该模型能够根据用户查询,识别出图片中的对象。我们鼓励您尝试更多查询,以进一步展示该模型的性能。
在本教程中,您使用了 Llama 3.2-90b-vision-instruct 模型来执行包括图片说明和视觉问答在内的多模态操作。有关此模型的更多用例,我们鼓励您查阅其官方文档页面。您可以在此页面找到有关模型参数和功能的更多信息。Python 输出非常重要,因为它展示了多模态系统从多模态数据中提取信息的能力。
使用面向 AI 构建器的新一代企业级开发平台 IBM watsonx.ai,可以训练、验证、调整和部署生成式 AI、基础模型和机器学习功能。使用一小部分数据,即可在很短的时间内构建 AI 应用程序。
借助 IBM 业界领先的人工智能专业知识和解决方案组合,让人工智能在您的业务中发挥作用。
通过增加 AI 重塑关键工作流程和运营,最大限度提升体验、实时决策和商业价值。