Toybrick

[ rknn-api ] C++接口模型推理耗时异常

771488533

注册会员

积分
174
发表于 2019-3-14 14:33:10    查看: 9045|回复: 9 | [复制链接]    打印 | 显示全部楼层
本帖最后由 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
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

771488533

注册会员

积分
174
 楼主| 发表于 2019-3-14 15:35:27 | 显示全部楼层
意外发现一个bug,运行测试程序后,执行一段时间,重复调用 rknn_query(ctx, RKNN_QUERY_PERF_RUN, &perf_run, sizeof(perf_run)) 这个函数后,
会阻塞住,导致程序停止运行
回复

使用道具 举报

771488533

注册会员

积分
174
 楼主| 发表于 2019-3-15 09:08:39 | 显示全部楼层
Can anybody help me?
回复

使用道具 举报

jefferyzhang

版主

积分
12851
发表于 2019-5-23 17:00:39 | 显示全部楼层
不好意思,之前的rknn api 有一些bug,请问现在1.0.0的api有解决这些问题么?
并且我们官方也做了mtcnn的直播,可以供大家参考
回复

使用道具 举报

zhaolegaoli

注册会员

积分
58
发表于 2019-5-23 18:42:54 | 显示全部楼层
MTCNN 啊   640x480  CPU 跑都能达到30fps了、、、、
回复

使用道具 举报

zhaolegaoli

注册会员

积分
58
发表于 2019-5-23 18:45:59 | 显示全部楼层
cpu 用双大核跑。。。640x480 稳稳的 跑完P, R,O 网络能40ms。。
回复

使用道具 举报

zhaolegaoli

注册会员

积分
58
发表于 2019-5-23 18:48:24 | 显示全部楼层
后来这个问题处理了吗
回复

使用道具 举报

771488533

注册会员

积分
174
 楼主| 发表于 2019-5-24 09:22:38 | 显示全部楼层
本帖最后由 771488533 于 2019-5-24 09:24 编辑
zhaolegaoli 发表于 2019-5-23 18:48
后来这个问题处理了吗

改用海思芯片后解决了
回复

使用道具 举报

771488533

注册会员

积分
174
 楼主| 发表于 2019-5-24 09:26:56 | 显示全部楼层
jefferyzhang 发表于 2019-5-23 17:00
不好意思,之前的rknn api 有一些bug,请问现在1.0.0的api有解决这些问题么?
并且我们官方也做了mtcnn的直 ...

你们官方的MTCNN sample能否实时自己有点数吗
回复

使用道具 举报

Linda.Guo

新手上路

积分
43
发表于 2020-12-14 20:34:27 | 显示全部楼层
你的是怎么运行起来的?能不能给我说一下配置啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表