コード例 #1
0
from typing import List, Sequence
import numpy as np
import onnxruntime as rt

from src.app.configurations import _ModelConfigurations
from src.app.constants import MODEL_RUNTIME
from src.app.ml.base_predictor import BaseData, BaseDataInterface, BaseDataConverter, BasePredictor
from src.app.ml.save_helper import load_labels
import logging

logger = logging.getLogger(__name__)

LABELS = load_labels(_ModelConfigurations().options["label_filepath"])


class _Data(BaseData):
    test_data: List[List[int]] = [[5.1, 3.5, 1.4, 0.2]]
    labels: List[str] = LABELS


class _DataInterface(BaseDataInterface):
    pass


class _DataConverter(BaseDataConverter):
    pass


class _Classifier(BasePredictor):
    def __init__(self, model_runners):
        self.model_runners = model_runners
コード例 #2
0
def main():
    modelname = "resnet50_onnx"
    interface_filename = f"{modelname}.yaml"

    model = resnet50(pretrained=True)
    x_dummy = torch.rand((1, 3, 224, 224), device="cpu")
    model.eval()
    torch.onnx.export(
        model,
        x_dummy,
        MODEL_FILEPATH,
        export_params=True,
        opset_version=10,
        do_constant_folding=True,
        input_names=["input"],
        output_names=["output"],
        verbose=False,
    )

    labels = load_labels(LABEL_FILEPATH)

    preprocess = PytorchImagePreprocessTransformer()

    image = Image.open(SAMPLE_IMAGE)
    np_image = preprocess.transform(image)
    print(np_image.shape)

    preprocess_name = f"{modelname}_preprocess_transformer"
    preprocess_filename = f"{preprocess_name}.pkl"
    preprocess_filepath = os.path.join(MODEL_DIR, preprocess_filename)
    dump_sklearn(preprocess, preprocess_filepath)

    sess = rt.InferenceSession(MODEL_FILEPATH)
    inp, out = sess.get_inputs()[0], sess.get_outputs()[0]
    print(f"input name='{inp.name}' shape={inp.shape} type={inp.type}")
    print(f"output name='{out.name}' shape={out.shape} type={out.type}")
    pred_onx = sess.run([out.name], {inp.name: np_image})

    postprocess = SoftmaxTransformer()
    postprocess_name = f"{modelname}_softmax_transformer"
    postprocess_filename = f"{postprocess_name}.pkl"
    postprocess_filepath = os.path.join(MODEL_DIR, postprocess_filename)
    dump_sklearn(postprocess, postprocess_filepath)
    prediction = postprocess.transform(np.array(pred_onx))

    print(prediction.shape)
    print(labels[np.argmax(prediction[0])])

    save_interface(
        modelname,
        os.path.join(MODEL_DIR, interface_filename),
        [1, 3, 224, 224],
        "float32",
        [1, 1000],
        "float32",
        DATA_TYPE.IMAGE,
        [{
            preprocess_filepath: MODEL_RUNTIME.SKLEARN
        }, {
            MODEL_FILEPATH: MODEL_RUNTIME.ONNX_RUNTIME
        }, {
            postprocess_filepath: MODEL_RUNTIME.SKLEARN
        }],
        PREDICTION_TYPE.CLASSIFICATION,
        "src.app.ml.resnet50_onnx.resnet50_predictor",
        label_filepath=LABEL_FILEPATH,
    )
コード例 #3
0
from src.app.ml.save_helper import save_interface, load_labels, dump_sklearn
from src.app.ml.transformers import TFImagePreprocessTransformer, SoftmaxTransformer
from src.app.ml.extract_from_tfhub import get_model

WORK_DIR = './src/app/ml/inceptionv3/'

MODEL_DIR = os.path.join(WORK_DIR, 'model')
SAVEDMODEL_DIR = os.path.join(MODEL_DIR, 'savedmodel/inceptionv3/4')
PB_FILE = os.path.join(SAVEDMODEL_DIR, 'saved_model.pb')

HUB_URL = 'https://tfhub.dev/google/imagenet/inception_v3/classification/4'

DATA_DIR = os.path.join(WORK_DIR, 'data')
SAMPLE_IMAGE = os.path.join(DATA_DIR, 'good_cat.jpg')
LABEL_FILEPATH = os.path.join(DATA_DIR, 'imagenet_labels_1001.json')
LABELS = load_labels(LABEL_FILEPATH)


def validate(image, preprocess, predictor, postprocess):
    np_image = preprocess.transform(image)
    result = predictor.predict(np_image)
    result_proba = postprocess.transform(result)
    print(result_proba)
    top1_index = np.argmax(result_proba[0], axis=-1)
    print(top1_index)
    print(LABELS[top1_index])


def main():
    os.makedirs(SAVEDMODEL_DIR, exist_ok=True)
コード例 #4
0
import os
from onnx import numpy_helper
from google.protobuf.json_format import MessageToJson

from src.app.configurations import ModelConfigurations
from src.app.constants import MODEL_RUNTIME
from src.app.ml.base_predictor import BaseData, BaseDataInterface, BaseDataConverter, BasePredictor
from src.app.ml.transformers import PytorchImagePreprocessTransformer, SoftmaxTransformer
from src.app.ml.save_helper import load_labels
from src.app.ml.resnet50_onnx_server.proto import predict_pb2, onnx_ml_pb2

import logging

logger = logging.getLogger(__name__)

LABELS = load_labels(ModelConfigurations.options['label_filepath'])
ONNX_RUNTIME_SERVER_HTTP = os.getenv('ONNX_RUNTIME_SERVER_HTTP',
                                     'prep_pred_onnx_resnet50:8001')
MODEL_NAME = os.getenv('MODEL_NAME', 'default')
VERSION = int(os.getenv('VERSION', 1))
TIMEOUT_SECOND = int(os.getenv('TIMEOUT_SECOND', 5.0))


class _Data(BaseData):
    image_data: Any = None
    test_data: str = os.path.join('./src/app/ml/resnet50_onnx/data',
                                  'good_cat.jpg')
    labels: List[str] = LABELS


class _DataInterface(BaseDataInterface):