环境
- ubuntu 18.04 64位
- python 3.6
- rockchip 1808开发板
前言
当我们在服务上训练好了需要的模型,直接拿到 RK1808 上是无法使用的,不过不用担心,RKNN 为我们准备一系列的方法,可以实现模型的转换(支持 pytorch、darknet、tensorflow、onnx、caffe等),在得到了新的模型后,就可以在 Rk1808 上进行推理了。
RKNN的工作流
模型转换流程图

模型推理流程图

示例
为了方便调试,rknn 允许使用 python 代码在本地运行,通过 usb 连接开发板,在开发板上进行推理,这一点非常的赞。
首先确保开发板的 USB OTG 连接到电脑,并且使用 adb 命令能够正确识别到设备
adb devices

device左侧的那一串字符,就代表了一个具体的设备,这串字符,后面需要用到。如果系统中没有 adb 的话,可以通过下面命令安装
sudo apt-get install android-tools-adb
最后,我们来跑一个 yolov3 目标检测示例看看
cd external/rknn-toolkit/examples/darknet/yolov3
然后修改 test.py,将其中的
ret = rknn.init_runtime()
改为
# 这个 device_id 就是命令 adb devices 中的输出
ret = rknn.init_runtime(target='rk1808', device_id='ab762efff1fc0a6d')
完成后,执行程序
python test.py
代码的输出如下
--> Export RKNN model
done
--> init runtime
I NPUTransfer: Starting NPU Transfer Client, Transfer version 2.1.0 (b5861e7@2020-11-23T11:50:36)
D RKNNAPI: ==============================================
D RKNNAPI: RKNN VERSION:
D RKNNAPI: API: 1.6.0 (79320de build: 2020-12-29 10:56:36)
D RKNNAPI: DRV: 1.6.0 (159d2d3 build: 2021-01-12 15:23:09)
D RKNNAPI: ==============================================
done
--> inference
done
class: dog , score: 0.9984240531921387
box coordinate left,top,right,down: [0.15907743573188782, 0.3982541859149933, 0.41815564781427383, 0.9366545379161835]
class: bicycle, score: 0.994162380695343
box coordinate left,top,right,down: [0.17587044835090637, 0.2151646614074707, 0.7186601907014847, 0.7535650134086609]
class: truck , score: 0.9291886687278748
box coordinate left,top,right,down: [0.6193466782569885, 0.14440925419330597, 0.8981928321031424, 0.2938774534716056]
测试图片中的几个目标都被检测出来了
