Toybrick

标题: 在3399pro上的linux用python来rknn.inference,循环多几次卡死 [打印本页]

作者: ecjon    时间: 2019-1-30 09:28
标题: 在3399pro上的linux用python来rknn.inference,循环多几次卡死
在3399pro上的linux用python来rknn.inference,循环多几次卡死,你们有遇到过这个问题吗?就直接用你们的demo修改的。

作者: zhangzj    时间: 2019-1-30 09:43
代码甩出来
作者: ecjon    时间: 2019-1-30 15:57
  1. import numpy as np

  2. import re
  3. import math
  4. import random
  5. import cv2
  6. import copy
  7. import time

  8. from rknn.api import RKNN

  9. INPUT_SIZE = 300

  10. NUM_RESULTS = 1917
  11. NUM_CLASSES = 91

  12. Y_SCALE = 10.0
  13. X_SCALE = 10.0
  14. H_SCALE = 5.0
  15. W_SCALE = 5.0


  16. def expit(x):
  17.     return 1. / (1. + math.exp(-x))


  18. def load_box_priors():
  19.     box_priors_ = []
  20.     fp = open('./box_priors.txt', 'r')
  21.     ls = fp.readlines()
  22.     for s in ls:
  23.         aList = re.findall('([-+]?\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?', s)
  24.         for ss in aList:
  25.             aNum = float((ss[0]+ss[2]))
  26.             box_priors_.append(aNum)
  27.     fp.close()

  28.     box_priors = np.array(box_priors_)
  29.     box_priors = box_priors.reshape(4, NUM_RESULTS)

  30.     return box_priors


  31. if __name__ == '__main__':

  32.     # Create RKNN object
  33.     rknn = RKNN()

  34.     # Config for Model Input PreProcess
  35.     rknn.config(channel_mean_value='128 128 128 128', reorder_channel='0 1 2')

  36.     # Direct Load RKNN Model
  37.     print('--> Loading model')
  38.     rknn.load_rknn('./ssd_mobilenet_v1_coco.rknn')
  39.     print('done')

  40.     # Set inputs

  41.     webcam = cv2.VideoCapture(0)

  42.     # init runtime environment
  43.     print('--> Init runtime environment')
  44.     ret = rknn.init_runtime(host='rk3399pro')
  45.     if ret != 0:
  46.         print('Init runtime environment failed')
  47.         exit(ret)
  48.     print('done')

  49.     while True:
  50.         ref, frame = webcam.read()

  51.         orig_img = frame
  52.         img = copy.deepcopy(orig_img)
  53.         img = cv2.resize(img, (INPUT_SIZE, INPUT_SIZE), interpolation=cv2.INTER_CUBIC)

  54.         # Inference
  55.         print('--> Running model')
  56.         start = time.time()
  57.         outputs = rknn.inference(inputs=[img])
  58.         print("total time: ")
  59.         print(time.time() - start)
  60.         print('done')
  61.         # print('inference result: ', outputs)

  62.         cv2.imshow("test", orig_img)

  63.         c= cv2.waitKey(30) & 0xff
  64.         if c==27:
  65.             webcam.release()
  66.             break

  67.     # Release RKNN Context
  68.     rknn.release()
复制代码

作者: ecjon    时间: 2019-1-30 15:59
都是你们自己的东西,我只是改成了实时显示而已,另外我转换我自己的一个模型,转换出来的预测结果和我再tensorflow里面的不一样,要从哪里下手查?或者你们能够提供技术支持不?
作者: qiaoqiang126    时间: 2019-1-31 14:56
rknn api 手册里有     outputs_release 每次outputs要释放,要不然的话3次之后会内存泄漏
作者: ecjon    时间: 2019-2-1 09:56
qiaoqiang126 发表于 2019-1-31 14:56
rknn api 手册里有     outputs_release 每次outputs要释放,要不然的话3次之后会内存泄漏 ...

我这个是python版本哦是toolkit,c版本的我知道有
作者: troy    时间: 2019-2-1 12:01
ecjon 发表于 2019-2-1 09:56
我这个是python版本哦是toolkit,c版本的我知道有

把RKNN的转换代码也贴出来,interface循环推理是可以用的,我们有个rknn_camera.py就是实时显示的。从你的代码看,推理时,rknn.config是多余的,rknn.config是转换模型时使用。
而且你设置config的参数也有问题,需要和你的模型对应上。你写的channel_mean_value='128 128 128 128'好像不太对,这个效果相当于(R-128)/128.0  (G-128)/128.0 (B-128)/128.0,输入给推理的数据就已经不正确了。  
作者: ecjon    时间: 2019-2-1 12:04
troy 发表于 2019-2-1 12:01
把RKNN的转换代码也贴出来,interface循环推理是可以用的,我们有个rknn_camera.py就是实时显示的。从你 ...

模型什么的都是用的官方提供的ssd的demo的啊,均值也是,我只不过在官方demo里面加了个循环,你对比下官方发demo的mobilenet_ssd就知道了
作者: ecjon    时间: 2019-2-1 12:11
troy 发表于 2019-2-1 12:01
把RKNN的转换代码也贴出来,interface循环推理是可以用的,我们有个rknn_camera.py就是实时显示的。从你 ...

你实时的demo方便发给我参考下吗?
作者: troy    时间: 2019-2-1 14:43
ecjon 发表于 2019-2-1 12:11
你实时的demo方便发给我参考下吗?

可以参考下,RK3399Pro 中文手势识别例程的帖子,附件里面有代码
作者: karbon    时间: 2019-2-2 22:29
troy 发表于 2019-2-1 12:01
把RKNN的转换代码也贴出来,interface循环推理是可以用的,我们有个rknn_camera.py就是实时显示的。从你 ...

我这个代码也是照着example里改的 也是推理4次就卡死,请看下是什么问题...
  1. import numpy as np

  2. import re
  3. import math
  4. import random
  5. import cv2
  6. import time

  7. from rknn.api import RKNN

  8. INPUT_SIZE = 300

  9. NUM_RESULTS = 1917
  10. NUM_CLASSES = 91

  11. Y_SCALE = 10.0
  12. X_SCALE = 10.0
  13. H_SCALE = 5.0
  14. W_SCALE = 5.0


  15. def expit(x):
  16.     return 1. / (1. + math.exp(-x))


  17. def load_box_priors():
  18.     box_priors_ = []
  19.     fp = open('./box_priors.txt', 'r')
  20.     ls = fp.readlines()
  21.     for s in ls:
  22.         aList = re.findall('([-+]?\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?', s)
  23.         for ss in aList:
  24.             aNum = float((ss[0]+ss[2]))
  25.             box_priors_.append(aNum)
  26.     fp.close()

  27.     box_priors = np.array(box_priors_)
  28.     box_priors = box_priors.reshape(4, NUM_RESULTS)

  29.     return box_priors


  30. if __name__ == '__main__':

  31.     # Create RKNN object
  32.     rknn = RKNN()

  33.     # Direct Load RKNN Model
  34.     print('--> Loading model')
  35.     rknn.load_rknn('./ssd_mobilenet_v1_coco.rknn')


  36.     # init runtime environment
  37.     print('--> Init runtime environment')
  38.     ret = rknn.init_runtime(host='rk3399pro')
  39.     if ret != 0:
  40.         print('Init runtime environment failed')
  41.         exit(ret)
  42.     print('done')

  43.     print('--> Running model')
  44.    
  45.     webcam = cv2.VideoCapture(0)

  46.     while True:
  47.         startTime = time.time()
  48.         # Set inputs
  49.         ret, orig_img = webcam.read()
  50.         if ret == True:
  51.             img = cv2.cvtColor(orig_img, cv2.COLOR_BGR2RGB)
  52.             img = cv2.resize(img, (INPUT_SIZE, INPUT_SIZE), interpolation=cv2.INTER_CUBIC)
  53.    
  54.             # Inference
  55.             outputs = rknn.inference(inputs=[img])
  56.             print('done')
  57.             
  58.             predictions = outputs[1].reshape((1, NUM_RESULTS, 4))
  59.             outputClasses = outputs[0].reshape((1, NUM_RESULTS, NUM_CLASSES))

  60.             box_priors = load_box_priors()

  61.             # Post Process
  62.             for i in range(0, NUM_RESULTS):
  63.                 ycenter = predictions[0][i][0] / Y_SCALE * box_priors[2][i] + box_priors[0][i]
  64.                 xcenter = predictions[0][i][1] / X_SCALE * box_priors[3][i] + box_priors[1][i]
  65.                 h = math.exp(predictions[0][i][2] / H_SCALE) * box_priors[2][i]
  66.                 w = math.exp(predictions[0][i][3] / W_SCALE) * box_priors[3][i]

  67.                 ymin = ycenter - h / 2.
  68.                 xmin = xcenter - w / 2.
  69.                 ymax = ycenter + h / 2.
  70.                 xmax = xcenter + w / 2.

  71.                 predictions[0][i][0] = ymin
  72.                 predictions[0][i][1] = xmin
  73.                 predictions[0][i][2] = ymax
  74.                 predictions[0][i][3] = xmax

  75.                 topClassScore = -1000
  76.                 topClassScoreIndex = -1

  77.                 # Skip the first catch-all class.
  78.                 for j in range(1, NUM_CLASSES):
  79.                     score = expit(outputClasses[0][i][j])

  80.                     if score > topClassScore:
  81.                         topClassScoreIndex = j
  82.                         topClassScore = score
  83.                     if topClassScore > 0.4:
  84.                         detection = (
  85.                             predictions[0][i][1] * INPUT_SIZE,
  86.                             predictions[0][i][0] * INPUT_SIZE,
  87.                             predictions[0][i][3] * INPUT_SIZE,
  88.                             predictions[0][i][2] * INPUT_SIZE)
  89.                         xmin = detection[0]
  90.                         ymin = detection[1]
  91.                         xmax = detection[2]
  92.                         ymax = detection[3]
  93.                         # print("%d @ (%d, %d) (%d, %d) score=%f" % (topClassScoreIndex, xmin, ymin, xmax, ymax, topClassScore))
  94.                         cv2.rectangle(orig_img, (int(xmin), int(ymin)), (int(xmax), int(ymax)),
  95.                                       (random.random()*255, random.random()*255, random.random()*255), 3)

  96.             print(time.time() - startTime)
  97.             cv2.imshow('ssd-mobilenet',orig_img)
  98.          
  99.         if cv2.waitKey(1) == ord('q'):
  100.             webcam.release()
  101.             rknn.release()
  102.             break
复制代码

作者: karbon    时间: 2019-2-9 19:05
楼主后来解决这个问题了吗
作者: ecjon    时间: 2019-2-12 14:47
karbon 发表于 2019-2-9 19:05
楼主后来解决这个问题了吗

还没解决
作者: yhc    时间: 2019-2-13 15:56
可以更新rknn-toolkit的新版本试试,旧版本好像有这个bug
作者: slim    时间: 2019-2-14 07:47
yhc 发表于 2019-2-13 15:56
可以更新rknn-toolkit的新版本试试,旧版本好像有这个bug

I have the same problem and I'm running v0.9.7. Where can I find the latest version? Thanks.
作者: 程子    时间: 2019-2-14 11:19
slim 发表于 2019-2-14 07:47
I have the same problem and I'm running v0.9.7. Where can I find the latest version? Thanks.

链接: https://pan.baidu.com/s/1ypkndmI7P62W8DWf0AW5ew 提取码: qhhy




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