使用在 Sagemaker 上训练的模型进行本地预测

min*_*bro 5 gluon mxnet amazon-sagemaker

我使用内置算法语义分割在 AWS SageMaker 上训练了一个模型。这个名为 model.tar.gz 的训练模型存储在 S3 上。因此,我想从 S3 下载此文件,然后使用它在我的本地 PC 上进行推理,而不使用 AWS SageMaker。

这是三个文件:

  1. hyperparams.json:包括网络架构、数据输入和训练的参数。请参阅语义分割超参数。

  2. model_algo-1

  3. model_best.params

我的代码:

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



img = image.imread('./bdd100k/validation/14df900d-c5c145cb.jpg')
img = test_transform(img, ctx)
img = img.astype('float32')


model = gluoncv.model_zoo.PSPNet(2)

# load the trained model
model.load_parameters('./model/model_best.params')
Run Code Online (Sandbox Code Playgroud)

错误:

AssertionError: Parameter 'head.psp.conv1.0.weight' is missing in file './model/model_best.params', which contains parameters: 'layer3.2.bn3.beta', 'layer3.0.conv3.weight', 'conv1.1.running_var', ..., 'layer2.2.bn3.running_mean', 'layer3.4.bn2.running_mean', 'layer4.2.bn3.beta', 'layer3.4.bn3.beta'. Set allow_missing=True to ignore missing parameters.
Run Code Online (Sandbox Code Playgroud)

tar*_*koM 1

从 tar.gz 文件中提取 model_algo-1 后,以下操作应该可以工作。这将在本地 ctx 上运行。

import gluoncv
from gluoncv import model_zoo
from gluoncv.data.transforms.presets.segmentation import test_transform

model = model_zoo.DeepLabV3(nclass=2, backbone='resnet50', 
pretrained_base=False, height=800, width=1280, crop_size=240)
model.load_parameters("model_algo-1")

img = test_transform(img, ctx)
img = img.astype('float32')

output = model.predict(img)
print(output.shape)
max_predict = mx.nd.squeeze(mx.nd.argmax(output, 1)).asnumpy()
print(max_predict.shape)

prob_mask = mx.nd.squeeze(output).asnumpy()

def NormalizeData(data):
    return (data - np.min(data)) / (np.max(data) - np.min(data))

target_cls_id = 1
prob_mat = prob_mask[target_cls_id, :, :]
norm_prob = NormalizeData(prob_mat)
plt.hist(norm_prob.flatten(), bins=50)
Run Code Online (Sandbox Code Playgroud)