Sagemaker图像分类:对S3中许多图像的推断的最佳方法



我用内置的resnet18 docker映像训练了一个模型,现在我想将模型部署到端点,并对约100万张图像进行分类。我以记录式格式(使用im2rec.py转换(将所有培训,验证和测试图像存储在S3上。根据文档:

Amazon SageMaker图像分类算法支持Recordio(Application/X-Recordio(和Image(Application/X-Image(内容类型用于培训。该算法仅支持推理的应用/X图像。

因此,我无法以记录式格式对培训数据进行推断。为了克服这一点,我将所有RAW .JPG图像(〜2GB(复制到我的SageMaker Jupyter笔记本实例上,并以下面的方式执行推理:

img_list = os.listdir('temp_data') # list of all ~1,000,000 images
for im in img_list:
    with open('temp_data/'+im, 'rb') as f:
        payload = f.read()
        payload = bytearray(payload)
    response = runtime.invoke_endpoint(EndpointName=endpoint_name, 
                                       ContentType='application/x-image', 
                                       Body=payload)
    etc...

不必说,将所有数据传输到我的笔记本实例上花了很长时间,我宁愿在运行推理之前不必这样做。为什么SageMaker图像分类不支持推理的Recordio?更重要的是,在许多图像上运行推断而不必从S3移动它们的最佳方法是什么?

Recordio格式旨在将大量图像包装到一个文件中,因此我认为它不能很好地预测单个图像。

在预测方面,您绝对不必将图像复制到笔记本实例或S3。您只需要从任何地方加载它们并在预测请求中内联。

如果您需要基于HTTP的预测,则是您的选择:

1(在任何机器上使用SageMaker SDK Predivor.predict((API(只要它具有适当的AWS凭据(https://github.com/aws/aws/sagemaker-python-sdk

2(使用AWS Python SDK(aka boto3(API Invoke_endpoint((

您甚至可以构建一项简单的服务来与Lambda执行预处理或后处理。这是一个示例:https://medium.com/@julsimon/using-chalice-chalice-to-serve-sagemaker-predictions-a2015c02b033

如果要批次预测: 最简单的方法是从SageMaker中检索训练有素的模型,编写几行临时MXNET代码以加载并运行所有预测。这是一个示例:https://mxnet.incubator.apache.org/tutorials/python/predict_image.html

希望这会有所帮助。

Amazon SageMaker现在支持批次预测,该预测更适合您的用例:

  • https://aws.amazon.com/about-aws/whats-new/2018/2018/07/amazon-sagemaker-supports-supports-high-though-though-though-batch-transform-transform-jobs-for-non-real time-non-real-non-real时间 -/
  • https://docs.aws.amazon.com/machine-learning/latest/dg/interpreting_predictions.html

相关内容

最新更新