AWS SageMaker 上训练的模型使用内置算法语义分割,如何在本地 PC 上进行推理?

How to make inference on local PC with the model trained on AWS SageMaker by using the built-in algorithm Semantic Segmentation?

类似于The trained model can be deployed on the other platform without dependency of sagemaker or aws service?的问题。

我在 AWS SageMaker 上训练了一个模型,使用内置算法 Semantic Segmentation. This trained model named as model.tar.gz is stored on S3. So I want to download this file from S3 and then use it to make inference on my local PC without using AWS SageMaker anymore. Since the built-in algorithm Semantic Segmentation is built using the MXNet Gluon framework and the Gluon CV toolkit, so I try to refer the documentation of mxnet and gluon-cv 在本地 PC 上进行推理。

从S3下载这个文件很容易,然后我解压这个文件得到三个文件:

  1. hyperparams.json:包括网络架构、数据输入和训练的参数。参考Semantic Segmentation Hyperparameters.
  2. model_algo-1
  3. model_best.params

model_algo-1model_best.params都是训练好的模型,我认为是net.save_parameters(参考Train the neural network)。我还可以使用函数 mxnet.ndarray.load.

加载它们

参考Predict with a pre-trained model。我发现有两个必要的东西:

  1. 重建网络进行推理。
  2. 加载训练好的参数。

至于重构网络进行推理,因为我是用PSPNet训练出来的,所以可以用class gluoncv.model_zoo.PSPNet重构网络。而且我知道如何使用 AWS SageMaker 的一些服务(例如批量转换作业)进行推理。我想在我的本地 PC 上重现它。如果我使用 class gluoncv.model_zoo.PSPNet 重构网络,我无法确定这个网络的参数是否与 AWS SageMaker 上使用的参数相同,同时进行推理。因为我看不到详细的图像501404015308.dkr.ecr.ap-northeast-1.amazonaws.com/semantic-segmentation:latest

至于加载训练好的参数,我可以使用load_parameters。但是对于model_algo-1model_best.params,我不知道应该用哪个

下面的代码很适合我。

import mxnet as mx
from mxnet import image
from gluoncv.data.transforms.presets.segmentation import test_transform
import gluoncv

# use cpu
ctx = mx.cpu(0)

# load test image
img = image.imread('./img/IMG_4015.jpg')
img = test_transform(img, ctx)
img = img.astype('float32')

# reconstruct the PSP network model
model = gluoncv.model_zoo.PSPNet(2)

# load the trained model
model.load_parameters('./model/model_algo-1')

# make inference
output = model.predict(img)
predict = mx.nd.squeeze(mx.nd.argmax(output, 1)).asnumpy()