无法读取 Sagemaker 语义分割模型批量转换输出文件
Posted
技术标签:
【中文标题】无法读取 Sagemaker 语义分割模型批量转换输出文件【英文标题】:Not able to read Sagemaker Semantic Segmentation Model Batch Transformation Output file 【发布时间】:2021-02-09 23:06:18 【问题描述】:目前我已经部署了一个语义分割模型和一个端点,我可以使用它来调用和获取推理。现在,我一次对每张图像进行推断。
现在我想使用批量转换作业一次尝试批量图像。它工作得非常好,但创建的图像是一个 .out 文件,我无法使用任何可视化库(如 matplotlib imread、PIL)打开该文件图像和 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()
【问题讨论】:
你能解决这个问题吗? 不,我只对单个图像使用推理,并在一个循环中运行它以进行批处理,您是否也面临同样的问题? 是的,面临同样的问题。您是如何仅对一张图像进行推断的?我看到了你的另一篇文章,但我得到了同样的错误“文件'model_new/model_algo-1'中缺少参数'head.psp.conv1.0.weight'”,我不知道如何在“ png" 而不是 ".out" 根据文档,“.out”文件是带有数据和 pridicted 标签的 CSV 类型的结果文件。尝试使用文本编辑应用程序打开和调查 【参考方案1】:作为official doc say:
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
来处理数据流。也许您可以将其调整为适合您的文件,因为它读取从 inference 端点返回的字节流(批量转换将此数据放入 .out 文件中)。
【讨论】:
谢谢你,让我检查一下然后回来。【参考方案2】:.out 文件是什么?
.out 文件本质上是您的 http 响应 HttpEntity(包括标题和正文)中的流(内容)。它与您输入文件中记录的顺序相匹配。
更具体地说,对于每个批量转换,SageMaker 将您的输入文件拆分为记录,构建多个 http 请求并将它们发送到模型服务器。推理结果包含在 http 响应中。 SageMaker 将推理结果上传到带有“.out”后缀的 s3。
【讨论】:
以上是关于无法读取 Sagemaker 语义分割模型批量转换输出文件的主要内容,如果未能解决你的问题,请参考以下文章