我已经使用内置算法Semantic Segmentation在AWS SageMaker上训练了一个模型。名为model.tar.gz
的经过训练的模型存储在S3上。因此,我想从S3下载此文件,然后使用它在本地PC上进行推理,而不再使用AWS SageMaker。由于内置的语义分割算法是使用MXNet Gluon framework and the Gluon CV toolkit构建的,因此,我尝试参考mxnet和gluon-cv的文档在本地PC上进行推断。
从S3下载此文件很容易,然后我将该文件解压缩以获得三个文件:
model_algo-1 和 model_best.params 都是经过训练的模型,我认为这是net.save_parameters
的输出(请参阅Train the neural network )。我也可以使用功能mxnet.ndarray.load
加载它们。
请参阅Predict with a pre-trained model。我发现有两个必要的东西:
关于重构网络以进行推理,由于我已经从训练中使用了PSPNet,因此可以使用类gluoncv.model_zoo.PSPNet
来重构网络。而且我知道如何使用AWS SageMaker的某些服务(例如批处理转换作业)进行推理。我想在本地PC上重现它。如果我使用类gluoncv.model_zoo.PSPNet
来重建网络,则在推理时无法确定该网络的参数是否与AWS SageMaker上使用的参数相同。因为我看不到图像501404015308.dkr.ecr.ap-northeast-1.amazonaws.com/semantic-segmentation:latest
的详细信息。
关于加载训练后的参数,我可以使用load_parameters
。但是对于 model_algo-1 和 model_best.params ,我不知道应该使用哪个。
答案 0 :(得分:0)
以下代码对我来说很好。
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()