从AWS Lambda调用invoke_endpoint,以获取返回application/x-recordio-protobuf而不是image的语义分段模型(Python)

ckx4rj1h  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(104)

我正在使用invoke_endpoint函数从AWS Lamba调用语义分割模型,但没有得到图像响应,而是得到了application/x-recordio-protobuf,我无法将其转换为图像进行进一步处理。语义分割模型在我的sagemaker笔记本中按预期工作。问题是当从AWS Lambda调用它时。我需要从AWS Lambda或类似的服务调用它,这样我就可以将它与一个应用程序连接,该应用程序将通过一个rest服务传递图像输入。
下面是我的代码的相关部分:

runtime= boto3.client('runtime.sagemaker')
response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
                                  ContentType='image/jpeg',
                                  Body=imageBody,
                                  Accept='image/jpeg')

我还没有找到好的例子来说明如何从AWS Lambda中正确地调用专门用于语义分割模型的端点。我也尝试过导入sagemaker,但AWS Lambda没有附带该模块,而且我也找不到适合sagemaker的层。
如果有人知道如何能够从AWS调用语义分割模型,向其传递图像,并获得图像作为响应,我将不胜感激。

yacmzcpb

yacmzcpb1#

我假设当你在笔记本上声明它可以工作时,你使用的是.predict()- SageMaker Python SDK。
如果是这样的话,您可以使用boto 3客户端(我看到您已经展示了它),您只需要像SDK一样将imageBody序列化为字节,并设置正确的AcceptTypeContentType
若要查询部署到端点的已训练模型,您需要提供影像和表示所需输出类型的AcceptType。端点会采用image/jpeg内容类型的JPEG影像。如果您要求image/png的AcceptType,算法会输出PNG档案,其中含有与标签本身相同格式的区段遮罩。如果您要求application/x-recordio-protobuf的AcceptType,该算法返回以recordio-protobuf格式编码的类概率。
https://docs.aws.amazon.com/sagemaker/latest/dg/semantic-segmentation.html#semantic-segmentation-inputoutput-inference

相关问题