Toybrick

rockx_object_detect 出错后如何处理

jpbillzhou

注册会员

积分
84
楼主
发表于 2019-10-10 00:48:30    查看: 30727|回复: 12 | [复制链接]    打印 | 只看该作者
我现在正使用rockx的库函数来做目标检测。
我使用的函数是rockx_object_detect. 这个函数开始时工作很好,但是当运行2个小时后,我发现rockx_object_detect 返回-1. 也就是说detect 出错啦。
我想问一下我应该如何做才能让它工作正常?
回复

使用道具 举报

jpbillzhou

注册会员

积分
84
沙发
 楼主| 发表于 2019-10-10 00:50:39 | 只看该作者
我的意思是,当发现出错后如何做?
回复

使用道具 举报

jpbillzhou

注册会员

积分
84
板凳
 楼主| 发表于 2019-10-10 00:56:07 | 只看该作者
rknn api 的版本是:0.9.9
rknn drv 的版本是:0.9.9
回复

使用道具 举报

jefferyzhang

版主

积分
13580
地板
发表于 2019-10-10 08:36:05 | 只看该作者
我没有遇到过该问题,检查下你代码是不是有东西没释放造成内存溢出了。
回复

使用道具 举报

jpbillzhou

注册会员

积分
84
5#
 楼主| 发表于 2019-10-10 23:58:54 | 只看该作者
我是这样做的:
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

注册会员

积分
84
6#
 楼主| 发表于 2019-10-11 00:16:09 | 只看该作者
另外,当 rockx_object_detect 失败后, rockx_destroy 也会失败。我看到npu_transfer_pr还在运行,它占用cpu usage.
回复

使用道具 举报

jpbillzhou

注册会员

积分
84
7#
 楼主| 发表于 2019-10-11 05:28:57 | 只看该作者
我发现, 当rockx_object_detect 失败后, 我的另外一个函数 rknn_input_set 也失败了,返回值是-3.
好像rknn内部出问题啦。
回复

使用道具 举报

jefferyzhang

版主

积分
13580
8#
发表于 2019-10-14 11:27:37 | 只看该作者
我怀疑是npu内部内存泄漏。

1. 送进去的图能否缩小到300x300后再送试试,当前版本NPU硬件缩放还没弄好,还是软件缩放的,所以效率有点低
2. 初看过去代码单线程运行没有其他问题,可能就是input数据太大npu溢出了
3. 多线程时候object_det_handle 是一个还是三个,对于多线程,必须每个线程有一个自己的object_det_handle,否则就有可能处理出问题。
回复

使用道具 举报

jefferyzhang

版主

积分
13580
9#
发表于 2019-10-14 11:32:00 | 只看该作者
还有你回复时候点我这楼的“回复”按钮,否则论坛不会提示我有回复
回复

使用道具 举报

jpbillzhou

注册会员

积分
84
10#
 楼主| 发表于 2019-10-16 00:52:48 | 只看该作者
jefferyzhang 发表于 2019-10-14 11:32
还有你回复时候点我这楼的“回复”按钮,否则论坛不会提示我有回复

我用300X300尺寸测试一下,还是一样的问题。我怀疑NPU内部有BUG。在管理 rknn_context时,有问题。或者在运算时出现问题,导致rknn_context丢失。
现象是: 长时间运行出错。
回复

使用道具 举报

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

本版积分规则

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


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