添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • setSessionHint(mode, value)
  • getSessionInput(session, |tensorName)
  • getSessionInputAll(session)
  • getSessionOutput(session, |tensorName)
  • getSessionOutputAll(session)
  • resizeTensor(tensor, shape)
  • resizeSession(session)
  • runSession(session)
  • runSessionWithCallBack(session, begin_callback, end_callback)
  • runSessionWithCallBackInfo(session, begin_callback, end_callback)
  • cache()
  • removeCache()
  • Example
  • MNN.Session
  • MNN.OpInfo
  • MNN.Tensor
  • MNN.CVImageProcess
  • MNN.CVMatrix
  • expr.Var
  • nn._Module
  • nn.RuntimeManager
  • optim.Optimizer
  • data.Dataset
  • data.DataLoader
  • model_path:str MNN模型所放置的完整文件路径,其中MNN模型可由Tensorflow、Caffe、PyTorch和 ONNX等模型进行转换得到

  • 返回:Interpreter对象

    返回类型: Interpreter

    createRuntime(config)

    根据配置创建一个Runtime,并获取config中指定的参数是否生效;默认情况下,在 createSession 时对应create单独一个Runtime。对于串行的一系列模型,可以先单独创建Runtime,然后在各Session创建时传入,使各模型用共享同样的运行时资源(对CPU而言为线程池、内存池,对GPU而言Kernel池等),参考 RuntimeManager

  • config:dict 创建Runtime的配置, 其key, value和含义如下变所示

  • backend str or int 可选值: "CPU"或0 (默认), "OPENCL"或3 , "OPENGL"或6 , "VULKAN"或7 , "METAL"或1 , "TRT"或9 , "CUDA"或2 , "HIAI"或8 precision 可选值: "normal" (默认), "low" , "high","lowBF" numThread int or long value 为推理线程数,只在 CPU 后端下起作用 saveTensors tuple of str value 为想要保留成为输出层的 tensorName inputPaths tuple of str 推理路径的起点,输入 tensorName outputPaths tuple of str 推理路径的终点,输出 tensorName

    返回:一个 pair

  • first:Runtime对象的 PyCapsule ,可以用来创建Session

  • second:为 tuple of bool ;代表config中对应的配置是否生效

  • 返回类型: pair

    createSession(config, |runtime)

    根据配置创建 Session ,返回一个 Session 对象。

  • config:dict 创建推理会话的配置,含义同 createRuntime 方法

  • runtime:PyCapsule 指定的runtime信息,如果不指定,则使用config中的配置创建runtime

  • 返回:持有推理会话数据的Session对象

    返回类型: Session

    setCacheFile(cache_path)

    设置缓存文件路径,在GPU情况下可以把kernel和Op-info缓存到该文件中

  • cache_path:str 缓存文件的路径

  • 返回: None

    返回类型: None

    setExternalFile(path)

    设置额外数据文件路径,使用该文件中的数据作为权重或常量

  • path:str 额外数据文件的路径

  • 返回: None

    返回类型: None

    updateCacheFile(session, flag)

    在执行推理之后,更新GPU的kernel信息到缓存文件;应该在每次推理结束后指定该函数

  • session:Session 需要缓存的会话

  • flag 保留参数,目前未使用;输入 0 即可

  • 返回:error code 参考 runSession 方法

    返回类型: int

    setSessionMode(mode)

    设置会话的执行模式

  • mode:int 执行Session的模式,含义如下表所示

  • getSessionInput(session, |tensorName)

    根据tensorName,返回模型指定会话的输入tensor;如果没有指定tensor名称,则返回第一个输入tensor

  • session:Session 持有推理会话数据的Session对象

  • tensorName:str Tensor的名称

  • 返回:输入Tensor对象

    返回类型: Tensor

    getSessionInputAll(session)

    返回模型指定会话的所有的输入tensor

  • session:Session 持有推理会话数据的Session对象

  • 返回:所有的输入Tensor对象,类型为字典,其中key为tensorName,类型为str;value为一个输入tensor,类型为Tensor

    返回类型: dict

    getSessionOutput(session, |tensorName)

    根据tensorName,返回模型指定会话的输出tensor;如果没有指定tensor名称,则返回第一个输出tensor

  • session:Session 持有推理会话数据的Session对象

  • tensorName:str Tensor的名称

  • 返回:输出Tensor对象

    返回类型: Tensor

    getSessionOutputAll(session)

    返回模型指定会话的所有的输出tensor

  • session:Session 持有推理会话数据的Session对象

  • 返回:所有的输出Tensor对象,类型为字典,其中key为tensorName,类型为str;value为一个输入tensor,类型为Tensor

    返回类型: dict

    resizeTensor(tensor, shape)

    改变tensor形状,并重新分配内存

  • tensor:Tensor 需要改变形状的Tensor对象,一般为输入tensor

  • shape:tuple 新的形状,元素类型为 int

  • 返回: None

    返回类型: None

    resizeSession(session)

    为session分配内存,进行推理准备工作;该API一般配合 resizeTensor 一起调用,修改Tensor输入形状后对应整个推理过程中的内存分配也需要修改。

  • session:Session 改变输入形状后需要重新分配内存的Session对象

  • 返回:成功返回True,否则抛出相应的异常

    返回类型: bool

    runSession(session)

    运行session执行模型推理,返回对应的error code,需要根据错误码来判断后续是否成功执行模型推理

  • session:Session 执行推理的Session对象

  • 返回:错误码,具体含义如下表

    value

    runSessionWithCallBack(session, begin_callback, end_callback)

    该API本质上与runSession一致,但是提供了用户hook函数的接口,在运行session做网络推理,每层推理前前后会执行的begin_callback和end_callback 并根据返回值来决定是否继续执行

  • session:Session 执行推理的Session对象

  • begin_callback:function|lambda 每层推理前执行的回调函数,函数原型为:

    def begin_callback(tensors, name):
        # do something
        return True
    
  • tensors:[Tensor] 该层的输入tensor

  • name:str 该层的名称 返回:True继续执行推理,False停止执行推理 返回类型:bool

  • end_callback:function|lambda 每层推理后执行的回调函数,函数原型同上

  • 返回:同runSession

    返回类型:int

    runSessionWithCallBackInfo(session, begin_callback, end_callback)

    该API与runSessionWithCallBack相似,但是回调函数中增加了Op的类型和计算量信息,可以用来评估模型的计算量

  • session:Session 执行推理的Session对象

  • begin_callback:function|lambda 每层推理前执行的回调函数,函数原型为:

    def begin_callback(tensors, opinfo):
        # do something
        return True
    
  • tensors:[Tensor] 该层的输入tensor

  • opinfo:OpInfo 该层Op的相关信息,参考OpInfo 返回:True继续执行推理,False停止执行推理 返回类型:bool

  • end_callback:function|lambda 每层推理后执行的回调函数,函数原型同上

  • 返回:同runSession

    返回类型:int

    cache()

    将该Interpreter存储到当前线程的缓存中,以便多次使

    返回:None

    返回类型:None

    removeCache()

    将该Session从当前线程的缓存中移除

    返回:None

    返回类型:None

    Example

    import MNN
    import MNN.cv as cv
    import MNN.numpy as np
    # 创建interpreter
    interpreter = MNN.Interpreter("mobilenet_v1.mnn")
    # 创建session
    session = interpreter.createSession()
    # 获取会话的输入输出张量
    input_tensor = interpreter.getSessionInput(session)
    output_tensor = interpreter.getSessionOutput(session)
    # 将输入resize到[1, 3, 224, 224]
    interpreter.resizeTensor(input_tensor, (1, 3, 224, 224))
    # 读取图片,转换为size=(224, 224), dtype=float32,并赋值给input_tensor
    image = cv.imread('cat.jpg')
    image = cv.resize(image, (224, 224), mean=[103.94, 116.78, 123.68], norm=[0.017, 0.017, 0.017])
    # HWC to NHWC
    image = np.expand_dims(image, 0)
    tmp_input = MNN.Tensor(image)
    input_tensor.copyFrom(tmp_input)
    # 执行会话推理
    interpreter.runSession(session)
    # 将输出结果拷贝到tmp_output中
    tmp_output = MNN.Tensor((1, 1001), MNN.Halide_Type_Float, MNN.Tensor_DimensionType_Caffe)
    output_tensor.copyToHostTensor(tmp_output)
    # 打印出分类结果, 282为猫
    print("output belong to class: {}".format(np.argmax(tmp_output.getData())))
    
  •