Toybrick

标题: RK3588 PythonSDK + rknntoolkit-lite 推理的 SampleCode [打印本页]

作者: jefferyzhang    时间: 2023-2-8 15:30
标题: RK3588 PythonSDK + rknntoolkit-lite 推理的 SampleCode
本帖最后由 jefferyzhang 于 2023-2-9 09:03 编辑

Note:

1. 因为3588 PythonSDK是按最高性能设计,其中很多操作是0拷贝的实现,不像其他Python库返回都是多次拷贝,所以会产生很多逻辑陷阱。
2. 本示例从HDMI-IN获取数据,缩放后送入RKNNLite推理,并显示
3. 主要展示容易出问题的asarray()的用法,因为是0拷贝的实现,必须要保证源变量没有被析构,否则他所指向的内存就已经被释放了
4. 送入rknn前先缩放成模型输入尺寸避免性能消耗,这里由于rknnlite参数是numpy array类型,在rknn内部会有一次memcpy无法避免。


  1. from rknnlite.api import RKNNLite
  2. import toybrick as toy
  3. import numpy as np

  4. def init_rknn(model):
  5.     rknn_lite = RKNNLite()
  6.     ret = rknn_lite.load_rknn(model)
  7.     if ret != 0:
  8.         print('Load RKNN model failed')
  9.     exit(ret)

  10.     print('--> Init runtime environment')
  11.     ret = rknn_lite.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2)
  12.     if ret != 0:
  13.         print('Init runtime environment failed')
  14.         exit(ret)
  15.     print('done')

  16.     return rknn_lite

  17. if __name__ == '__main__':
  18.     rknn = init_rknn('./model.rknn')

  19.     hdmi = toy.HdmiCapture()
  20.     disp = toy.Display('', 1920, 1080, False)
  21.     print("Connect display width = " + str(disp.width) + " ; height = " + str(disp.height))

  22.     while True:
  23.         ret, frame = hdmi.read(1920, 1080, toy.FMT_RGB888)
  24.         if frame is not None:
  25.             img = frame.resize(320, 320)  # 这里的img是一个dma buffer
  26.             npimg = img.asarray()  # 必须要单独再用一个变量,保证img变量引用计数不会为0,因为这里的asarray是0拷贝构造,如果img被析构,npimg指向的内存空间就是错的了
  27.             outputs = rknn.inference(inputs=[npimg])
  28.             print(outputs)
复制代码




作者: mike841211    时间: 2023-3-21 08:44
为什么toybrick 不搞个面向通用的一个包呢?只能在toybrick的板上用
作者: jefferyzhang    时间: 2023-3-21 08:47
mike841211 发表于 2023-3-21 08:44
为什么toybrick 不搞个面向通用的一个包呢?只能在toybrick的板上用

对外发布的EdgeSDK里都包含该包,但我们是toybrick论坛,我们当然只维护toybrick板子,其他板子请联系板商支持。
作者: dff    时间: 2023-8-4 17:29
环境:
rknn_toolkit2 1.4.0
rknn_toolkit_lite2-1.4.0-cp39
rknn driver 0.8.2
根据官方链接:https://gitee.com/yanyitech/rknn ... xamples/onnx/yolov5,在PC上模型测试时转换、推理都正常。将转换出的未做量化的yolov5s.rknn上传到板子上,与pc端推理结果相比,利用rknn_toolkit_lite2推理的结果置信度普遍变高了,原本0.5、0.6、0.7的置信度变成了0.9以上,这种情况不正常吧? 可能是什么情况导致的?500张图片量化后的模型也有这个问题,麻烦帮忙解答一下。
作者: hiCrystal    时间: 2023-8-28 14:20
jefferyzhang 发表于 2023-3-21 08:47
对外发布的EdgeSDK里都包含该包,但我们是toybrick论坛,我们当然只维护toybrick板子,其他板子请联系板 ...

请问PythonSDK必须是板商在固件上支持吗?可以在刷好系统的板子自己安装PythonSDK吗?
作者: jefferyzhang    时间: 2023-8-28 15:35
hiCrystal 发表于 2023-8-28 14:20
请问PythonSDK必须是板商在固件上支持吗?可以在刷好系统的板子自己安装PythonSDK吗? ...

PythonSDK是开放免费用的,
但我们只对toybrick板子和edge sdk编写和测试,其他板子我们没办法顾及,
如果你移过去能用那就可以,但环境不一致以及硬件不同等各种问题造成不能正常使用的话我们也没办法。
作者: hiCrystal    时间: 2023-8-29 11:19
jefferyzhang 发表于 2023-8-28 15:35
PythonSDK是开放免费用的,
但我们只对toybrick板子和edge sdk编写和测试,其他板子我们没办法顾及,
如 ...

请问PythonSDK的源代码开放吗?如果其他板子想要支持PythonSDK是不是只能在编译固件时就要操作?
作者: jefferyzhang    时间: 2023-8-29 11:26
hiCrystal 发表于 2023-8-29 11:19
请问PythonSDK的源代码开放吗?如果其他板子想要支持PythonSDK是不是只能在编译固件时就要操作? ...

不开放
作者: hiCrystal    时间: 2023-8-30 09:50
jefferyzhang 发表于 2023-8-29 11:26
不开放

目前的系统不支持PythonSDK, 如果要使用必须要重新编译系统吗?




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