目前,我已经部署了一个语义细分模型和一个可以调用和获取推断的端点。现在,我一次可以推断每个图像。
现在,我想使用批处理转换作业一次尝试批处理图像。它工作得很好,但是创建的图像是一个 .out文件,我无法使用任何matzlotlib imread,PIL等viz库打开该文件图像和openCV读入。都说没有图片。
只想了解 .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()
答案 0 :(得分:0)
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))
此外,我在 this doc 中找到了一个类 ImageDeserializer
来完成处理数据流的工作。也许您可以将其调整到您的文件中,因为它读取从 推理 端点返回的字节流(批量转换将此数据放入 .out 文件)。
答案 1 :(得分:-1)
.out 文件是什么?
.out 文件本质上是您的 http 响应 HttpEntity(包括标头和正文)中的流(内容)。它与输入文件中的记录顺序相匹配。
更具体地说,对于每个批量转换,SageMaker 将您的输入文件拆分为记录,构建多个 http 请求并将它们发送到模型服务器。推理结果包含在 http 响应中。 SageMaker 将推理结果上传到带有“.out”后缀的 s3。