在线预测与批量预测之间的区别
在线预测是向模型端点发出的同步请求。如果您要发出请求以响应应用输入,或者在其他需要及时推理的情况下,可以使用在线预测。
批量预测是异步请求。您可以直接从模型资源请求批量预测,而无需将模型部署到端点。对于图片数据,如果您不需要获得即时响应并且希望通过一个请求处理累积数据,则可以使用批量预测。
获取在线预测结果
将模型部署到端点
您必须先将模型部署到端点,然后才能使用该模型执行在线预测。部署模型会将物理资源与模型相关联,以便以低延迟方式执行在线预测。
您可以将多个模型部署到一个端点,也可以将一个模型部署到多个端点。如需详细了解部署模型的方法和使用场景,请参阅部署模型简介。
请使用以下方法之一部署模型:
Google Cloud 控制台
在 Google Cloud 控制台的 Vertex AI 部分中,转到模型页面。
点击要部署的模型名称以打开其详情页面。
选择部署和测试标签页。
如果模型已部署到任何端点,部署模型 (Deploy your model) 部分中会列出这些端点。
点击部署到端点。
如需将模型部署到新的端点,请选择
创建新端点并为新端点提供名称。如需将模型部署到现有端点,请选择 添加到现有端点,然后从下拉列表中选择端点。您可以将多个模型添加到一个端点,也可以将一个模型添加到多个端点。了解详情。
如果您将模型部署到已部署有一个或多个模型的现有端点,则必须为要部署的模型和已部署模型更新流量拆分,以使所有百分比的总和为 100%。
选择 AutoML 图片,然后按如下方式进行配置:
如果您要将模型部署到新端点,请接受 100 的流量拆分值。否则,请为端点上所有模型调整流量拆分值,使它们的总和为 100。
输入要为模型提供的计算节点数量。
这是此模型始终可用的节点数。即使没有预测流量,您也要为节点付费。请参阅价格页面。
了解如何更改预测日志记录的默认设置。
仅限分类模型(可选):在可解释性选项部分,选择 Vertex Explainable AI。接受现有的可视化设置或选择新值,然后点击完成。
为此模型启用特征归因以启用部署配置有 Vertex Explainable AI 的 AutoML 图片分类模型并使用可解释性进行预测均为可选操作。在部署时启用 Vertex Explainable AI 会产生基于已部署节点数量和部署时间的额外费用。如需了解详情,请参阅价格。
为模型点击完成,当所有流量分配百分比均正确无误时,点击继续。
随即将显示在其中部署模型的区域。此区域必须是您在其中创建模型的区域。
点击部署,将模型部署到端点。
API
使用 Vertex AI API 部署模型时,请完成以下步骤:
- 根据需要创建端点。
- 获取端点 ID。
- 将模型部署到端点。
创建端点
如果要将模型部署到现有端点,您可以跳过此步骤。
gcloud
以下示例使用 gcloud ai endpoints create
命令:
gcloud ai endpoints create \
--region=LOCATION \
--display-name=ENDPOINT_NAME
替换以下内容:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- ENDPOINT_NAME:端点的显示名称。
Google Cloud CLI 工具可能需要几秒钟才能创建端点。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:您的区域。
- PROJECT_ID:您的项目 ID。
- ENDPOINT_NAME:端点的显示名称。
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints
请求 JSON 正文:
{ "display_name": "ENDPOINT_NAME" }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata", "genericMetadata": { "createTime": "2020-11-05T17:45:42.812656Z", "updateTime": "2020-11-05T17:45:42.812656Z" } } }
"done": true
。
Java
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Java 设置说明执行操作。如需了解详情,请参阅 Vertex AI Java API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装或更新 Python,请参阅安装 Python 版 Vertex AI SDK。如需了解详情,请参阅 Python API 参考文档。
检索端点 ID
您需要端点 ID 才能部署模型。
gcloud
以下示例使用 gcloud ai endpoints list
命令:
gcloud ai endpoints list \
--region=LOCATION \
--filter=display_name=ENDPOINT_NAME
替换以下内容:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- ENDPOINT_NAME:端点的显示名称。
请注意 ENDPOINT_ID
列中显示的数字。请在以下步骤中使用此 ID。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- PROJECT_ID:您的项目 ID。
- ENDPOINT_NAME:端点的显示名称。
HTTP 方法和网址:
GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints?filter=display_name=ENDPOINT_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "endpoints": [ { "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/endpoints/ENDPOINT_ID", "displayName": "ENDPOINT_NAME", "etag": "AMEw9yPz5pf4PwBHbRWOGh0PcAxUdjbdX2Jm3QO_amguy3DbZGP5Oi_YUKRywIE-BtLx", "createTime": "2020-04-17T18:31:11.585169Z", "updateTime": "2020-04-17T18:35:08.568959Z" } ] }
部署模型
在下面选择您的语言或环境对应的标签页:
gcloud
以下示例使用 gcloud ai endpoints deploy-model
命令。
以下示例将 Model
部署到 Endpoint
,但没有在多个 DeployedModel
资源之间拆分流量:
在使用下面的命令数据之前,请先进行以下替换:
- ENDPOINT_ID:端点的 ID。
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- MODEL_ID:要部署的模型的 ID。
-
DEPLOYED_MODEL_NAME:
DeployedModel
的名称。您还可以将Model
的显示名用于DeployedModel
。 - MIN_REPLICA_COUNT:此部署的最小节点数。 节点数可根据预测负载的需要而增加或减少,直至达到节点数上限并且绝不会少于此节点数。
-
MAX_REPLICA_COUNT:此部署的节点数上限。
节点数可根据预测负载的需要而增加或减少,直至达到此节点数并且绝不会少于节点数下限。如果您省略
--max-replica-count
标志,则节点数上限将设置为--min-replica-count
的值。
执行 gcloud ai endpoints deploy-model 命令:
Linux、macOS 或 Cloud Shell
gcloud ai endpoints deploy-model ENDPOINT_ID\ --region=LOCATION_ID \ --model=MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT \ --max-replica-count=MAX_REPLICA_COUNT \ --traffic-split=0=100
Windows (PowerShell)
gcloud ai endpoints deploy-model ENDPOINT_ID` --region=LOCATION_ID ` --model=MODEL_ID ` --display-name=DEPLOYED_MODEL_NAME ` --min-replica-count=MIN_REPLICA_COUNT ` --max-replica-count=MAX_REPLICA_COUNT ` --traffic-split=0=100
Windows (cmd.exe)
gcloud ai endpoints deploy-model ENDPOINT_ID^ --region=LOCATION_ID ^ --model=MODEL_ID ^ --display-name=DEPLOYED_MODEL_NAME ^ --min-replica-count=MIN_REPLICA_COUNT ^ --max-replica-count=MAX_REPLICA_COUNT ^ --traffic-split=0=100
拆分流量
上述示例中的 --traffic-split=0=100
标志会将 Endpoint
接收的 100% 预测流量发送到新 DeployedModel
(使用临时 ID 0
表示)。如果您的 Endpoint
已有其他 DeployedModel
资源,那么您可以在新 DeployedModel
和旧资源之间拆分流量。例如,如需将 20% 的流量发送到新 DeployedModel
,将 80% 发送到旧版本,请运行以下命令。
在使用下面的命令数据之前,请先进行以下替换:
- OLD_DEPLOYED_MODEL_ID:现有
DeployedModel
的 ID。
执行 gcloud ai endpoints deploy-model 命令:
Linux、macOS 或 Cloud Shell
gcloud ai endpoints deploy-model ENDPOINT_ID\ --region=LOCATION_ID \ --model=MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT \ --max-replica-count=MAX_REPLICA_COUNT \ --traffic-split=0=20,OLD_DEPLOYED_MODEL_ID=80
Windows (PowerShell)
gcloud ai endpoints deploy-model ENDPOINT_ID` --region=LOCATION_ID ` --model=MODEL_ID ` --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT ` --max-replica-count=MAX_REPLICA_COUNT ` --traffic-split=0=20,OLD_DEPLOYED_MODEL_ID=80
Windows (cmd.exe)
gcloud ai endpoints deploy-model ENDPOINT_ID^ --region=LOCATION_ID ^ --model=MODEL_ID ^ --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT ^ --max-replica-count=MAX_REPLICA_COUNT ^ --traffic-split=0=20,OLD_DEPLOYED_MODEL_ID=80
REST
部署此模型。
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- PROJECT_ID:您的项目 ID。
- ENDPOINT_ID:端点的 ID。
- MODEL_ID:要部署的模型的 ID。
-
DEPLOYED_MODEL_NAME:
DeployedModel
的名称。您还可以将Model
的显示名用于DeployedModel
。 - MIN_REPLICA_COUNT:此部署的最小节点数。 节点数可根据预测负载的需要而增加或减少,直至达到节点数上限并且绝不会少于此节点数。
- MAX_REPLICA_COUNT:此部署的节点数上限。 节点数可根据预测负载的需要而增加或减少,直至达到此节点数并且绝不会少于节点数下限。
- TRAFFIC_SPLIT_THIS_MODEL:流向此端点的要路由到使用此操作部署的模型的预测流量百分比。默认值为 100。所有流量百分比之和必须为 100。详细了解流量拆分。
- DEPLOYED_MODEL_ID_N:可选。如果将其他模型部署到此端点,您必须更新其流量拆分百分比,以便所有百分比之和等于 100。
- TRAFFIC_SPLIT_MODEL_N:已部署模型 ID 密钥的流量拆分百分比值。
- PROJECT_NUMBER:自动生成的项目编号
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
请求 JSON 正文:
{ "deployedModel": { "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "displayName": "DEPLOYED_MODEL_NAME", "automaticResources": { "minReplicaCount": MIN_REPLICA_COUNT, "maxReplicaCount": MAX_REPLICA_COUNT } }, "trafficSplit": { "0": TRAFFIC_SPLIT_THIS_MODEL, "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1, "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2 }, }
如需发送您的请求,请展开以下选项之一:
您应会收到如下所示的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployModelOperationMetadata", "genericMetadata": { "createTime": "2020-10-19T17:53:16.502088Z", "updateTime": "2020-10-19T17:53:16.502088Z" } } }
Java
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Java 设置说明执行操作。如需了解详情,请参阅 Vertex AI Java API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装或更新 Python,请参阅安装 Python 版 Vertex AI SDK。如需了解详情,请参阅 Python API 参考文档。
了解如何更改预测日志记录的默认设置。
获取操作状态
某些请求会启动需要一些时间才能完成的长时间运行的操作。这些请求会返回操作名称,您可以使用该名称查看操作状态或取消操作。Vertex AI 提供辅助方法来调用长时间运行的操作。如需了解详情,请参阅使用长时间运行的操作。
使用已部署的模型进行在线预测
如需进行在线预测,请向模型提交一个或多个测试项进行分析,模型会返回基于模型目标的结果。如需详细了解预测结果,请参阅解读结果页面。
控制台
使用 Google Cloud 控制台请求在线预测。您的模型必须部署到端点。
API
使用 Vertex AI API 来请求在线预测。您的模型必须部署到端点。
图片数据类型目标包括分类和对象检测。
Edge 模型预测:当您使用 AutoML 图片 Edge 模型进行预测时,必须先将任何非 JPEG 预测文件转换为 JPEG 文件,然后再发送预测请求。如需查看 Python 预处理函数示例,请参阅适用于 Google Cloud AutoML API 的 Python 客户端代码库。
gcloud
创建名为
request.json
且包含以下内容的文件:{ "instances": [{ "content": "CONTENT" }], "parameters": { "confidenceThreshold": THRESHOLD_VALUE, "maxPredictions": MAX_PREDICTIONS } }
请替换以下内容:
- CONTENT:base64 编码的图片内容。
- THRESHOLD_VALUE(可选):模型仅返回置信度分数至少为此值的预测结果。
- MAX_PREDICTIONS(可选):模型返回具有最高置信度分数的预测结果的数量上限。
运行以下命令:
gcloud ai endpoints predict ENDPOINT_ID \ --region=LOCATION_ID \ --json-request=request.json
替换以下内容:
- ENDPOINT_ID:端点的 ID。
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:端点所在的区域。例如
us-central1
。 - PROJECT_ID:您的项目 ID。
- ENDPOINT_ID:端点的 ID。
- CONTENT:base64 编码的图片内容。
- THRESHOLD_VALUE(可选):模型仅返回置信度分数至少为此值的预测结果。
- MAX_PREDICTIONS(可选):模型返回具有最高置信度分数的预测结果的数量上限。
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:predict
请求 JSON 正文:
{ "instances": [{ "content": "CONTENT" }], "parameters": { "confidenceThreshold": THRESHOLD_VALUE, "maxPredictions": MAX_PREDICTIONS } }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:predict"
PowerShell
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:predict" | Select-Object -Expand Content
您应会收到如下所示的 JSON 响应:
{ "predictions": [ { "confidences": [ 0.975873291, 0.972160876, 0.879488528, 0.866532683, 0.686478078 ], "displayNames": [ "Salad", "Salad", "Tomato", "Tomato", "Salad" ], "ids": [ "7517774415476555776", "7517774415476555776", "2906088397049167872", "2906088397049167872", "7517774415476555776" ], "bboxes": [ [ 0.0869686604, 0.977020741, 0.395135701, 1 ], [ 0, 0.488701463, 0.00157663226, 0.512249 ], [ 0.361617863, 0.509664357, 0.772928834, 0.914706349 ], [ 0.310678929, 0.45781514, 0.565507233, 0.711237729 ], [ 0.584359646, 1, 0.00116168708, 0.130817384 ] ] } ], "deployedModelId": "3860570043075002368" }
Java
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Java 设置说明执行操作。如需了解详情,请参阅 Vertex AI Java API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装或更新 Python,请参阅安装 Python 版 Vertex AI SDK。如需了解详情,请参阅 Python API 参考文档。
进行批量预测
如需发出批量预测请求,请指定输入源和 Vertex AI 存储预测结果所采用的输出格式。 AutoML 图片模型类型的批量预测需要输入 JSON 行文件和存储输出的 Cloud Storage 存储桶的名称。
输入数据要求
批量请求的输入指定要发送到模型进行预测的内容。对于图片对象检测模型,您可以使用 JSON 行文件指定用于进行预测的图片列表,然后将 JSON 行文件存储在 Cloud Storage 存储桶中。以下示例显示了输入 JSON 行文件中的一行:
{"content": "gs://sourcebucket/datasets/images/source_image.jpg", "mimeType": "image/jpeg"}
请求批量预测
对于批量预测请求,您可以使用 Google Cloud 控制台或 Vertex AI API。批量预测任务可能需要一些时间才能完成,具体取决于提交的输入数据项数量。
Google Cloud 控制台
使用 Google Cloud 控制台请求批量预测。
在 Google Cloud 控制台的 Vertex AI 部分中,前往批量预测页面。
点击创建以打开新建批量预测窗口,完成以下步骤:
- 输入批量预测的名称。
- 对于模型名称,选择要用于此批量预测的模型的名称。
- 对于来源路径,指定 JSON 行输入文件所在的 Cloud Storage 位置。
- 对于目标路径,指定存储批量预测结果的 Cloud Storage 位置。输出格式取决于模型的目标。用于图片目标的 AutoML 模型会输出 JSON 行文件。
API
使用 Vertex AI API 发送批量预测请求。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:存储模型和执行批量预测作业的区域。例如
us-central1
。 - PROJECT_ID:您的项目 ID
- BATCH_JOB_NAME:批量作业的显示名
- MODEL_ID:用于执行预测的模型的 ID
- THRESHOLD_VALUE(可选):Vertex AI 仅返回置信度分数至少为此值的预测。默认值为
0.0
。 - MAX_PREDICTIONS(可选):从具有最高置信度分数的预测开始,Vertex AI 返回的预测的数量上限。默认值为
10
。 - URI:输入 JSON 行文件所在的 Cloud Storage URI。
- BUCKET:您的 Cloud Storage 存储桶
- PROJECT_NUMBER:自动生成的项目编号
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
请求 JSON 正文:
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT/locations/LOCATION/models/MODEL_ID", "modelParameters": { "confidenceThreshold": THRESHOLD_VALUE, "maxPredictions": MAX_PREDICTIONS }, "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": ["URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_BUCKET", }, }, }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "CONTENT" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "BUCKET" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", "modelDisplayName": "MODEL_NAME", "modelObjective": "MODEL_OBJECTIVE" }
您可以使用 BATCH_JOB_ID 轮询批量作业的状态,直到作业 state
为 JOB_STATE_SUCCEEDED
。
Python
如需了解如何安装或更新 Python,请参阅安装 Python 版 Vertex AI SDK。如需了解详情,请参阅 Python API 参考文档。
检索批量预测结果
Vertex AI 将批量预测输出发送到您指定的目标位置。
批量预测任务完成后,预测的输出存储在您在请求中指定的 Cloud Storage 存储桶中。
批量预测结果示例
以下示例演示了来自图片对象检测模型的批量预测结果。
重要提示 :边界框的指定方式如下:
"bboxes": [
[xMin, xMax, yMin, yMax],
...]
xMin
和 xMax
是最小和最大 x 值,
yMin
和 yMax
分别是最小和最大 y 值。
{ "instance": {"content": "gs://bucket/image.jpg", "mimeType": "image/jpeg"}, "prediction": { "ids": [1, 2], "displayNames": ["cat", "dog"], "bboxes": [ [0.1, 0.2, 0.3, 0.4], [0.2, 0.3, 0.4, 0.5] ], "confidences": [0.7, 0.5] } }