类似于经过训练的模型可以部署在另一个平台上,而不依赖于sagemaker或aws服务?的问题。
我用内置算法SageMaker训练了一个AWS 语义分割模型.这个名为model.tar.gz的经过训练的模型存储在S3上。所以我想从S3下载这个文件,然后用它在我的本地PC上进行推理,而不再使用AWS SageMaker。由于内置算法的语义分割是用MXNet胶子框架与胶子CV工具包实现的,所以我尝试参考mxnet和胶子-cv的文档,在本地PC上进行推理。
从S3下载这个文件很容易,然后我解压缩这个文件以获得三个文件:
model_algo-1和model_best.params都是经过训练的模型,我认为这是来自net.save_parameters的输出(参见训练神经网络)。我还可以用函数mxnet.ndarray.load加载它们。
请参阅用预先训练的模型进行预测。我发现有两件事是必要的:
至于重建网络进行推理,由于我从训练中使用了PSPNet,所以可以用类gluoncv.model_zoo.PSPNet来重构网络。我知道如何使用AWS SageMaker的一些服务,例如批处理转换作业,来进行推理。我想在我的本地电脑上复制它。如果使用类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,,我不知道应该使用哪一种。
发布于 2020-03-02 05:15:37
下面的代码对我来说很好。
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()https://stackoverflow.com/questions/60405600
复制相似问题