基础视觉模型与自动驾驶应用中的视觉提示工程
作者 Gopi Krishnamurthy Francisco Calderon Rodriguez Shreyas Subramanian Sujitha Martin发表日期 2023年11月15日来源 亚马逊机器学习、亚马逊SageMaker永久链接
重点总结
视觉提示工程是深度学习领域中,提供精确输出的重要方法,尤其是在自动驾驶等复杂应用中。Segment Anything ModelSAM 是一款前沿的基础视觉模型,能够实现零样本或少样本训练的图像分割。我们探讨了使用 SAM 在 BDD100K 数据集 上进行视觉提示工程的强大潜力,并通过实际案例展示其应用效果。SAM 提供了多种输入方式,如点、边界框和掩膜,来支持视觉提示工程。通过视觉链和提示模板的结合,能够显著提高模型性能,解决复杂的视觉任务。提示工程已经成为与大型语言模型LLMs合作的人员必备技能,有助于生成高质量和相关的文本。虽然文本提示工程已经广为讨论,但视觉提示工程是一个新兴领域,亟需关注。视觉提示可以包括引导视觉模型生成相关和准确输出的边界框或掩膜。在这篇文章中,我们将探讨视觉提示工程的基础知识、其优势以及如何应用于一个特定用例:自动驾驶的图像分割。
近年来,计算机视觉领域在图像分割方面取得了显著进展。其中,Meta AI 提出的 Segment Anything ModelSAM 有望通过零样本或少样本训练彻底改变物体级别的分割。我们将 SAM 模型作为基础视觉模型的实例,探讨其在具有多任务学习的多样化自动驾驶数据集 BDD100K 的应用。通过结合 SAM 的优势与 BDD100K 提供的丰富数据,我们展示了使用不同版本的 SAM 进行视觉提示工程的潜力。受 LangChain 框架的启发,我们提出了一种视觉链,将物体检测模型与 SAM 相结合,以实现视觉提示。
虽然这篇文章的重点在于自动驾驶,但讨论的概念可广泛适用于医疗、生命科学、媒体和娱乐等丰富的视觉应用领域。让我们先来了解一下像 SAM 这样的基础视觉模型的内部机制。我们在一台 mlg516xlarge 实例上使用了 亚马逊SageMaker Studio。
Segment Anything ModelSAM
基础模型是通过大量数据训练的大型机器学习ML模型,可以根据特定任务要求进行提示或微调。在此,我们探讨了 Segment Anything ModelSAM,这是专门用于图像分割的基础视觉模型。它在一个包含 1100 万张图像和 11 亿个掩膜的大型数据集上进行了预训练,使其成为当前最大的分割数据集。该数据集覆盖了广泛的物体和类别,为 SAM 提供了丰富而多样的训练数据来源。
SAM 模型可以理解物体,并能够输出图像或视频帧中任一物体的分割掩膜。该模型支持视觉提示工程,允许用户提供文本、点、边界框或掩膜作为输入,而无需更改原始图像。SAM 有三种模型大小可供选择:基础ViTB,9100 万参数、大型ViTL,308 亿参数和超大ViTH,636 亿参数,满足不同的计算需求和使用场景。
SAM 的主要动机是以最少的训练样本和训练轮次提高物体级别的分割能力。SAM 的强大之处在于其适应新图像分布和任务的能力,且无须事先知识,这一特性称为 零样本迁移。SAM 在广泛的 SA1B 数据集上训练,显示出令人印象深刻的零样本性能,超越了许多之前完全监督的结果。
如下面 SAM 的架构所示,生成分割掩膜的过程包括三个步骤:
图像编码器生成图像的一次性嵌入。提示编码器将任何提示转换为提示的嵌入向量。轻量级解码器结合图像编码器和提示编码器的信息以预测分割掩膜。例如,我们可以输入图像和围绕感兴趣物体的边界框例如银色汽车或行驶道,SAM 模型将为该物体生成分割掩膜。
视觉提示工程
提示工程是指构建输入到模型的结构,以使模型能理解意图并产生期望结果。通过文本提示工程,用户可以通过选择单词、格式、排列等来构造输入文本,以获得所需输出。视觉提示工程假设用户在视觉模态图像或视频中工作,并提供输入。以下是提供视觉领域生成 AI 模型输入的一些潜在方式:
点:图像平面上的单个 (x y) 坐标点多点:多个x,y坐标点,彼此之间不一定相关边界框:四个值x,y,w,h的集合,定义了图像平面中的矩形区域轮廓:在图像平面中形成封闭形状的x,y坐标点集合掩膜:与图像同样大小的数组,其中包含感兴趣物体的部分掩膜考虑到视觉提示工程技术,让我们探讨如何将其应用于 SAM 预训练模型。我们使用的是基础版预训练模型。
使用预训练 SAM 模型进行零样本提示
首先,让我们探讨零样本方法。以下是从某车辆前摄像头拍摄的训练数据集的样本图像。
我们可以通过 自动生成掩膜 从输入图像获取所有物体的分割掩膜,而无需任何明确的视觉提示。以下图像中,我们看到汽车、道路、交通标志、车牌、立交桥、支柱、标示等部分被分割开来。
然而,由于以下原因,该输出的实用性有限:
汽车并未完整分割,而是被分为几个部分。对于大多数感知模型而言,我们并不在乎每个轮胎都有单独的输出掩膜。对于其他已知的感兴趣物体,例如道路、植被、标识等亦是如此。对于下游任务例如可行驶区域,有用的图像部分被分割且没有解释。同时,类似实例被单独识别,我们可能对将相似物体进行归类感兴趣全景分割vs 实例分割。使用预训练 SAM 模型的视觉提示工程
幸运的是,SAM 支持提供输入提示,我们可以使用点、点数组和边界框作为输入。通过这些特定指令,我们期待 SAM 在针对特定点或区域的分割上表现得更好。这可以与语言提示模板进行比较,例如:为制造 {product} 的公司取个好名字?此时,用户输入的内容与此提示模板结合形成 {product} 输入槽。在视觉提示中,边界框、点或掩膜则是输入槽。
以下图像提供了车辆周围的原始真实边界框,以及来自 BDD100K 的可行驶区域补丁的真实数据。该图像还显示了一个输入点黄色的 X,位于我们将在接下来的几节中提到的绿色边界框中心。
让我们尝试为左侧的汽车生成掩膜,使用绿色边界框作为 SAM 输入。如下图所示,SAM 的基础模型并未找到任何东西。这一点体现在较低的分割得分上。仔细观察分割掩膜后,我们发现返回的掩膜中存在一些小区域用红色箭头指示,这些区域对任何下游应用均无实际使用价值。
接下来,尝试将边界框和点组合为输入视觉提示。前述图像中的黄色十字是边界框的中心。提供该点的 (xy) 坐标作为提示,并结合边界框约束后,我们得到如下掩膜,得分稍微提高。但同样,这依然无法直接使用。
最后,使用基础预训练模型,我们可以仅提供输入点作为提示而不使用边界框。以下图片显示了我们认为有趣的前三个掩膜之一。
掩膜1 完整地分割出汽车,而掩膜3 则分割出靠近黄色十字输入提示的车牌区域。掩膜1 仍未紧贴汽车,因此指向了模型的质量,可以合理地推断,随着模型规模的增加,输出质量也会提升。
我们可以尝试使用更大的预训练模型,保持相同的输入提示。以下图像展示了我们的结果。当使用超大的 SAM 预训练模型时,掩膜3 整体分割出汽车,而掩膜1 和掩膜2 则能提取车牌。
SAM 大型版本也提供了类似的输出。
这段过程与文本提示的手动提示工程相似,可能是您已熟悉的方式。值得注意的是,最近 SAM 模型在高质量分割方面的改进使得物体和上下文特定的输出有了很大提升。在我们的案例中,我们发现使用文本和视觉提示点、边框、点和边框输入的零样本提示并未显著改善结果。
提示模板与视觉链
正如前面的零样本例子所示,SAM 在识别场景中所有物体方面存在困难。这是我们可以利用提示模板和视觉链的好例子。视觉链是受到流行的 LangChain 框架中链概念的启发。它有助于将数据源和 LLM 链接在一起以产生输出。例如,我们可以使用 API 链调用 API,并根据 API 响应调用 LLM 来回答问题。
受到 LangChain 的启发,我们提出了一个顺序视觉链,如下图所示。我们使用工具如预训练的物体检测模型来获取初始边界框,计算边界框中心点,利用此点来提示 SAM 模型并输入图像。
例如,以下图像显示了运行此链后的分割掩膜结果。
另一个示例链可以涉及用户感兴趣的物体的文本输入。为此,我们构建了一个管道,使用 Grounding DINO 一款物体检测模型来提示 SAM 进行分割。
Grounding DINO 是一款零样本物体检测模型,能够通过类别名称如“交通灯”或“卡车”和表达如“黄色卡车”进行物体检测。该模型接受文本和图像对,进行物体检测。它基于变换器架构,支持文本和图像数据的跨模态学习。想了解更多关于 Grounding DINO 的信息,请参阅 Grounding DINO Marrying DINO with Grounded PreTraining for OpenSet Object Detection。该模型生成边界框和标签,并可以进一步处理以生成中心点、基于标签进行过滤、设定阈值等。这些生成的输出边框或点可作为提示传递给 SAM 以进行分割,最终输出掩膜。
以下是一些展示输入文本、DINO 输出边界框和最终 SAM 输出分割掩膜的示例。
以下图像显示“黄色卡车”的输出。
一元机场的官方网站以下图像显示“银色汽车”的输出。
以下图像显示“行驶道”的输出。
我们可以利用此管道构建视觉链。以下代码片段解释了此概念:
pythonpipeline = [objectpredictor segmentpredictor]imagechain = ImageChainfromvisualpipeline(pipeline imagestore verbose=True)imagechainrun(所有银色汽车 imageid=5X3349)
虽然这是一个简单的示例,但该概念可以扩展到处理来自车辆上摄像机的信号,以进行对象追踪、个人可识别信息PII数据去标识化等等。我们还可以从较小的模型获取边界框,或者在某些情况下,使用标准计算机视觉工具。使用预训练模型或服务如亚马逊 Rekognition获取初始视觉标签非常简单。撰写时,亚马逊 SageMaker Jumpstart 有超过 70 个可用于物体检测的模型,而 亚马逊 Rekognition 已经能够识别图像中若干有用的物体类别,包括汽车、行人和其他车辆。

接下来,我们将关注与 SAM 模型在 BDD100K 数据子集上的性能相关的一些定量结果。
定量结果
我们的目标是比较三种预训练模型在相同视觉