Visual Prompting
探索通过点和框引导 AI 模型的视觉提示。了解 Ultralytics YOLO 和 SAM 如何实现精确的分割和更快速的数据标注。
Visual prompting 是计算机视觉领域的一项新兴技术,用户可通过提供点、边界框或涂鸦等空间或视觉提示,引导 AI 模型将注意力集中在图像内的特定对象或区域。与主要依赖文本描述的传统 prompt engineering 不同,Visual prompting 能够与 Artificial Intelligence (AI) 系统进行更精准、直观的交互。该方法利用现代 foundation models 的功能来执行分割和检测等任务,而无需进行大量的重新训练或使用庞大的标注数据集。通过有效地“指向”重点所在,用户可以立即将通用模型适配到新任务中,从而弥合人类意图与机器感知之间的差距。
视觉提示的机制#
从核心来看,Visual prompting 的工作原理是将空间信息直接注入到模型的处理流程中。当用户点击对象或绘制方框时,这些输入会被转换为基于坐标的嵌入,神经网络将其与图像特征进行整合。此过程对于像 Segment Anything Model (SAM) 这样的交互式架构至关重要,在该架构中,模型根据几何提示预测掩码。
视觉提示的灵活性支持多种交互类型:
- 点提示 (Point Prompts): 用户点击特定像素以指示目标对象。模型随后会将此选择扩展到整个对象边界。
- Box Prompts: 绘制 bounding box 可提供粗略的定位,向模型发出信号以分割或分类该区域内包含的所有内容。
- 涂鸦提示 (Scribble Prompts): 在对象上绘制的手绘线条有助于消除复杂场景中的歧义,例如对象重叠或具有相似纹理的情况。
在 CVPR 2024 上展示的最新研究强调了 Visual prompting 如何显着减少 data annotation 所需的时间,因为人工标注员可以通过简单的点击实时修正模型预测,而无需手动勾勒多边形。
视觉提示与文本提示的对比#
尽管这两种技术的目的都是引导模型行为,但区分 Visual prompting 与基于文本的方法依然非常重要。Text-to-image 生成或零样本检测依赖于 natural language processing (NLP) 来解释语义描述(例如,“找到红色的车”)。然而,对于描述精确的空间位置或抽象形状,语言可能会显得模棱两可或不够充分。
Visual prompting 通过将指令锚定在像素空间本身来解决这种模糊性。例如,在 medical image analysis 中,放射科医生点击可疑结节要比尝试通过文本描述其确切坐标和不规则形状准确得多。通常,最强大的工作流会结合这两种方法——使用文本进行语义过滤,并使用视觉提示来实现空间精度——这一概念被称为 multi-modal learning。
实际应用#
视觉提示的适应性促使其在各行各业中得到迅速采用:
- 交互式医学诊断: 医生使用 Visual prompting 工具来隔离 MRI 扫描中的肿瘤或器官。只需点击感兴趣的区域,他们就可以立即生成 3D 体积测量值,从而有助于进行精确的 tumor detection 和手术规划。
- 智能照片编辑: 在 Adobe Photoshop 或移动应用程序等消费者软件中,Visual prompting 为“魔术选择”工具提供支持。用户可以点击人物或对象来移除背景或应用目标滤镜,从而利用底层的 instance segmentation 技术,而无需具备手动掩码技能。
- 机器人操作: 在 AI in Robotics 中,可以通过视觉接口指示机器人拾取特定物品。操作员点击机器人相机画面中的对象,提供机器人转换为抓取坐标的视觉提示,从而促进仓库中的 human-in-the-loop 自动化。
使用 Ultralytics 进行实现#
Ultralytics 生态系统支持视觉提示工作流程,特别是通过 FastSAM 和 SAM 等模型。这些模型允许开发人员以编程方式传递点或框坐标来检索分割掩码。
以下示例演示了如何使用 ultralytics 包将点提示应用到图像,指示模型分割位于特定坐标处的对象。
from ultralytics import SAM
# Load the Segment Anything Model (SAM)
model = SAM("sam2.1_b.pt")
# Apply a visual point prompt to the image
# The 'points' argument accepts [x, y] coordinates
# labels: 1 indicates a foreground point (include), 0 indicates background
results = model("https://ultralytics.com/images/bus.jpg", points=[[300, 350]], labels=[1])
# Display the segmented result
results[0].show()提升模型敏捷性#
Visual prompting 代表了向“可提示的”计算机视觉的转变,在此转变中,模型不再是静态的“黑盒”,而是交互式工具。此功能对于 active learning 循环至关重要,在这些循环中,模型通过结合用户反馈来快速改进。
对于希望将这些功能集成到生产环境中的开发者而言,Ultralytics Platform 提供了管理数据集和部署能够处理动态输入的模型的工具。随着研究的进展,我们期望看到视觉提示与 large language models (LLMs) 之间实现更紧密的集成,从而使系统能够以当前处理文本的相同流畅度来推理视觉输入。






