自动驾驶应用的基础视觉模型和视觉提示工程 | 亚马逊网络服务

自动驾驶应用的基础视觉模型和视觉提示工程 | 亚马逊网络服务

对于任何使用大型语言模型 (LLM) 的人来说,快速工程已成为生成高质量且相关文本的一项基本技能。 尽管文本提示工程已被广泛讨论,但视觉提示工程是一个需要关注的新兴领域。 视觉提示可以包括引导视觉模型生成相关且准确的输出的边界框或掩模。 在这篇文章中,我们探讨了视觉提示工程的基础知识、它的好处,以及如何使用它来解决特定的用例:自动驾驶的图像分割。

近年来,计算机视觉领域在图像分割领域取得了重大进展。 其中一项突破是 分段任何模型(SAM) 由 Meta AI 开发,它有潜力通过零样本或少样本训练彻底改变对象级分割。 在这篇文章中,我们使用 SAM 模型作为基础视觉模型的示例,并探讨其在 BDD100K数据集,用于异构多​​任务学习的多样化自动驾驶数据集。 通过将 SAM 的优势与 BDD100K 提供的丰富数据相结合,我们展示了不同版本 SAM 视觉提示工程的潜力。 灵感来自于 浪链 在语言模型框架中,我们提出了一个视觉链,通过将对象检测模型与 SAM 相结合来执行视觉提示。

尽管本文重点讨论自动驾驶,但所讨论的概念广泛适用于拥有丰富的基于视觉的应用程序的领域,例如医疗保健和生命科学以及媒体和娱乐。 让我们首先详细了解 SAM 等基础视觉模型的底层内容。 我们用了 亚马逊SageMaker Studio 在本文的 ml.g5.16xlarge 实例上。

分段任何模型(SAM)

基础模型是基于大量数据训练的大型机器学习 (ML) 模型,可以针对特定任务的用例进行提示或微调。 在这里,我们探索分段任意模型 (SAM),它是视觉(特别是图像分割)的基础模型。 它在包含 11 万张图像和 1.1 亿个掩模的海量数据集上进行了预训练,使其成为截至撰写时最大的分割数据集。 这个广泛的数据集涵盖了广泛的对象和类别,为 SAM 提供了多样化和大规模的训练数据源。

SAM 模型经过训练可以理解对象,并且可以输出图像或视频帧中任何对象的分割掩模。 该模型允许进行视觉提示工程,使您能够提供文本、点、边界框或蒙版等输入来生成标签,而无需更改原始图像。 SAM 提供三种大小:基本(ViT-B,91 万个参数)、大型(ViT-L,308 亿个参数)和巨大(ViT-H,636 亿个参数),满足不同的计算要求和用例。

SAM 背后的主要动机是用最少的训练样本和任何感兴趣对象的 epoch 来改进对象级分割。 SAM 的强大之处在于它能够在没有先验知识的情况下适应新的图像分布和任务,这一特性称为 零次转移。 这种适应性是通过对广泛的 SA-1B 数据集进行训练而实现的,该数据集展示了令人印象深刻的零样本性能,超越了许多先前的完全监督结果。

如以下 SAM 架构所示,生成分段掩码的过程涉及三个步骤:

  1. 图像编码器为图像生成一次性嵌入。
  2. 提示编码器将任何提示转换为提示的嵌入向量。
  3. 轻量级解码器结合来自图像编码器和提示编码器的信息来预测分割掩模。

例如,我们可以提供包含图像和该图像中感兴趣的对象(例如银色汽车或行驶车道)周围的边界框的输入,并且 SAM 模型将为该对象生成分割掩模。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

视觉提示工程

即时工程是指构建模型的输入,使模型理解意图并产生期望的结果。 通过文本提示工程,您可以通过单词选择、格式设置、排序等修改来构建输入文本,以获得所需的输出。 视觉提示工程假设用户正在视觉模式(图像或视频)中工作,并提供输入。 以下是在视觉领域为生成式 AI 模型提供输入的潜在方法的非详尽列表:

  • 点 – 图像平面中的奇异 (x, y) 坐标点
  • Points – 多个(x,y)坐标点,彼此不一定相关
  • 边界框 – 一组四个值 (x、y、w、h),定义图像平面中的矩形区域
  • 轮廓 – 图像平面中形成闭合形状的一组 (x, y) 坐标点
  • Mask – 与图像大小相同的数组,带有感兴趣对象的部分掩模

考虑到视觉提示工程技术,让我们探讨如何将其应用于 SAM 预训练模型。 我们使用了预训练模型的基础版本。

使用预训练的 SAM 模型进行零样本提示

首先,我们来探讨一下零样本方法。 以下是从车辆前置摄像头拍摄的训练数据集中的示例图像。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

我们可以从图像中获得所有对象的分割掩模,而无需任何明确的视觉提示: 自动生成掩码 只需输入图像。 在下图中,我们看到汽车、道路、交通标志、车牌、天桥、柱子、标志等的部分被分割。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

但是,由于以下原因,此输出不会立即有用:

  • 这些汽车不是整体分割的,而是部分分割的。 例如,对于大多数感知模型,我们并不真正关心每个轮胎都有单独的输出掩模。 当寻找其他已知的感兴趣对象(例如道路、植被、标志等)时也是如此。
  • 图像中对下游任务有用的部分(例如可行驶区域)被分割,没有任何解释。 另一方面,相似的实例被单独识别,我们可能有兴趣对相似的对象进行分组(全景与实例分割)。

使用预训练的 SAM 模型进行视觉提示工程

幸运的是,SAM 支持提供输入提示,我们可以使用点、点数组和边界框作为输入。 通过这些具体说明,我们期望 SAM 在针对特定点或区域的分割方面做得更好。 这个可以和语言提示模板对比一下
"What is a good name for a company that makes {product}?"
其中来自用户的输入以及此提示模板是 {product}. {product} 是一个输入槽。 在视觉提示中,边界框、点或掩模是输入槽。

下图提供了车辆周围的原始地面实况边界框,以及来自 BDD100K 地面实况数据的可行驶区域补丁。 该图像还显示了绿色边界框中心的输入点(黄色 X),我们将在接下来的几节中提到该输入点。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

让我们尝试为左侧的汽车生成一个掩模,并将绿色边界框作为 SAM 的输入。 如下例所示,SAM 的基本模型实际上没有找到任何东西。 这也可以从低分割分数中看出。 当我们更仔细地查看分段掩码时,我们发现有一些小区域作为掩码返回(使用红色箭头指出),这些区域实际上对任何下游应用程序都无法使用。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

让我们尝试使用边界框和点的组合作为输入视觉提示。 上图中的黄色十字是边界框的中心。 提供该点的 (x,y) 坐标作为提示以及边界框约束,将为我们提供以下掩码和稍高的分数。 无论如何,这仍然无法使用。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

最后,通过基本的预训练模型,我们可以仅提供输入点作为提示(没有边界框)。 下图显示了我们认为最有趣的前三个面具中的两个。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

遮罩 1 分割整个汽车,而遮罩 3 分割出一个区域,该区域使汽车的车牌靠近黄色十字(输入提示)。 面罩1仍然不是车周围严密、干净的面罩; 这表明模型的质量,我们可以假设模型的质量随着模型大小的增加而增加。

我们可以使用相同的输入提示尝试更大的预训练模型。 下图显示了我们的结果。 当使用巨大的 SAM 预训练模型时,Mask 3 是整个汽车,而 Mask 1 和 2 可用于提取车牌。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

SAM 模型的大版本也提供类似的输出。

我们在这里经历的过程类似于您可能已经熟悉的文本提示的手动提示工程。 请注意,SAM 模型最近的一项改进可以高质量地分割任何内容,从而提供更好的特定于对象和上下文的输出。 在我们的例子中,我们发现带有文本和视觉提示(点、框以及点和框输入)的零样本提示并不能像我们上面看到的那样显着改善结果。

提示模板和视觉链

正如我们从前面的零样本示例中看到的,SAM 很难识别场景中的所有对象。 这是我们可以利用提示模板和视觉链的一个很好的例子。 视觉链的灵感来自流行的LangChain语言应用框架中的链概念。 它有助于链接数据源和法学硕士以产生输出。 例如,我们可以使用 API 链来调用 API,并根据 API 响应调用 LLM 来回答问题。

受LangChain的启发,我们提出了如下图所示的顺序视觉链。 我们使用一个工具(如预先训练的目标检测模型)来获取初始边界框,计算边界框中心的点,并用它来提示 SAM 模型输入图像。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

例如,下图显示了运行该链后的分割掩码。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

另一个示例链可以涉及用户有兴趣识别的对象的文本输入。 为了实现这一点,我们使用构建了一个管道 恐龙接地,一个提示 SAM 进行分割的对象检测模型。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

Grounding DINO 是一种零样本目标检测模型,可以通过提供类别名称(例如“交通灯”或“卡车”)和表达式(例如“黄色卡车”)的文本来执行目标检测。 它接受成对的文本和图像来执行对象检测。 它基于变压器架构,支持文本和图像数据的跨模式。 要了解有关 DINO 接地的更多信息,请参阅 接地 DINO:将 DINO 与接地预训练相结合,用于开放集物体检测。 这会生成边界框和标签,并可以进一步处理以生成中心点、基于标签、阈值等进行过滤。 这(框或点)用作 SAM 进行分割的提示,从而输出掩码。

以下是一些示例,显示输入文本、DINO 输出(边界框)和最终 SAM 输出(分割掩码)。

下图显示了“黄色卡车”的输出。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

下图显示了“silver car”的输出。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

下图显示了“行驶车道”的输出。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

我们可以使用这个管道来构建视觉链。 下面的代码片段解释了这个概念:

pipeline = [object_predictor, segment_predictor]
image_chain = ImageChain.from_visual_pipeline(pipeline, image_store, verbose=True)
image_chain.run('All silver cars', image_id='5X3349')

尽管这是一个简单的示例,但此概念可以扩展到处理来自车辆上摄像头的反馈,以执行对象跟踪、个人身份信息 (PII) 数据编辑等。 我们还可以从较小的模型中获取边界框,或者在某些情况下,使用标准计算机视觉工具。 使用预先训练的模型或 Amazon Rekognition 等服务来获取提示的初始(视觉)标签非常简单。 截至撰写本文时,Amazon SageMaker Jumpstart 上有 70 多个模型可用于对象检测,并且 亚马逊重新认识 已经识别了图像中几个有用的物体类别,包括汽车、行人和其他车辆。

接下来,我们使用 BDD100K 数据的子集查看与 SAM 模型性能相关的一些定量结果。

定量结果

我们的目标是在给予相同的视觉提示时比较三个预训练模型的性能。 在这种情况下,我们使用对象位置的中心点作为视觉输入。 我们比较对象大小(与图像大小成比例)的性能:小(面积 <0.11%)、中(0.11% < 面积 < 1%)和大(面积 > 1%)。 边界框区域阈值由上下文中的公共对象 (COCO) 定义 评估指标 [林等人,2014]。

评估是在像素级别进行的,我们使用以下评估指标:

  • 精度 =(相关实例和检索到的实例数)/(检索到的实例总数)
  • 召回率=(相关实例和检索实例的数量)/(相关实例的总数)
  • 这里的实例是感兴趣对象的边界框中的每个像素

下表报告了 SAM 模型的三个不同版本(基本版本、大型版本和巨大版本)的性能。 这些版本具有三种不同的编码器:ViT-B(基本)、ViT-L(大型)、ViT-H(大型)。 编码器具有不同的参数计数,其中基本模型的参数少于large,而large小于huge。 尽管增加参数数量可以提高较大对象的性能,但对于较小对象却并非如此。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

根据您的用例微调 SAM

在许多情况下,直接使用预先训练的 SAM 模型可能不是很有用。 例如,我们看一个典型的交通场景,下图左边是 SAM 模型的输出,其中随机采样的提示点作为输入,右边是 BDD100K 语义分割任务的实际标签。 这些显然是非常不同的。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

AV 中的感知堆栈可以轻松使用第二个图像,但不能使用第一个图像。 另一方面,第一张图像中存在一些可以使用的有用输出,并且该模型没有经过明确的训练,例如车道标记、人行道分割、车牌蒙版等。 我们可以微调 SAM 模型来改善分割结果。 为了执行此微调,我们使用 BDD500K 数据集中的实例分割子集(10 个图像)创建了一个训练数据集。 这是图像的一个非常小的子集,但我们的目的是证明基础视觉模型(很像法学硕士)可以在图像数量极少的情况下很好地满足您的用例。 下图显示了输入图像、输出蒙版(蓝色,左侧汽车的红色边框)和可能的提示(绿色边界框,黄色中心点 X)。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

我们使用 Hugging Face 库进行了微调 亚马逊SageMaker Studio。 我们使用 ml.g4dn.xlarge 实例进行 SAM 基础模型测试,使用 ml.g4dn.2xlarge 实例进行 SAM 巨大模型测试。 在我们最初的实验中,我们观察到仅使用边界框微调基本模型并不成功。 经过微调和预训练的模型无法从原始数据集中学习特定于汽车的地面实况掩模。 在微调中添加查询点也没有改善训练。

接下来,我们可以尝试使用非常小的数据集(30 张图像)对 SAM 巨大模型进行 500 个时期的微调。 标签类型汽车的原始地面实况掩模如下图所示。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

如下图所示,带有特定边界框提示(绿色)的巨大模型的原始预训练版本没有给出输出,而微调版本给出了输出(仍然不准确,但微调已被削减) 40 个 epoch 后关闭,训练数据集非常小,包含 500 张图像)。 原始的、预先训练的大型模型无法预测我们测试的任何图像的掩模。 作为下游应用程序的示例,微调模型可用于预标记工作流程,例如中描述的工作流程 AWS 上基于深度学习的高级驾驶辅助系统的自动标记模块.

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

结论

在这篇文章中,我们讨论了称为分段任意模型 (SAM) 的基础视觉模型及其架构。 我们使用 SAM 模型来讨论视觉提示和视觉提示工程的各种输入。 我们探讨了不同视觉提示的表现及其局限性。 我们还描述了视觉链如何比仅使用一个提示(类似于 LangChain API)来提高性能。 接下来,我们对三个预训练模型进行了定量评估。 最后,我们讨论了微调后的 SAM 模型及其与原始基本模型相比的结果。 基础模型的微调有助于提高分割等特定任务的模型性能。 应该指出的是,SAM 模型由于其资源要求,限制了实时用例的使用以及当前状态下的边缘推理。 我们希望通过未来的迭代和改进的技术,能够减少计算需求并改善延迟。

我们希望这篇文章能够鼓励您探索针对您的用例的视觉提示。 因为这仍然是提示工程的一种新兴形式,所以在视觉提示、视觉链和这些工具的性能方面还有很多东西有待发现。 亚马逊SageMaker 是一个完全托管的 ML 平台,使构建者能够探索大型语言和视觉模型并构建生成式 AI 应用程序。 立即开始使用 AWS 构建未来。


关于作者

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。戈皮·克里希那穆提 是位于纽约市的 Amazon Web Services 的高级 AI/ML 解决方案架构师。 他作为值得信赖的顾问与大型汽车客户合作,帮助他们转变机器学习工作负载并迁移到云端。 他的核心兴趣包括深度学习和无服务器技术。 工作之余,他喜欢与家人共度时光并探索各种音乐。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。史瑞亚斯·苏布拉曼尼亚 是首席 AI/ML 专家解决方案架构师,通过机器学习帮助客户解决使用 AWS 平台的业务挑战。 Shreyas 拥有大规模优化和机器学习方面的背景,并且擅长使用机器学习和强化学习来加速优化任务。

 自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。苏吉莎·马丁 是生成式人工智能创新中心 (GAIC) 的应用科学家。 她的专长是为各个垂直行业构建涉及计算机视觉和自然语言处理的机器学习解决方案。 特别是,她在以人为本的态势感知和高度自治系统的知识注入学习方面拥有丰富的经验。

自动驾驶应用的基础视觉模型和视觉提示工程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。弗朗西斯科·卡尔德隆 是生成人工智能创新中心 (GAIC) 的数据科学家。 作为 GAIIC 的成员,他使用生成式 AI 技术帮助 AWS 客户发现可能性的艺术。 在业余时间,弗朗西斯科喜欢演奏音乐和吉他,与女儿们一起踢足球,并与家人一起享受时光。

时间戳记:

更多来自 AWS机器学习