在本文中,将探讨如何利用CogVLM这一多模态语言模型,为图像生成描述性文字。这些描述不仅能够为视障人士提供图像的可访问性描述,还能为图像搜索功能增添更多上下文信息,这仅仅是众多应用场景中的几个例子。
将通过一个指南,逐步介绍如何在自己的基础设施上部署一个由CogVLM和Roboflow Inference支持的图像描述API。考虑以下这张图片:
# 假设这是一张图片的路径
image_path = "./warehouse.jpg"
当向CogVLM提出“为这张图片生成一个描述。”的请求时,系统返回了如下描述:
在仓库中精准导航:一位专注的工人正使用他可靠的Hyster叉车确保操作的顺畅。
通过本指南的学习,将能够拥有一个API,通过编程方式为类似上述示例中的图片生成描述。现在,让开始吧!
要求
在本指南中,需要一块至少与T4 GPU相当或更强大的NVIDIA GPU。这是因为将要使用的CogVLM模型体积庞大。可以在如Google Cloud Platform或AWS等云平台上部署T4和其他GPU。
提供了一个如何在AWS虚拟机上设置CogVLM的指南,如果想将描述API部署在AWS上,可以按照该指南操作。只需要按照AWS教程操作到“设置推理服务器”;本指南将涵盖其余部分。
还需要一个免费的Roboflow账户。
步骤 #1:安装Roboflow Inference
要开始,需要安装RoboflowInference。Inference是一个开源服务器,用于运行计算机视觉模型。可以运行像YOLOv8这样的微调模型,以及像CLIP和CogVLM这样的基础模型。
# 安装Inference的命令
pip install inference inference-cli inference-sdk
步骤 #2:启动推理服务器
要生成描述,需要启动一个推理服务器。要启动推理服务器,需要安装Docker。请参考官方Docker安装指南,了解如何在设备上安装Docker。
# 启动推理服务器的命令
inference server start
推理服务器将在http://localhost:9001启动。
步骤 #3:生成图像标签
有了推理服务器,可以开始生成图像描述了。
# 创建一个新的Python文件并添加以下代码
import os
from inference_sdk import InferenceHTTPClient
# 设置客户端
CLIENT = InferenceHTTPClient(
api_url="http://localhost:9001", # 仅支持本地托管
api_key=os.environ["ROBOFLOW_API_KEY"]
)
# 发送请求并打印结果
result = CLIENT.prompt_cogvlm(
visual_prompt="./image.jpg",
text_prompt="为这张图片生成一个描述。",
)
print(result)
在这段代码中,使用Inference SDK连接到推理服务器。然后,将一个名为“image.jpg”的图片发送到服务器。请将“image.jpg”替换为想要发送到服务器的图片名称。
发送图片时附带的提示是“为这张图片生成一个描述。”。如果想要询问图片的特定属性——例如,某个特定物体是否存在——可以调整提示,提出不同的问题。
在幕后,这段代码向推理服务器发送了一个HTTP请求。推理HTTP服务器处理请求。CogVLM生成一个描述。然后,应用程序返回一个描述。
当首次运行此脚本时,CogVLM模型将被下载。CogVLM是一个大型模型——超过10 GB——因此获取模型将需要几分钟时间。模型然后需要加载到内存中,这可能还需要几分钟时间。一旦模型加载到内存中,在T4上处理请求大约需要10秒,或者在更强大的GPU上需要的时间更少。
设置好图片和提示后,运行脚本。
让在以下图片上运行脚本:
这是模型为图片生成的描述:
在仓库中精准导航:一位专注的工人正使用他可靠的Hyster叉车确保操作的顺畅。
服务器成功为提供的图片生成了相关的描述。
可以使用CogVLM和RoboflowInference作为图像描述API,运行在自己的硬件上。在本指南中,介绍了如何在GPU设备上部署CogVLM和Roboflow Inference。讨论了如何安装Inference,如何设置推理服务器,以及如何向服务器发送请求。