Toybrick

反复验证,python接口的rknn不支持多线程

xiaqing10

中级会员

积分
484
发表于 2019-6-1 02:49:27    查看: 1586|回复: 2 | [复制链接]    打印 | 显示全部楼层

rknn 0.99 以及 rknn1.0 都尝试了, 单线程跑推断没任何问题,只要多线程去推断则会卡死.

那样只能把推断和后处理分线程跑,但是多个模型就只能级联不能并行了,请问这是python接口的Bug吗?


回复

使用道具 举报

xiaqing10

中级会员

积分
484
 楼主| 发表于 2019-6-1 02:52:35 | 显示全部楼层
本帖最后由 xiaqing10 于 2019-6-1 02:53 编辑

附上简单的测试代码
  1. import numpy as np
  2. import re
  3. import math
  4. import random
  5. import cv2
  6. import threading
  7. import time

  8. import logging

  9. logging.basicConfig(filename='log.log',level=logging.INFO,format='%(asctime)s %(message)s',
  10. datefmt='%m/%d/%Y %I:%M:%S %p')

  11. from rknn.api import RKNN

  12. INPUT_SIZE = 224
  13. INPUT_POSE = 224


  14. def model1():

  15.     rknn = RKNN()
  16.     rknn.load_rknn('./model.rknn')

  17.     rknn.init_runtime()

  18.     img = cv2.imread("test1.jpg")
  19.    

  20.     while True:

  21.         time.sleep(1)
  22.         img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  23.         img = cv2.resize(img, (INPUT_SIZE, INPUT_SIZE), interpolation=cv2.INTER_CUBIC)
  24.         logging.info('--> Running  age model')
  25.         [outputs] = rknn.inference(inputs=[img])
  26.         logging.info('age inference len result: '+ str(outputs))
  27.         logging.info('age inference len result: ')

  28. def model2():

  29.     rknn = RKNN()
  30.     rknn.load_rknn('./model.rknn')
  31.     rknn.init_runtime()

  32.     img = cv2.imread("test2.jpg")

  33.     while True:
  34.         time.sleep(1)

  35.         img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  36.         img = cv2.resize(img, (INPUT_POSE, INPUT_POSE), interpolation=cv2.INTER_CUBIC)
  37.         logging.info('--> Running  pose model')
  38.         [outputs] = rknn.inference(inputs=[img])
  39.         logging.info('pose inference len result: '+ str( outputs))
  40.         logging.info('pose inference len result: ')


  41. def thread1():

  42.     logging.info("start to run age thread")
  43.     t = threading.Thread( target = model1)
  44.     t.start()

  45. def thread2():

  46.     logging.info("start to run pose thread")
  47.     s = threading.Thread( target = model2)
  48.     s.start()

  49. if __name__ == '__main__':


  50.     thread1()
  51.     thread2()

  52.     while True:
  53.       
  54.         time.sleep(1)
  55.         logging.info("XXXXX")
  56.      
复制代码
代码
回复

使用道具 举报

zhangzj

超级版主

积分
948
发表于 2019-6-6 11:52:20 | 显示全部楼层
xiaqing10 发表于 2019-6-1 02:52
附上简单的测试代码代码

inference卡住是当前版本的一个bug,后续版本会修复。
多谢反馈!
回复

使用道具 举报

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

本版积分规则

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


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