def main(): os.makedirs(SAVEDMODEL_DIR, exist_ok=True) if os.path.exists(PB_FILE): print(f"saved model {SAVEDMODEL_DIR} found") model = tf.keras.models.load_model(SAVEDMODEL_DIR) else: print(f"saved model {SAVEDMODEL_DIR} not found") model = get_model(HUB_URL, (224, 224, 3)) preprocess = TFImagePreprocessTransformer(image_size=(224, 224), prediction_shape=(1, 224, 224, 3)) postprocess = SoftmaxTransformer() image = Image.open(SAMPLE_IMAGE) validate(image, preprocess, model, postprocess) tf.saved_model.save(model, SAVEDMODEL_DIR) modelname = "mobilenetv2_plant" interface_filename = f"{modelname}.yaml" preprocess_filename = f"{modelname}_preprocess_transformer.pkl" postprocess_filename = f"{modelname}_softmax_transformer.pkl" preprocess_filepath = os.path.join(MODEL_DIR, preprocess_filename) postprocess_filepath = os.path.join(MODEL_DIR, postprocess_filename) dump_sklearn(preprocess, preprocess_filepath) dump_sklearn(postprocess, postprocess_filepath) save_interface( modelname, os.path.join(MODEL_DIR, interface_filename), [1, 224, 224, 3], "float32", [1, 2102], "float32", DATA_TYPE.IMAGE, [{ preprocess_filepath: MODEL_RUNTIME.SKLEARN }, { SAVEDMODEL_DIR: MODEL_RUNTIME.TF_SERVING }, { postprocess_filepath: MODEL_RUNTIME.SKLEARN }], PREDICTION_TYPE.CLASSIFICATION, "src.app.ml.mobilenetv2_plant.mobilenetv2_predictor", label_filepath=LABEL_FILEPATH, model_spec_name="mobilenetv2_plant", model_spec_signature_name="serving_default", input_name="input_1", output_name="keras_layer", )
def main(): os.makedirs(SAVEDMODEL_DIR, exist_ok=True) if os.path.exists(PB_FILE): print(f'saved model {SAVEDMODEL_DIR} found') model = tf.keras.models.load_model(SAVEDMODEL_DIR) else: print(f'saved model {SAVEDMODEL_DIR} not found') model = get_model(HUB_URL, (299, 299, 3)) preprocess = TFImagePreprocessTransformer() postprocess = SoftmaxTransformer() image = Image.open(SAMPLE_IMAGE) validate(image, preprocess, model, postprocess) tf.saved_model.save(model, SAVEDMODEL_DIR) modelname = 'inceptionv3' interface_filename = f'{modelname}.yaml' preprocess_filename = f'{modelname}_preprocess_transformer.pkl' postprocess_filename = f'{modelname}_softmax_transformer.pkl' preprocess_filepath = os.path.join(MODEL_DIR, preprocess_filename) postprocess_filepath = os.path.join(MODEL_DIR, postprocess_filename) dump_sklearn(preprocess, preprocess_filepath) dump_sklearn(postprocess, postprocess_filepath) save_interface(modelname, os.path.join(MODEL_DIR, interface_filename), [1, 299, 299, 3], 'float32', [1, 1001], 'float32', DATA_TYPE.IMAGE, [{ preprocess_filepath: MODEL_RUNTIME.SKLEARN }, { SAVEDMODEL_DIR: MODEL_RUNTIME.TF_SERVING }, { postprocess_filepath: MODEL_RUNTIME.SKLEARN }], PREDICTION_TYPE.CLASSIFICATION, 'src.app.ml.inceptionv3.inceptionv3_predictor', label_filepath=LABEL_FILEPATH, model_spec_name='inceptionv3', model_spec_signature_name='serving_default', input_name='input_1', output_name='keras_layer')
def test_dump_sklearn(mocker): mocker.patch('joblib.dump', return_value=None) save_helper.dump_sklearn("", "test.pkl")
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, )