今天的重点是一个具有无数实际应用的功能:在边缘设备(如智能手机、物联网设备和嵌入式系统)上运行小型视觉语言模型(VLM)。这些模型在识别和指出物体方面越来越出色。具体来说,它们在检测制造缺陷、计数可用停车位或发现癌细胞方面表现优异。尽管它们潜力巨大,但许多人并不知道这些小型VLM是专门为这些任务训练的。
模型:Molmo 7B
Molmo 是由 Allen Institute for AI 开发的一组开放视觉语言模型。它们在 PixMo 数据集上进行训练,该数据集包含 100 万对图像-文本对。基于 Qwen2–7B 和 OpenAI CLIP 构建的 Molmo 7B-D 几乎与 GPT-4V 和 GPT-4o 一样出色。
工具:MLX-VLM 以及 MLX 社区
MLX-VLM 是 Prince Canuma(Blaizzy)开发的一个工具,用于在 Mac 上使用 MLX 运行和微调视觉语言模型(VLM)。它支持多种模型,如 molmo、llava、llava_bunny、llava_next、mllama、multi_modality、paligemma、phi3_v、pixtral 和 qwen2_vl。这些模型可以在 Hugging Face 上的 MLX 社区中免费下载。
Hugging Face 上的 MLX 社区是一个共享 Apple 的 MLX 框架预转换模型权重的中心。它提供了适用于训练、微调和部署大型语言模型(LLM)和视觉模型的模型。流行的选项如用于语音识别的 Whisper 和用于图像生成的 Stable Diffusion 也可用。用户还可以通过上传自己的模型或在其项目中使用 MLX 工具来做出贡献。
我们的需求
要开始,我们需要设置一个虚拟环境并安装所需的库。以下是步骤列表:
(1) 创建并激活虚拟环境。
(2) 安装必要的包:
我们将使用下图来测试我们的工作流程。你可以替换图像并调整提示以适应不同的应用。例如,你可以计算停车场中的汽车数量、人群中的人数或体育场中的空座位。
待识别的钢管
在 MLX 中运行 Molmo
在 MLX 中运行这个模型非常简单。你可以复制并粘贴以下代码行,然后就可以尝试这个模型了。确保根据你的用例更改图像路径。对于我来说,我将保留 pipes_test.jpg,并在提示中简单地问:“指出图像中的钢管。”
上述代码片段的输出如下:
这是模型被训练来响应的方式。然而,为了验证这个输出,我们需要进行后处理并在图像上绘制这些点。所以,让我们来做吧!
在图像中指出和检测物体
让我们实现两个函数:第一个用于解析点的坐标,第二个用于绘制它们。在解析点时,重要的是要注意坐标是基于图像的宽度和高度进行归一化的。如下面的代码片段所示,我们需要将归一化的值除以 100,然后分别乘以图像的宽度和高度。
现在让我们使用 Matplotlib 在图像上绘制点的位置。你也可以绘制标签,但在我的情况下,我只需要点和数字就够了。
最终结果
你可以看到钢管被正确识别,并且每个钢管都有一个关联的 ID。你可以修改代码并尝试许多其他用例。
你可以按照上述步骤在自己的 GPU 上运行这个模型。只要确保有足够的 RAM 以及较小的图像输入尺寸(本文示例使用 16GB 的 RAM,图像只有几百 KB)。
Article link:https://medium.com/@alejandro7899871776/point-and-count-objects-using-small-vlms-on-your-local-machine-3a769c7f2b6c