Toybrick

标题: rockx_object_detect 出错后如何处理 [打印本页]

作者: jpbillzhou    时间: 2019-10-10 00:48
标题: rockx_object_detect 出错后如何处理
我现在正使用rockx的库函数来做目标检测。
我使用的函数是rockx_object_detect. 这个函数开始时工作很好,但是当运行2个小时后,我发现rockx_object_detect 返回-1. 也就是说detect 出错啦。
我想问一下我应该如何做才能让它工作正常?

作者: jpbillzhou    时间: 2019-10-10 00:50
我的意思是,当发现出错后如何做?
作者: jpbillzhou    时间: 2019-10-10 00:56
rknn api 的版本是:0.9.9
rknn drv 的版本是:0.9.9
作者: jefferyzhang    时间: 2019-10-10 08:36
我没有遇到过该问题,检查下你代码是不是有东西没释放造成内存溢出了。
作者: jpbillzhou    时间: 2019-10-10 23:58
我是这样做的:
rockx_handle_t object_det_handle;
rockx_image_t input_image;
rockx_object_array_t object_array;

ret= rockx_create(&object_det_handle,ROCKX_MODULE_OBJECT_DETECTION,nullptr,0);
if(ret!=ROCKX_RET_SUCCESS){
   return;
}
input_image.pixel_format=ROCKX_PIXEL_FORMAT_BGR888);
input_image.data=(uinit8_t)malloc(1920*1080*3);

while(true){
      Mat frame;
     capture >> frame;
     input_image.width=frame.cols;
     input_image.height=frame.rows;
     memcopy(input_image.data,frame.data,frame.cols*frame.rows*3);
     memset(&object_array,0,sizeof(rockx_object_array_t);
     ret=rockx_object_detect(object_det_handle,&input_image,&object_array,nullptr);
     if(ret!=ROCKX_RET_SUCCESS){
           .....
      }
}
free(input_image.data);
rockx_destroy(object_det_handle);

你认为以上代码有问题?
什么情况下,rockx_object_detect 会返回-1?

我有3个线程同时执行以上代码。
作者: jpbillzhou    时间: 2019-10-11 00:16
另外,当 rockx_object_detect 失败后, rockx_destroy 也会失败。我看到npu_transfer_pr还在运行,它占用cpu usage.
作者: jpbillzhou    时间: 2019-10-11 05:28
我发现, 当rockx_object_detect 失败后, 我的另外一个函数 rknn_input_set 也失败了,返回值是-3.
好像rknn内部出问题啦。
作者: jefferyzhang    时间: 2019-10-14 11:27
我怀疑是npu内部内存泄漏。

1. 送进去的图能否缩小到300x300后再送试试,当前版本NPU硬件缩放还没弄好,还是软件缩放的,所以效率有点低
2. 初看过去代码单线程运行没有其他问题,可能就是input数据太大npu溢出了
3. 多线程时候object_det_handle 是一个还是三个,对于多线程,必须每个线程有一个自己的object_det_handle,否则就有可能处理出问题。
作者: jefferyzhang    时间: 2019-10-14 11:32
还有你回复时候点我这楼的“回复”按钮,否则论坛不会提示我有回复
作者: jpbillzhou    时间: 2019-10-16 00:52
jefferyzhang 发表于 2019-10-14 11:32
还有你回复时候点我这楼的“回复”按钮,否则论坛不会提示我有回复

我用300X300尺寸测试一下,还是一样的问题。我怀疑NPU内部有BUG。在管理 rknn_context时,有问题。或者在运算时出现问题,导致rknn_context丢失。
现象是: 长时间运行出错。
作者: jefferyzhang    时间: 2019-10-16 08:12
jpbillzhou 发表于 2019-10-16 00:52
我用300X300尺寸测试一下,还是一样的问题。我怀疑NPU内部有BUG。在管理 rknn_context时,有问题。或者在 ...

我们测试部烤鸡都是48小时起步的,暂时没有查到有汇报过该问题。
我找个人再单独测一次
作者: jpbillzhou    时间: 2019-10-29 22:05
我用rknn-api进行openpose移植时也遇到这个问题。如果使用openpose的COCO网络结构, 当系统运行几个小时后  rknn_outputs_get函数会出错,返回值是-3.
但是,如果简化openpose 的网络结构,减少网络深度,我发现系统运行正常。 没有发现rknn_outputs_get函数出错情况。
所以我认为RKNN-API在管理网络结构时有BUG。
作者: jefferyzhang    时间: 2019-10-30 08:33
jpbillzhou 发表于 2019-10-29 22:05
我用rknn-api进行openpose移植时也遇到这个问题。如果使用openpose的COCO网络结构, 当系统运行几个小时后  ...

我认为会不会是你硬件有问题。。。。
比如rknnapi,我更怀疑你硬件问题,因为已经有很多客户大量量产使用了,从来没有反馈过你这个问题,
用的最狠的客户做车载的同时跑了6个不同的模型,都没像你这样过。

请提供下以下内容,我直接用我们板子帮你试试:

1. 你使用的板子是什么型号,SN号是多少?
2. 发一下你烤鸡测试的代码,我直接用你代码在我们板子上试试。




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