模型推理

hbDNNInferV2

int32_t hbDNNInferV2(hbUCPTaskHandle_t *taskHandle, hbDNNTensor *output, hbDNNTensor const *input, hbDNNHandle_t dnnHandle);

根据输入参数创建同步/异步推理任务。对于异步任务,调用方可以跨函数、跨线程使用返回的 taskHandle

  • 参数
    • [out] taskHandle 任务句柄指针。
    • [in/out] output 推理任务的输出。
    • [in] input 推理任务的输入。
    • [in] dnnHandle DNN句柄指针。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
注解
  1. 如果 taskHandle 置为 nullptr,则会自动创建同步任务,接口返回即推理完成。

  2. 如果 *taskHandle 置为 nullptr,则会自动创建异步任务,接口返回的 taskHandle 可用于后续阻塞或回调。

  3. 如果 *taskHandle 非空,并且指向之前已经创建但未提交的任务,则会自动创建新任务并添加进来。

最多支持同时存在32个模型任务。

hbDNNRoiInferV2

int32_t hbDNNRoiInferV2(hbUCPTaskHandle_t *taskHandle, hbDNNTensor *output, hbDNNTensor const *input, hbDNNRoi *rois, int32_t roiCount, hbDNNHandle_t dnnHandle);

根据输入参数创建ROI同步/异步推理任务。对于异步任务,调用方可以跨函数、跨线程使用返回的 taskHandle

  • 参数
    • [out] taskHandle 任务句柄指针。
    • [in/out] output 推理任务的输出。
    • [in] input 推理任务的输入。
    • [in] rois Roi框信息。
    • [in] roiCount Roi框数量。
    • [in] dnnHandle dnn句柄指针。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
注解

概念说明:

  • input_count:模型输入分支数量。
  • output_count:模型输出分支数量。
  • resizer_count:模型输入源为resizer的分支数量(≤input_count),每一个resizer输入源都需要对应一个roi。
  • roiCount:Roi框数量,其数值应为 resizer_count 的整数倍。
  • data_batch:模型需要推理的数据批数,其数值为 roiCount / resizer_count
  • input:推理任务的输入,其数量应为 input_count * data_batch
  • output:推理任务的输出,其数量与output_count 一致,每个输出所需申请的内存为模型对应张量所需内存的 data_batch 倍。

输入/输出示例说明:

以较为复杂的多输入模型为例,假设模型有3个输入分支(2个resizer输入源,1个ddr输入源)和 1 个输出分支,模型共需处理3批数据共6个roi(即每批数据有2个roi),那么现有如下信息:

  • input_count = 3
  • output_count = 1
  • resizer_count = 2
  • roiCount = 6
  • data_batch = roiCount / resizer_count = 3
  • input = input_count * data_batch = 9
  • output = output_count = 1

另假设模型输入/输出的静态信息如下:

  • 模型输入(model_info):

    • tensor_0_resizer: [1, 3, 128, 128]
    • tensor_1_resizer: [1, 3, 256, 256]
    • tensor_2_ddr: [1, 80, 1, 100]
  • 模型输出(model_info):

    • tensor_out: [1, 100, 1, 56]

那么模型在推理时的动态信息则为:

  • 模型输入( input ):
    • [1x3x128x128, 1x3x256x256, 1x80x1x100, 1x3x128x128, 1x3x256x256, 1x80x1x100, 1x3x128x128, 1x3x256x256, 1x80x1x100]
  • 模型输出( output ):
    • [3x100x1x56]

接口限制说明:

  • 使用该接口提交任务时应提前将 taskHandle 置为 nullptr,除非是给指定 taskHandle 追加任务。
  • 原图尺寸要求是 1<=W<=40961 < = W < = 409632<=stride<=13107232 < = stride < = 131072stride 必须是32的倍数。
  • roi 尺寸要求是不能超出输入图像边界,此限制后续版本会放宽。
  • 输出尺寸要求是 2<=Wout2 < = Wout, 2<=Hout2 < = Hout
  • roi的尺寸和输出尺寸整体要求是 widthheight+WoutHout<1.5MBwidth * height + Wout * Hout < 1.5MB,此限制后续版本会放宽。
  • roi缩放倍数限制 0<=step<=2293750 < = step < = 229375,step计算公式 step=(src_len65536+dst_len/2)/dst_lenstep = (src\_len*65536 + dst\_len/2)/dst\_len,其中src_len为roi的W或H,dst_len为模型要求的W或H。
  • 最多支持同时存在32个模型任务。