1.前言
官方论坛说明
V1.6.0 主要说明:
- 支持Keras框架,并且支持TF 2.0导出的h5模型
- 支持Pytorch 1.6.0
- 支持ONNX 1.6.0
- 增加模型加密功能
- 新增更多OP支持以及Bug修复
Drv需要更新到 >= 1.5.0
V1.4.0 主要说明:
- 增加逐层量化分析子功能;
- 输入预处理支持多个std_value;
- 支持从开发板导出预编译模型。
- 优化channel_mean_value参数,改为mean_values/std_values;
- 移除load_tensorflow接口中的mean_values和std_values;
- 可视化完善对多输入的支持,增加对RK1806/RV1109/RV1126的支持;
- 精度分析功能增加非归一化的余弦距离和欧式距离;
- 修复已知bug。
V1.3.0 主要说明:
- 从该版本开始我们建议各位切换到debian10,并且直接使用apt和pip命令进行在线更新即可(计算棒dnf update)。
- rk3399prod Fedora不再支持rknn在线更新,请各位尽早切换到debian10使用。
- 该版本主要更新了pytorch(1.2)和mxnet的模型支持
- 该版本新增了RKNN的UI显示功能(具体请看文档)
V1.2.0 主要说明:
- 建议添加RK官方pip源安装,较为方便,开发版、PC、MAC均可使用该源下载rknn-toolkit。(新版固件会自带该源)
- Tensorflow for aarch64已纳入该官方pip源,可直接安装。
- Tensorflow 2.0 由于一些第三方库还未支持,目前rknn暂不支持tf2.0,请勿升级使用。
- rknntoolkit和rknnapi需要版本匹配,模型如果早于rknntoolkit 1.1以前生成的需要重新生成,否则运行可能会出问题。
API: 1.2.1
DRV: 0.9.9/1.2.0
简单来说,可以理解为:
支持tensorflow1(keras)、pytorch、mxnet开发;
模型可以在PC(linux)、开发板、mac上编译运行;
本次安装最新版本是rknn-toolkit-1.3.2
2.PC-ubuntu系统下tensorflow+keras虚拟环境搭建
如果你刚开始使用tensorflow或者keras,或者还没有安装建议参看一下我前面讲解安装相关的内容:
注意:建议安装python3.6.3的版本,太高和太低的版本都会和torch1.6或者rknn系列多多少少有一些不必要的麻烦
(建议使用linux版本,因为win无法正常安装rknn-api;mac只是支持转化模型、不支持模型推理过程)
3.在PC-ubuntu下搭建rknn模拟环境搭建
在安装完成tensorflow1.14之后,rknn模型需要安装相关支持的软件:
(这个因为我是新安装的anaconda虚拟环境,所以缺少的比较多,此处都记录下来。如果你环境中已经有的话,自行选择缺少的安装包安装)
(建议在自己的虚拟环境中安装)
pip install ruamel.yaml==0.15.81 flatbuffers==1.10 flask==1.0.2 lmdb==0.93 requests==2.22.0 onnx==1.6.0 numpy==1.16.3 dill==0.2.8.2 networkx==1.11 Pillow==5.3.0 ply==3.11 h5py==2.8.0 psutil==5.6.2 protobuf==3.11.2 scipy==1.3.0 onnx-tf==1.2.1
最后才是安装RKNN
pip install rknn-toolkit -i http://repo.rock-chips.com/pypi/simple --trusted-host repo.rock-chips.com
4.相关转化代码
(1) h5 -> tflite
(2) tflite -> rknn
或者其他实例,在搭建好的PC-UBUNTU系统上,将自己的模型转化成相关.rknn文件。
下面以官方demo(mobilenet-v1)为例,说明tflite -> rknn模型转化。
import numpy as np
import cv2
from rknn.api import RKNN
def show_outputs(outputs):
output = outputs[0][0]
output_sorted = sorted(output, reverse=True)
top5_str = 'mobilenet_v1n-----TOP 5-----n'
for i in range(5):
value = output_sorted
index = np.where(output == value)
for j in range(len(index)):
if (i + j) >= 5:
break
if value > 0:
topi = '{}: {}n'.format(index[j], value)
else:
topi = '-1: 0.0n'
top5_str += topi
print(top5_str)
if __name__ == '__main__':
# Create RKNN object
rknn = RKNN()
# pre-process config
print('--> config model')
rknn.config(channel_mean_value='127.5 127.5 127.5 127.5', reorder_channel='0 1 2')
print('done')
# Load tensorflow model
print('--> Loading model')
ret = rknn.load_tflite(model='./mobilenet_v1.tflite')
if ret != 0:
print('Load mobilenet_v1 failed!')
exit(ret)
print('done')
# Build model
print('--> Building model')
ret = rknn.build(do_quantization=True, dataset='./dataset.txt', pre_compile=False)
if ret != 0:
print('Build mobilenet_v1 failed!')
exit(ret)
print('done')
# Export rknn model
print('--> Export RKNN model')
ret = rknn.export_rknn('./mobilenet_v1.rknn')
if ret != 0:
print('Export mobilenet_v1.rknn failed!')
exit(ret)
print('done')
# Set inputs
img = cv2.imread('./dog_224x224.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# init runtime environment
print('--> Init runtime environment')
ret = rknn.init_runtime()
if ret != 0:
print('Init runtime environment failed')
exit(ret)
print('done')
# Inference
print('--> Running model')
outputs = rknn.inference(inputs=[img])
show_outputs(outputs)
print('done')
# perf
print('--> Begin evaluate model performance')
perf_results = rknn.eval_perf(inputs=[img])
print('done')
rknn.release()
5.rknn板子上运行demo
在rknn3399 pro板子上初步运行(此处使用的是mobilenet v1)直接运行如下文件,即可:
import numpy as np
import cv2
from rknn.api import RKNN
def show_outputs(outputs):
output = outputs[0][0]
output_sorted = sorted(output, reverse=True)
top5_str = 'mobilenet_v1n-----TOP 5-----n'
for i in range(5):
value = output_sorted
index = np.where(output == value)
for j in range(len(index)):
if (i + j) >= 5:
break
if value > 0:
topi = '{}: {}n'.format(index[j], value)
else:
topi = '-1: 0.0n'
top5_str += topi
print(top5_str)
if __name__ == '__main__':
# Create RKNN object
rknn = RKNN()
# pre-process config
print('--> config model')
rknn.config(channel_mean_value='127.5 127.5 127.5 127.5', reorder_channel='0 1 2')
print('done')
# Load tensorflow model(加载自己在PC上生成的RKNN文件,直接使用)
print('--> Loading model')
ret = rknn.load_rknn(model='./mobilenet_v1.rknn')
if ret != 0:
print('Load mobilenet_v1 failed!')
exit(ret)
print('done')
# Set inputs
img = cv2.imread('./dog_224x224.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# init runtime environment
print('--> Init runtime environment')
ret = rknn.init_runtime()
if ret != 0:
print('Init runtime environment failed')
exit(ret)
print('done')
# Inference
print('--> Running model')
outputs = rknn.inference(inputs=[img])
show_outputs(outputs)
print('done')
# perf
print('--> Begin evaluate model performance')
perf_results = rknn.eval_perf(inputs=[img])
print('done')
rknn.release()
1.前言
官方论坛说明
V1.6.0 主要说明:
- 支持Keras框架,并且支持TF 2.0导出的h5模型
- 支持Pytorch 1.6.0
- 支持ONNX 1.6.0
- 增加模型加密功能
- 新增更多OP支持以及Bug修复
Drv需要更新到 >= 1.5.0
V1.4.0 主要说明:
- 增加逐层量化分析子功能;
- 输入预处理支持多个std_value;
- 支持从开发板导出预编译模型。
- 优化channel_mean_value参数,改为mean_values/std_values;
- 移除load_tensorflow接口中的mean_values和std_values;
- 可视化完善对多输入的支持,增加对RK1806/RV1109/RV1126的支持;
- 精度分析功能增加非归一化的余弦距离和欧式距离;
- 修复已知bug。
V1.3.0 主要说明:
- 从该版本开始我们建议各位切换到debian10,并且直接使用apt和pip命令进行在线更新即可(计算棒dnf update)。
- rk3399prod Fedora不再支持rknn在线更新,请各位尽早切换到debian10使用。
- 该版本主要更新了pytorch(1.2)和mxnet的模型支持
- 该版本新增了RKNN的UI显示功能(具体请看文档)
V1.2.0 主要说明:
- 建议添加RK官方pip源安装,较为方便,开发版、PC、MAC均可使用该源下载rknn-toolkit。(新版固件会自带该源)
- Tensorflow for aarch64已纳入该官方pip源,可直接安装。
- Tensorflow 2.0 由于一些第三方库还未支持,目前rknn暂不支持tf2.0,请勿升级使用。
- rknntoolkit和rknnapi需要版本匹配,模型如果早于rknntoolkit 1.1以前生成的需要重新生成,否则运行可能会出问题。
API: 1.2.1
DRV: 0.9.9/1.2.0
简单来说,可以理解为:
支持tensorflow1(keras)、pytorch、mxnet开发;
模型可以在PC(linux)、开发板、mac上编译运行;
本次安装最新版本是rknn-toolkit-1.3.2
2.PC-ubuntu系统下tensorflow+keras虚拟环境搭建
如果你刚开始使用tensorflow或者keras,或者还没有安装建议参看一下我前面讲解安装相关的内容:
注意:建议安装python3.6.3的版本,太高和太低的版本都会和torch1.6或者rknn系列多多少少有一些不必要的麻烦
(建议使用linux版本,因为win无法正常安装rknn-api;mac只是支持转化模型、不支持模型推理过程)
3.在PC-ubuntu下搭建rknn模拟环境搭建
在安装完成tensorflow1.14之后,rknn模型需要安装相关支持的软件:
(这个因为我是新安装的anaconda虚拟环境,所以缺少的比较多,此处都记录下来。如果你环境中已经有的话,自行选择缺少的安装包安装)
(建议在自己的虚拟环境中安装)
pip install ruamel.yaml==0.15.81 flatbuffers==1.10 flask==1.0.2 lmdb==0.93 requests==2.22.0 onnx==1.6.0 numpy==1.16.3 dill==0.2.8.2 networkx==1.11 Pillow==5.3.0 ply==3.11 h5py==2.8.0 psutil==5.6.2 protobuf==3.11.2 scipy==1.3.0 onnx-tf==1.2.1
最后才是安装RKNN
pip install rknn-toolkit -i http://repo.rock-chips.com/pypi/simple --trusted-host repo.rock-chips.com
4.相关转化代码
(1) h5 -> tflite
(2) tflite -> rknn
或者其他实例,在搭建好的PC-UBUNTU系统上,将自己的模型转化成相关.rknn文件。
下面以官方demo(mobilenet-v1)为例,说明tflite -> rknn模型转化。
import numpy as np
import cv2
from rknn.api import RKNN
def show_outputs(outputs):
output = outputs[0][0]
output_sorted = sorted(output, reverse=True)
top5_str = 'mobilenet_v1n-----TOP 5-----n'
for i in range(5):
value = output_sorted
index = np.where(output == value)
for j in range(len(index)):
if (i + j) >= 5:
break
if value > 0:
topi = '{}: {}n'.format(index[j], value)
else:
topi = '-1: 0.0n'
top5_str += topi
print(top5_str)
if __name__ == '__main__':
# Create RKNN object
rknn = RKNN()
# pre-process config
print('--> config model')
rknn.config(channel_mean_value='127.5 127.5 127.5 127.5', reorder_channel='0 1 2')
print('done')
# Load tensorflow model
print('--> Loading model')
ret = rknn.load_tflite(model='./mobilenet_v1.tflite')
if ret != 0:
print('Load mobilenet_v1 failed!')
exit(ret)
print('done')
# Build model
print('--> Building model')
ret = rknn.build(do_quantization=True, dataset='./dataset.txt', pre_compile=False)
if ret != 0:
print('Build mobilenet_v1 failed!')
exit(ret)
print('done')
# Export rknn model
print('--> Export RKNN model')
ret = rknn.export_rknn('./mobilenet_v1.rknn')
if ret != 0:
print('Export mobilenet_v1.rknn failed!')
exit(ret)
print('done')
# Set inputs
img = cv2.imread('./dog_224x224.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# init runtime environment
print('--> Init runtime environment')
ret = rknn.init_runtime()
if ret != 0:
print('Init runtime environment failed')
exit(ret)
print('done')
# Inference
print('--> Running model')
outputs = rknn.inference(inputs=[img])
show_outputs(outputs)
print('done')
# perf
print('--> Begin evaluate model performance')
perf_results = rknn.eval_perf(inputs=[img])
print('done')
rknn.release()
5.rknn板子上运行demo
在rknn3399 pro板子上初步运行(此处使用的是mobilenet v1)直接运行如下文件,即可:
import numpy as np
import cv2
from rknn.api import RKNN
def show_outputs(outputs):
output = outputs[0][0]
output_sorted = sorted(output, reverse=True)
top5_str = 'mobilenet_v1n-----TOP 5-----n'
for i in range(5):
value = output_sorted
index = np.where(output == value)
for j in range(len(index)):
if (i + j) >= 5:
break
if value > 0:
topi = '{}: {}n'.format(index[j], value)
else:
topi = '-1: 0.0n'
top5_str += topi
print(top5_str)
if __name__ == '__main__':
# Create RKNN object
rknn = RKNN()
# pre-process config
print('--> config model')
rknn.config(channel_mean_value='127.5 127.5 127.5 127.5', reorder_channel='0 1 2')
print('done')
# Load tensorflow model(加载自己在PC上生成的RKNN文件,直接使用)
print('--> Loading model')
ret = rknn.load_rknn(model='./mobilenet_v1.rknn')
if ret != 0:
print('Load mobilenet_v1 failed!')
exit(ret)
print('done')
# Set inputs
img = cv2.imread('./dog_224x224.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# init runtime environment
print('--> Init runtime environment')
ret = rknn.init_runtime()
if ret != 0:
print('Init runtime environment failed')
exit(ret)
print('done')
# Inference
print('--> Running model')
outputs = rknn.inference(inputs=[img])
show_outputs(outputs)
print('done')
# perf
print('--> Begin evaluate model performance')
perf_results = rknn.eval_perf(inputs=[img])
print('done')
rknn.release()
举报