在线服务代码简介

完整的推理服务代码位于https://github.com/ucloud/uai-sdk/tree/master/examples/caffe/inference/mnist,推理服务的代码为mnist_inference.py,我们同时提供了conf.json和模型checkpoint_dir

mnist_inference.py

minst_inference.py 实现了load_model和execute两个函数。

创建 MnistModel 类

minst_inference.py首先需要实现一个在线服务的类,该类继承了CaffeAiUcloudModel(Caffe 在线服务基类)

""" A very simple MNIST inferencer.
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import caffe
from uai.arch.caffe_model import CaffeAiUcloudModel

class MnistModel(CaffeAiUcloudModel):
    """ Mnist example model
    """
    def __init__(self, conf):
        super(MnistModel, self).__init__(conf)

实现load_model

load_model实现借助caffe.Net函数。

def load_model(self):
    self.model = caffe.Net(self.model_arch_file, self.model_weight_file, caffe.TEST)

实现execute

实现execute分为四个部分:

  • 通过caffe.io.Transformer进行图片预处理设置;
  • 加载图像,执行预处操作,并载入到blob中;
  • 请求推理操作:self.model.forward()
  • 将请求结果转化成string,并合并成results(results也是一个list,和data list是一一对应的关系) def execute(self, data, batchsize): ret = [] for i in range(batchsize): """ 1 """ transformer = caffe.io.Transformer({'data': self.model.blobs['data'].data.shape}) transformer.settranspose('data', (2, 0, 1)) transformer.setraw_scale('data', 255)

    """ 2 """ im = caffe.io.load_image(data[i], color=False) self.model.blobs['data'].data[…] = transformer.preprocess('data', im)

    """ 3 """ self.model.forward()

    """ 4 """ prob = self.model.blobs['prob'].data[0].flatten() retval = str(prob.argsort()[-1]) + '\n' ret.append(retval) return ret