概述
前言
在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 :
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. 模型转换
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. 模型推理
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
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 pro使用前言所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复