Toybrick

标题: [ rknn-api ] C++接口模型推理耗时异常 [打印本页]

作者: 771488533    时间: 2019-3-14 14:33
标题: [ rknn-api ] C++接口模型推理耗时异常
本帖最后由 771488533 于 2019-3-14 14:58 编辑

使用mtcnn 的p-net模型做人脸检测,在开发板上面运行,打开 RKNN_FLAG_COLLECT_PERF_MASK 标志位获得
NPU的运算时间为 6320 us,使用c++的计时器返回的模型推理时间为14.00ms左右,实际推理耗时接近NPU运算时间的2倍多,
请说明是C++模型推理接口的BUG问题,还是调用推理接口本身会耗时8ms左右时间? mtcnn人脸检测会产生大量候选框,会重复
调用模型推理接口,目前耗时较长,640*480输入大小图片情况下无法做到实时检测

运行后打印log:

  1. p_net detetion cost time: 14.000000 ms.
  2. perf_run.run_duration = 6320 us
  3. perf_run.perf_data =
  4. Layer id:         Name:         Operation id:         Operator:         Target:         Time(us):
  5.   0  ConvolutionReluPoolingLayer2  0   CONVOLUTION    NN          552  
  6.   1  com vivantecorp extension vxcParametricRelu  0 unkown operation type    SH          725  
  7.   2  PoolingLayer2  0   POOLING    TP          232  
  8.   3  ConvolutionReluPoolingLayer2  0   CONVOLUTION    NN          619  
  9.   4  com vivantecorp extension vxcParametricRelu  0 unkown operation type    SH          455  
  10.   5  ConvolutionReluPoolingLayer2  0   CONVOLUTION    NN         1477  
  11.   6  com vivantecorp extension vxcParametricRelu  0 unkown operation type    SH          702  
  12.   7  ConvolutionReluPoolingLayer2  0   CONVOLUTION    NN          216  
  13.   8  ConvolutionReluPoolingLayer2  0   CONVOLUTION    NN          214  
  14.   9  SoftmaxLayer  0   SOFTMAX    SH          244  
复制代码
推理时间计时:

  1.         double start = ti.elapsedMilliSeconds();
  2.         ret = rknn_inputs_set(ctx, 1, inputs);
  3.         if(ret < 0) {
  4.             printf("rknn_input_set fail! ret=%d\n", ret);
  5.             return -1;
  6.         }

  7.         ret = rknn_run(ctx, nullptr);
  8.         if(ret < 0) {
  9.             printf("rknn_run fail! ret=%d\n", ret);
  10.             return -1;
  11.         }

  12.         outputs[0].want_float = true;
  13.         outputs[0].is_prealloc = false;
  14.         outputs[1].want_float = true;
  15.         outputs[1].is_prealloc = false;
  16.         ret = rknn_outputs_get(ctx, 2, outputs, nullptr);
  17.         if(ret < 0) {
  18.             printf("rknn_outputs_get fail! ret=%d\n", ret);
  19.             return -1;
  20.         }
  21.         double stop = ti.elapsedMilliSeconds();
  22.         printf("p_net detetion cost time: %f ms.\n",stop - start);
复制代码


测试代码见附件
编译方式:
  1. mkdir build
  2. cd build
  3. cmake ../
  4. make
复制代码




作者: 771488533    时间: 2019-3-14 15:35
意外发现一个bug,运行测试程序后,执行一段时间,重复调用 rknn_query(ctx, RKNN_QUERY_PERF_RUN, &perf_run, sizeof(perf_run)) 这个函数后,
会阻塞住,导致程序停止运行
作者: 771488533    时间: 2019-3-15 09:08
Can anybody help me?
作者: jefferyzhang    时间: 2019-5-23 17:00
不好意思,之前的rknn api 有一些bug,请问现在1.0.0的api有解决这些问题么?
并且我们官方也做了mtcnn的直播,可以供大家参考
作者: zhaolegaoli    时间: 2019-5-23 18:42
MTCNN 啊   640x480  CPU 跑都能达到30fps了、、、、
作者: zhaolegaoli    时间: 2019-5-23 18:45
cpu 用双大核跑。。。640x480 稳稳的 跑完P, R,O 网络能40ms。。
作者: zhaolegaoli    时间: 2019-5-23 18:48
后来这个问题处理了吗
作者: 771488533    时间: 2019-5-24 09:22
本帖最后由 771488533 于 2019-5-24 09:24 编辑
zhaolegaoli 发表于 2019-5-23 18:48
后来这个问题处理了吗

改用海思芯片后解决了
作者: 771488533    时间: 2019-5-24 09:26
jefferyzhang 发表于 2019-5-23 17:00
不好意思,之前的rknn api 有一些bug,请问现在1.0.0的api有解决这些问题么?
并且我们官方也做了mtcnn的直 ...

你们官方的MTCNN sample能否实时自己有点数吗
作者: Linda.Guo    时间: 2020-12-14 20:34
你的是怎么运行起来的?能不能给我说一下配置啊?




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3