Toybrick

楼主: ecjon

在3399pro上的linux用python来rknn.inference,循环多几次卡死

karbon

注册会员

积分
62
11#
发表于 2019-2-2 22:29:06 | 只看该作者
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

注册会员

积分
62
12#
发表于 2019-2-9 19:05:30 | 只看该作者
楼主后来解决这个问题了吗
回复

使用道具 举报

ecjon

新手上路

积分
37
13#
 楼主| 发表于 2019-2-12 14:47:52 | 只看该作者
karbon 发表于 2019-2-9 19:05
楼主后来解决这个问题了吗

还没解决
回复

使用道具 举报

yhc

注册会员

积分
177
14#
发表于 2019-2-13 15:56:03 | 只看该作者
可以更新rknn-toolkit的新版本试试,旧版本好像有这个bug
回复

使用道具 举报

slim

注册会员

积分
82
15#
发表于 2019-2-14 07:47:51 | 只看该作者
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.
回复

使用道具 举报

程子

中级会员

积分
386
16#
发表于 2019-2-14 11:19:08 | 只看该作者
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
回复

使用道具 举报

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

本版积分规则

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


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