MNN中Python示例

MNN中Python示例

MNNConvert工具轉換

/home/xxx/work/sdk/MNN/build/MNNConvert -f ONNX --modelFile ./models/pfld.onnx --MNNModel ./models/pfld.mnn --bizCode biz

python示例

import MNN
import cv2
import numpy as np
import time

def process(image_data, size):
    image_resize = cv2.resize(image_data, size).astype(float)
    input_data = np.array(image_resize)
    input_data = input_data.transpose((2, 0, 1))  # HWC --> CHW
    input_data = np.expand_dims(input_data, 0)
    return input_data


def inference(model_path, input_format, input_data):

    interpreter = MNN.Interpreter(model_path)
    session = interpreter.createSession()
    input_tensor = interpreter.getSessionInput(session)
    # 獲取輸入維度
    print(input_tensor.getShape())

    # NCHW : MNN.Tensor_DimensionType_Caffe
    # NC4HW : MNN.Tensor_DimensionType_Caffe_C4
    # NHWC : MNN.Tensor_DimensionType_Tensorflow
    tmp_input = MNN.Tensor(input_format, MNN.Halide_Type_Float, input_data, MNN.Tensor_DimensionType_Caffe)
    start_time = time.time()
    input_tensor.copyFrom(tmp_input)
    interpreter.runSession(session)
    infer_result = interpreter.getSessionOutput(session)
    end_time = time.time()
    print("infer time %s ms " % str((end_time - start_time) * 1000))
    # 獲取輸出維度
    print(infer_result.getShape())
    output_data = infer_result.getData()
    return output_data


if __name__ == "__main__":
    model_path = 'models/pfld.mnn'
    image_path = 'test_keypoint.jpg'
    resize = (112, 112)
    input_format = (1, 3, 112, 112)
    image_data = cv2.imread(image_path)
    input_data = process(image_data, resize)

    start_time = time.time()
    output_data = inference(model_path, input_format, input_data)
    end_time = time.time()
    print("handle time %s ms " % str((end_time - start_time) * 1000))
    print(output_data)
    print("Done!")

推理引擎的默認輸入格式是NCHW, 若模型輸入格式是NHWC的,在推理之前推理引擎自動地將數據由NCHW格式轉爲NHWC格式 !!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章