MNN中Python示例

3 篇文章 0 订阅
3 篇文章 0 订阅

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的,在推理之前推理引擎自动地将数据由NHWC格式转为NCHW格式 !!!
模型输入格式是NHWC,则input_format = (1, 112, 112, 3)
模型输入格式是NCHW,则input_format = (1, 3, 112, 112)
但是ONNX模型的推理引擎输入格式构建方式依旧为MNN.Tensor_DimensionType_Caffe),而不是MNN.Tensor_DimensionType_Tensorflow。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值