1 模型转换

特别说明:以下内容参考来自rknn官网文档 Rockchip_User_Guide_RKNN_Toolkit2_CN-1.3.0.pdf。如有侵权告知删除。

完整代码放在github上。代码

1.1 工具链(RKNN-Toolkit2)

  RKNN 工具链提供了两种按照方式,一种是“通过 pip install 安装”和“通过 Docker 镜像安装”,建议“通过 Docker 镜像安装”。具体安装方式参考提供的官方文档。工具链百度云盘下载路径,提取码:rknn

  RKNN-Toolkit2 目前支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等 模型的加载转换,这些模型在加载时需调用对应的接口,以下为这些接口的详细说明。官方工具链:https://github.com/rockchip-linux/rknn-toolkit2

1.2 通过Docker镜像安装

# 镜像 load
docker load -i rknn-toolkit2-1.3.0-cp36-docker.tar.gz
# 启动镜像
sudo docker run -v `pwd`/rknn_model_convert:/data -it rknn-toolkit2:1.3.0-cp36 /bin/bash

1.3 模型转换

1)模型初始化

# 将详细的日志信息输出到屏幕,并写到 mobilenet_build.log 文件中
rknn = RKNN(verbose=True, verbose_file='./mobilenet_build.log') # 只在屏幕打印详细的日志信息
rknn = RKNN(verbose=True)

2)配置不同参数

# mean_values 通道均值
# std_values 方差, rknn是除以方差
# quant_img_RGB2BGR 该参数是将量化图片格式又RGB转换为BGR,通常caffe训练的模型需要这个操作
# quantized_algorithm 量化算法,normal 和 mmse, 不写该参数默认值为 normal, 其中:normal 量化速度快(推荐量化数据量一般为 20-100 张左右,更多的数据量下精度未必会有进一步提升), mmse 量化速度慢(推荐量化数据量一般为 20-50 张左右), 精度稍微比normal保持的好
# quantized_method 量化方法 channel, layer可选; layer:每层的 weight 只有一套量化参数; channel:每层的 weight 的每个通道都有一套量化参数。默认使用channel
# target_platform 可以用来配置不同的芯片, 目前支持 rk3566、rk3568、rk3588、rv1103、rv1106, 该参数的值大小写不敏感。rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], quant_img_RGB2BGR=True, quantized_algorithm='normal', quantized_method='channel', target_platform='rk3566')
  1. 模型加载
# RKNN-Toolkit2 目前支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等 模型的加载转换# 从当前路径加载 mobilenet_v2 的 caffe 模型
ret = rknn.load_caffe(model='./mobilenet_v2.prototxt', blobs='./mobilenet_v2.caffemodel')# 从当前目录加载 mobilenet_v2 的 onnx 模型,outputs 为 onnx输出层的名字(outputs可不写)
ret = rknn.load_onnx(model = './mobilenet_v2.onnx', outputs=['output1', 'output2', 'output3'])

4)构建 RKNN 模型

# 构建 RKNN 模型
# do_quantization 是否做量化(不做量化为float16)
# dataset 为量化图片的路径
# rknn_batch_size 为 batch_size 默认值为1(可以不写),建议 batch_size 小于 32
ret = rknn.build(do_quantization=True, dataset='./data.txt', rknn_batch_size=1)

5)导出 RKNN 模型

# 将构建好的 RKNN 模型保存到当前路径的 mobilenet_v1.rknn 文件中
ret = rknn.export_rknn(export_path='./mobilenet_v1.rknn')

6)加载 RKNN 模型

# 从当前路径加载 mobilenet_v1.rknn 模型
ret = rknn.load_rknn(path='./mobilenet_v1.rknn')

7)初始化运行时环境

# target 目标硬件平台,rk3566、rk3568、rk3588、rv1103、rv1106, 默认只为None。在 PC 使用工具时,模型在模拟器上运行,需要配置成None(或不配置该参数)。
# device_id:设备编号,如果 PC 连接多台设备时,需要指定该参数,设备编号可以通 过 list_devices 接口查看。默认值为 None。
# perf_debug:进行性能评估时是否开启 debug 模式。在 debug 模式下,可以获取到每 一层的运行时间,否则只能获取模型运行的总时间。默认值为 False。
# eval_mem:是否进入内存评估模式。进入内存评估模式后,可以调用 eval_memory 接口获取模型运行时的内存使用情况。默认值为 False。
ret = rknn.init_runtime(target=None, device_id=None, perf_debug=False, eval_mem=False)
  1. 模型推理
# inputs:待推理的输入,如经过 cv2 处理的图片。格式是 ndarray list。
# data_format:数据模式,可以填以下值:nchw, nhwc。默认值为nhwc。只对 4 维的输入有效。
# inputs_pass_through:将输入透传给 NPU 驱动。非透传模式下,在将输入传给 NPU 驱动之前,工具会对输入进行减均值、除方差等操作;而透传模式下,不会做这些 操作。这个参数的值是一个数组,比如要透传 input0,不透传 input1,则这个参数的 值为[1, 0]。默认值为 None,即对所有输入都不透传。
outputs = rknn.inference(inputs=[img])

9)模型性评估(模型必须运行板子上)

# 对模型性能进行评估
rknn.eval_perf(inputs=[image], is_print=True)
  1. 获取内存使用情况(模型必须运行板子上)
# 对模型内存使用情况进行评估
memory_detail = rknn.eval_memory()

11) 查询 SDK 版本(模型必须运行板子上)

# 获取 SDK 版本信息
sdk_version = rknn.get_sdk_version()
print(sdk_version)

1-8步的完整代码

import os
import sys
import numpy as np
import cv2
from rknn.api import RKNNONNX_MODEL = 'yolov5.onnx'
RKNN_MODEL = 'yolov5.rknn'DATASET = './dataset.txt'
QUANTIZE_ON = Truedef export_rknn_inference(img):# Create RKNN objectrknn = RKNN(verbose=True)# pre-process configprint('--> Config model')rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], quantized_algorithm='normal', quantized_method='channel', target_platform='rk3566')print('done')# Load ONNX modelprint('--> Loading model')ret = rknn.load_onnx(model=ONNX_MODEL, outputs=['output1', 'output2', 'output3'])if ret != 0:print('Load model failed!')exit(ret)print('done')# Build modelprint('--> Building model')ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET, rknn_batch_size=1)if ret != 0:print('Build model failed!')exit(ret)print('done')# Export RKNN modelprint('--> Export rknn model')ret = rknn.export_rknn(RKNN_MODEL)if ret != 0:print('Export rknn model failed!')exit(ret)print('done')# Init runtime environmentprint('--> Init runtime environment')ret = rknn.init_runtime(target=None, device_id=None, perf_debug=True)# ret = rknn.init_runtime(target='rk3566')if ret != 0:print('Init runtime environment failed!')exit(ret)print('done')# Inferenceprint('--> Running model')outputs = rknn.inference(inputs=[img])rknn.release()print('done')return outputsif __name__ == '__main__':print('This is main ....')# Set inputsimg_path = 'test.jpg'model_input_w = 512model_input_h = 512origimg = cv2.imread(img_path)origimg = cv2.cvtColor(origimg, cv2.COLOR_BGR2RGB)img = cv2.resize(origimg, (model_input_w , model_input_h ))outputs = export_rknn_inference(img)# 后处理'''........'''

测试RKNN提供的yolov5示例

1.4 转换代码+模型+测试图片+检测后处理

完整代码放在github上。代码

参考文档

[1] Rockchip_User_Guide_RKNN_Toolkit2_CN-1.3.0.pdf

瑞芯微RKNN模型转换和PC端仿真相关推荐

  1. 地平线Horizon模型转换和PC端仿真测试

    特别说明:参考地平线的官方文档,如有侵权告知删,谢谢. 完整转换代码参见github.代码 1 工具链   地平线工具链支持使用Docker和手工安装两种方式,"地平线强烈建议使用 Dock ...

  2. yolov8 瑞芯微RKNN和地平线Horizon芯片仿真测试部署

    特别说明:参考官方开源的yolov8代码.瑞芯微官方文档.地平线的官方文档,如有侵权告知删,谢谢. 模型和完整仿真测试代码,放在github上参考链接 模型和代码. 跟上技术的步伐,yolov8 首个 ...

  3. yolov7 瑞芯微RKNN和地平线Horizon芯片仿真测试部署

    特别说明:参考官方开源的yolov7代码.瑞芯微官方文档.地平线的官方文档,如有侵权告知删,谢谢. 模型和完整仿真测试代码,放在github上参考链接 模型和代码. 1 模型和训练   训练代码参考官 ...

  4. yolov8seg 瑞芯微RKNN芯片、地平线Horizon芯片、TensorRT部署

      特别说明:参考官方开源的yolov8代码.瑞芯微官方文档.地平线的官方文档,如有侵权告知删,谢谢.   模型.测试图像.测试结果.完整代码,放在github上,参考链接 模型和代码.   由于之前 ...

  5. yolov8 瑞芯微 RKNN 的 C++部署

       上一篇博客 yolov8 瑞芯微RKNN和地平线Horizon芯片仿真测试部署 写了在rknn模型的转换与PC端仿真测试,有网友希望写一篇在板子上部署的博文和开源提供C++代码.这一篇基于rkn ...

  6. 瑞芯微 rknn 移植记录

    ​​​​​​ 调试方式 仿真器 Python 与 芯片的结合调试,通过target 设置芯片类型和芯片device_id,从而与npu获得连接 主要流程步骤 参照demo,如下是自己封装的简单接口 c ...

  7. 瑞芯微-RV1109主板各参数介绍

    瑞芯微-RV1109主板分析 1 瑞芯微电子Rockchip(以下简称瑞芯微),瑞芯微电子成立于2001年,总部位于福州,在深圳.上海.北京.杭州.香港及台湾均设有分支机构,是中国专业的集成电路设计公 ...

  8. 瑞芯微-RV1109主板分析

    瑞芯微-RV1109主板分析 瑞芯微电子Rockchip(以下简称瑞芯微),瑞芯微电子成立于2001年,总部位于福州,在深圳.上海.北京.杭州.香港及台湾均设有分支机构,是中国专业的集成电路设计公司. ...

  9. 瑞芯微RK PX30中文详解(带开源资料)简介

    瑞芯微RK PX30中文详解(带开源资料)简介 非常感谢您选择九鼎创展PX30开发平台,本文档讲述PX30开发平台的硬件资源,电路原理以及支持的接口等. PX30开发板是基于瑞芯微PX30的一款高端开 ...

最新文章

  1. 广告条随滚动条的移动而移动
  2. POJ 1474 Video Surveillance(半平面交)
  3. 100个必会的python脚本-Python 经典算法100及解析(小结)
  4. Kafka 为什么那么快的 6 个原因!
  5. Android 开发工具类 36_ getSimSerial
  6. 计算机实训课教案模板,CorelDRAW实训课教案(7周)
  7. ThinkPHP 模板循环语法
  8. 关于RESTful一些注意事项,接口开发规范
  9. 倒了血霉!先是贾跃亭后有罗永浩,被拖欠4400多万,最惨公司无疑了
  10. btoa java,java的btoa、atob
  11. 项目管理基础:9.项目人力资源管理
  12. kali linux win10桌面,一键伪装成Win 10,Kali Linux 2019年最终版重磅功能预览
  13. sonarqube增加阿里p3c规则扫描
  14. 网页抽奖程序(年会,开幕式等)
  15. 制作PPT怎样设计图片才有观赏性
  16. 饥荒联机版服务器控制台本地和在线,饥荒联机版控制台怎么打开_饥荒联机版控制台开启方法_牛游戏网...
  17. Banner 怎么实现轮播不同尺寸的图片
  18. Arthas——热替换
  19. QQ邮箱获取和使用授权码
  20. 【Linux】Linux关闭防火墙、关机重启和查看系统运行级别

热门文章

  1. Infor ERP介绍
  2. 巫师之昆特牌手游服务器中断连接,巫师之昆特牌10月11日网络维护 掉线处理办法...
  3. python创建文件、写入文件、读取文件
  4. 文储研习社第18期 | AssangeDAO,是真救还是一个骗局?
  5. ffmpeg解码内存缓冲区
  6. 下一代面向知识的BI到底有何不同,从数睿数据nextionBI数据解读能力中一探究竟
  7. 第五人格服务器维护6,第五人格维护公告 2021年6月30日更新内容一览
  8. 求栈中元素的最小值c语言,C语言输出栈中所有元素
  9. 手机不支持SD卡扩展
  10. WS_EX_TRANSPARENT - 它实际上做了什么?