我是靠谱客的博主 激情刺猬,这篇文章主要介绍小白都能看懂的rk3399 pro使用前言,现在分享给大家,希望可以做个参考。

前言

在ubuntu上给rk3399 pro烧录debian,并跑深度学习

1. 准备

从这里下载debian固件
从这里下载烧录工具

2. 烧录

  • 1、Type-C线连接主机端的USB接口和TB-RK3399Pro开发板的Type-C接口。
  • 2、长按TB-RK3399Pro开发板上recovery按键后重启机器,进入Loader模式。
  • 3、解压固件,将固件拷贝到linuxTool-v1.0/images目录下
  • 4、执行sudo ./flash.py -l all,如何失败执行sudo python flash.py -l all
  • 5、烧录完成后会重启,进入debian

奇怪的混入者

  • 装gedit(debian自带vim,可以不装gedit)
  • sudo apt install libgtk-3-dev
  • 配置.bashrc
    • 将ll改成ll -alF
    • 在末尾加export PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin
  • 配置pip安装路径
    • 在用户目录执行mkdir -p .pip/pip.conf
    • gedit .pip/pip.conf
    • 输入
      [global]
      index-url = https://pypi.tuna.tsinghua.edu.cn/simple
      [install]
      trusted-host=mirrors.aliyun.com

3. 更新软件

  • rknn_tooklit : pip3 install --user -U rknn
    • 如果失败可以从这里下载whl文件安装
  • rknn_api :
复制代码
1
2
3
4
5
sudo apt update --fix-missing sudo apt -y upgrade sudo apt update sudo apt install rknn-rk3399pro
  • npu_drv : 重启
  • 之后会出现libf77blas.so.3 缺失 ,执行 sudo apt-get install libatlas-base-dev
  • 其他问题可参考这里

4. 模型转换

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from rknn.api import RKNN INPUT_SIZE = 64 if __name__ == '__main__': # 创建RKNN执行对象 rknn = RKNN() # 配置模型输入,用于NPU对数据输入的预处理 # channel_mean_value='0 0 0 255',那么模型推理时,将会对RGB数据做如下转换 # (R - 0)/255, (G - 0)/255, (B - 0)/255。推理时,RKNN模型会自动做均值和归一化处理 # reorder_channel=’0 1 2’用于指定是否调整图像通道顺序,设置成0 1 2即按输入的图像通道顺序不做调整 # reorder_channel=’2 1 0’表示交换0和2通道,如果输入是RGB,将会被调整为BGR。如果是BGR将会被调整为RGB #图像通道顺序不做调整 rknn.config(channel_mean_value='0 0 0 255', reorder_channel='0 1 2') # 加载TensorFlow模型 # tf_pb='digital_gesture.pb'指定待转换的TensorFlow模型 # inputs指定模型中的输入节点 # outputs指定模型中输出节点 # input_size_list指定模型输入的大小 print('--> Loading model') rknn.load_tensorflow(tf_pb='digital_gesture.pb', inputs=['input_x'], outputs=['probability'], input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]]) print('done') # 创建解析pb模型 # do_quantization=False指定不进行量化 # 量化会减小模型的体积和提升运算速度,但是会有精度的丢失 print('--> Building model') rknn.build(do_quantization=False) print('done') # 导出保存rknn模型文件 rknn.export_rknn('./digital_gesture.rknn') # Release RKNN Context rknn.release()

5. 模型推理

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import numpy as np from PIL import Image from rknn.api import RKNN # 解析模型的输出,获得概率最大的手势和对应的概率 def get_predict(probability): data = probability[0][0] data = data.tolist() max_prob = max(data) return data.index(max_prob), max_prob; def load_model(): # 创建RKNN对象 rknn = RKNN() # 载入RKNN模型 print('-->loading model') rknn.load_rknn('./digital_gesture.rknn') print('loading model done') # 初始化RKNN运行环境 print('--> Init runtime environment') ret = rknn.init_runtime(target='rk3399pro') if ret != 0: print('Init runtime environment failed') exit(ret) print('done') return rknn def predict(rknn): im = Image.open("7.jpg") # 加载图片 im = im.resize((416, 416),Image.ANTIALIAS) # 图像缩放到64x64 mat = np.asarray(im.convert('RGB')) # 转换成RGB格式 outputs = rknn.inference(inputs=[mat]) # 运行推理,得到推理结果 #pred, prob = get_predict(outputs) # 将推理结果转化为可视信息 #print(prob) print(outputs) if __name__=="__main__": rknn = load_model() predict(rknn) rknn.release()

6. Toolkit

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from rknn.api import RKNN import numpy as np import cv2 from warnings import simplefilter simplefilter(action='ignore', category=FutureWarning) # 初始化 RKNN 对象 rknn = RKNN() # 获取设备列表 rknn.list_devices() # RKNN 模型配置 rknn.config(channel_mean_value='0 0 0 255', reorder_channel='0 1 2') # 加载darknet模型 ret = rknn.load_darknet(model='./tiny-yolo-voc.cfg', weight='./tiny-yolo-voc_best.weights') if ret != 0: print('Load failed!') exit(ret) # 构建 RKNN 模型 ret = rknn.build(do_quantization=True, dataset='./dataset.txt', pre_compile=False) if ret != 0: print('Build failed!') exit(ret) # 导出 RKNN 模型 #ret = rknn.export_rknn('./tiny-yolo-voc.rknn') # 加载 RKNN 模型 #ret = rknn.load_rknn(path='./tiny-yolo-voc.rknn') img = cv2.imread('./7.jpg') img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) shrink = cv2.resize(img, (416,416), interpolation=cv2.INTER_AREA) # 初始化运行时环境 ret = rknn.init_runtime(perf_debug=True, eval_mem=True) # 使用模型对输入进行推理 #outputs = rknn.inference(inputs=[shrink]) # 对模型性能进行评估 #rknn.eval_perf(inputs=[shrink], is_print=True) # 获取内存使用情况 #memory_detail = rknn.eval_memory()

7. 遇到的问题

  • 1、E Only support ntb mode on ARM64 platform. But can not find device with ntb mode.
    • ret = rknn.init_runtime(target=‘rk3399pro’)去掉参数,或target=‘rk1808’,很迷的参数
  • 2、E RKNNAPI: rknn_init, msg_load_ack fail, ack = 1(ACK_FAIL), expect 0(ACK_SUCC)!
    E RKNNAPI: ==============================================
    E RKNNAPI: RKNN VERSION:
    E RKNNAPI: API: 1.3.2 (9eebd73 build: 2020-04-02 15:30:36)
    E RKNNAPI: DRV: 1.3.1 (6ebb4d7 build: 2020-01-02 09:37:58)
    E RKNNAPI: ==============================================
    E Catch exception when init runtime!
    E Traceback (most recent call last):
    E File “rknn/api/rknn_base.py”, line 1067, in rknn.api.rknn_base.RKNNBase.init_runtime
    E File “rknn/api/rknn_runtime.py”, line 326, in rknn.api.rknn_runtime.RKNNRuntime.build_graph
    E Exception: RKNN init failed. error code: RKNN_ERR_MODEL_INVALID
    E Current device id is: None
    E Devices connected:
    E [‘9cd15daa2683fa8f’]
    Init runtime environment failed
    • 模型中有不支持的op

最后

以上就是激情刺猬最近收集整理的关于小白都能看懂的rk3399 pro使用前言的全部内容,更多相关小白都能看懂的rk3399内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部