无法读取Sagemaker语义分割模型批量转换输出文件



目前我已经部署了一个语义分割模型和一个端点,通过它我可以调用和获得推断。现在,我一次对每个图像进行推断。

现在我想使用batch Transform作业一次尝试一批图像。它运行得很好,但创建的图像是一个.out文件,我

无法使用任何viz库打开该文件只是想了解什么是.out文件

如果它是一个分割的掩码图像,通常是语义分割模型的输出,那么我如何读取该文件。

我的批量转换代码:

from sagemaker.predictor import RealTimePredictor, csv_serializer, csv_deserializer
class Predictor(RealTimePredictor):

def __init__(self, endpoint_name, sagemaker_session=None):
super(Predictor, self).__init__(
endpoint_name, sagemaker_session, csv_serializer, csv_deserializer
)
ss_model = sagemaker.model.Model(role =role, image=training_image, model_data = model, predictor_cls=Predictor, sagemaker_session=sess)
transformer = ss_model.transformer(instance_count=1, instance_type='ml.c4.xlarge', output_path=batch_output_data)
transformer.transform(data=batch_input_data, data_type='S3Prefix', content_type='image/png', split_type='None')
transformer.wait()

正如官方文档所说:

SageMaker语义分割算法提供了一种细粒度的,像素级开发计算机视觉应用程序的方法。它使用预定义类集合中的类标签标记图像中的每个像素。

因为语义分割算法在图像,它还提供有关对象形状的信息包含在图像中分割输出表示为灰度图像,称为分割掩码。分段掩码是具有与输入图像相同形状的灰度图像。

因此,.out文件所具有的是像素阵列(为每个像素分配类(。您需要反序列化文件:

from PIL import Image
import numpy as np
import io
from boto3.session import Session
session = Session(
aws_access_key_id=KEY_ID, aws_secret_access_key=ACCESS_KEY, region_name=REGION_NAME
)
s3 = session.resource("s3")
out_file = io.BytesIO()
s3_object = s3.Object(BUCKET, PATH)
s3_object.download_fileobj(out_file)
out_file.seek(0)
mask = np.array(Image.open(out_file))

此外,我在这个文档中找到了一个类ImageDeserializer来处理数据流。也许您可以将其调整为适合您的文件,因为它读取了从推理端点返回的字节流(批处理转换将这些数据放入.out文件中(。

什么是.out文件

.out文件本质上是http响应HttpEntity中的流(内容((包括标头和正文(。它与输入文件中记录的顺序相匹配。

更具体地说,对于每个批处理转换,SageMaker将您的输入文件拆分为记录,构建多个http请求并将其发送到模型服务器。推断结果包含在http响应中。SageMaker将推理结果上传到s3;。out";后缀

最新更新