openRv1126 AI算法部署实战之——TensorFlow TFLite Pytorch ONNX等模型转换实战

Conda简介

查看当前系统的环境列表

conda env list

base为基础环境

py3.6-rknn-1.7.3为模型转换环境,rknn-toolkit版本V1.7.3,python版本3.6

py3.6-tensorflow-2.5.0为tensorflow模型训练环境,tensorflow版本2.5.0,python版本3.6

py3.8-pytorch-1.13.0为pytorch、yolo模型训练环境,pytorch版本1.13.0,python版本3.8

进入模型转换环境

conda activate py3.6-rknn-1.7.3

进入tensorflow模型训练环境

conda activate py3.6-tensorflow-2.5.0

进入pytorch yolo模型训练环境

conda activate py3.8-pytorch-1.13.0

退出当前终端下的虚拟环境

conda deactivate

模型转换介绍

RV1126使用RKNN格式的模型文件。各深度学习框架不能直接使用,需要转换后才能放在RV1126上跑

模型转换环境版本介绍

rknn-toolkit V1.7.3
python==3.6
tensorflow==1.14.0
mxnet==1.5.0
torch==1.10.0
torchvision==0.11.0
opencv-python==4.3.0.38

模型转换实操

//进入模型环境

conda activate py3.6-rknn-1.7.3
cd ModelConvertSample/

转换ONNX ->RKNN

python convert-onnx-to-rknn-pre.py

注意提示缺少libcudart.so属正常现象,原因是虚拟机使用cpu处理无法使用GPU处理,所以没有显卡cuda库文件

该脚本读取"./original_model/best.onnx"模型文件,

使用数据集'./dataset/dataset1.txt',

转换后保存为'./rknn_model/yolov5-7.0-onnx.rknn'文件

转换pytorch ->RKNN

python convert-pytorch-to-rknn-pre.py

最终在rknn_model目录生成rknn文件

该脚本读取"./original_model/best.torchscript"模型文件,

使用数据集'./dataset/dataset1.txt',

转换后保存为'./rknn_model/yolov5-7.0-torchscript.rknn'文件

转换tensorflow ->RKNN

python convert-tensorflow-to-rknn-pre.py

该脚本读取'./original_model/ssd_mobilenet_v1_coco_2018_01_28/frozen_inference_graph.pb'

模型文件,

使用数据集'./dataset/dataset3.txt',

转换后保存为'./rknn_model/ssd_mobilenet_v1_coco.rknn'文件

转换tflite ->RKNN

python convert-tflite-to-rknn-pre.py

该脚本读取'./original_model/mobilenet_v1_1.0_224/mobilenet_v1_1.0_224.tflite'模型文件,

使用数据集'./dataset/dataset2.txt',

转换后保存为'./rknn_model/mobilenet_v1_1.0_224.rknn'文件

转换结果:生成以下四个rknn模型文件,后续我们将对这些模型全部部署到开发板运行

退出环境

conda deactivate

转换其他模型

参考RK官方资料

https://github.com/rockchip-linux/rknn-toolkit

附:操作命令

一、TFLite预训练模型转换 tflite->rknn
说明:      
    TFLite预训练模型下载地址:https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md
		下载MobileNet_v1_1.0_224
    数据集: ILSVRC-2012-CLS image 
    标签文件:https://github.com/leferrad/tensorflow-mobilenet/blob/master/imagenet/labels.txt
	
convert-tflite-to-rknn.py
    target = 'rv1126'	//确定目标设备target
    rknn = RKNN()		//创建RKNN对象
	rknn.config(quantized_dtype='asymmetric_affine-u8',			//配置RKNN模型
					mean_values=[[127.5, 127.5, 127.5]],#归一化
					std_values=[[127.5, 127.5, 127.5]],
					reorder_channel='0 1 2',#RGB
					target_platform=[target])#指定平台
	rknn.load_tflite(model='./original_model/mobilenet_v1_1.0_224/mobilenet_v1_1.0_224.tflite')//加载模型
	rknn.build(do_quantization=True, dataset='./dataset/dataset2.txt',pre_compile=True)//构建RKNN模型:指定参数需要量化,且指定量化数据集dataset2
    rknn.release()# 释放RKNN对象
	
	python convert-tflite-to-rknn-pre.py
	
二、TensorFlow预训练模型(ssd)转换rknn pb->rknn
	TF预训练模型下载地址:
    https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md
    http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2018_01_28.tar.gz 

    数据集:MSCOCO数据集https://cocodataset.org
            Object(论文版本)有90类物体(加上一个背景类就是91类),label_map可参考:
            https://github.com/tensorflow/models/blob/master/research/object_detection/data/mscoco_label_map.pbtxt

            注:很多时候,在目标检测这块,只用到了原论文版本90类中的80类(加上背景类,就是81类)物体。
            Object(2014年版本)和Object(2017年版本)的label_map对应的说明文件可参考:
            https://github.com/tensorflow/models/blob/master/research/object_detection/data/mscoco_complete_label_map.pbtxt
			
	python convert-tensorflow-to-rknn-pre.py 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/963419.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电介质超表面中指定涡旋的非线性生成

涡旋光束在众多领域具有重要应用,但传统光学器件产生涡旋光束的方式限制了其在集成系统中的应用。超表面的出现为涡旋光束的产生带来了新的可能性,尤其是在非线性领域,尽管近些年来已经有一些研究,但仍存在诸多问题,如…

Python3 OS模块中的文件/目录方法说明十七

一. 简介 前面文章简单学习了 Python3 中 OS模块中的文件/目录的部分函数。 本文继续来学习 OS 模块中文件、目录的操作方法:os.walk() 方法、os.write()方法 二. Python3 OS模块中的文件/目录方法 1. os.walk() 方法 os.walk() 方法用于生成目录树中的文件名&a…

2025年2月2日(网络编程 tcp)

tcp 循环服务 import socketdef main():# 创建 socket# 绑定tcp_server socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_server.bind(("", 8080))# socket 转变为被动tcp_server.listen(128)while True:# 产生专门为链接进来的客户端服务的 socketprint(&qu…

Rust 中的注释使用指南

Rust 中的注释使用指南 注释是代码中不可或缺的一部分,它帮助开发者理解代码的逻辑和意图。Rust 提供了多种注释方式,包括行注释、块注释和文档注释。本文将详细介绍这些注释的使用方法,并通过一个示例展示如何在实际代码中应用注释。 1. 行…

使用Pygame制作“青蛙过河”游戏

本篇博客将演示如何使用 Python Pygame 从零开始编写一款 Frogger 风格的小游戏。Frogger 是一款早期街机经典,玩家需要帮助青蛙穿越车水马龙的马路到达对岸。本示例提供了一个精简原型,包含角色移动、汽车生成与移动、碰撞检测、胜利条件等关键点。希望…

渗透测试过程中碰到的Symfony框架

0x01 不是很顺利的Nday利用 在一次渗透测试过程中发现了目标使用了Symfony框架,然后扫了下目录,发现存在app_dev.php 文件,尝试访问 发现开启了debug模式,Symfony 版本号为2.8.34 php版本5.6.40 也能查看phpinfo页面 然后在网上搜…

Games104——网络游戏的进阶架构

这里写目录标题 前言位移移动插值内插(Interpolation)外插(Extrapolation) 命中判定Hit Registration在客户端去判定 在服务器端去判定延迟补偿掩体问题躲进掩体走出掩体 技能前摇本地暴击效果 基础MMO框架分布式架构一致性哈希服…

2025年01月27日Github流行趋势

项目名称:onlook项目地址url:https://github.com/onlook-dev/onlook项目语言:TypeScript历史star数:5340今日star数:211项目维护者:Kitenite, drfarrell, iNerdStack, abhiroopc84, apps/dependabot项目简介…

【Redis】set 和 zset 类型的介绍和常用命令

1. set 1.1 介绍 set 类型和 list 不同的是,存储的元素是无序的,并且元素不允许重复,Redis 除了支持集合内的增删查改操作,还支持多个集合取交集,并集,差集 1.2 常用命令 命令 介绍 时间复杂度 sadd …

[SAP ABAP] 静态断点的使用

在 ABAP 编程环境中,静态断点通过关键字BREAK-POINT实现,当程序执行到这一语句时,会触发调试器中断程序的运行,允许开发人员检查当前状态并逐步跟踪后续代码逻辑 通常情况下,在代码的关键位置插入静态断点可以帮助开发…

从TinyZero的数据与源码来理解DeepSeek-R1-Zero的强化学习训练过程

1. 引入 TinyZero(参考1)是伯克利的博士生复现DeepSeek-R1-Zero的代码参仓库,他使用veRL来运行RL强化学习方法,对qwen2.5的0.5B、1.5B、3B等模型进行训练,在一个数字游戏数据集上,达到了较好的推理效果。 …

深度卷积神经网络实战无人机视角目标识别

本文采用深度卷积神经网络作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对无人机目标数据集进行训练和优化,该数据集包含丰富的无人…

初级数据结构:栈和队列

一、栈 (一)、栈的定义 栈是一种遵循后进先出(LIFO,Last In First Out)原则的数据结构。栈的主要操作包括入栈(Push)和出栈(Pop)。入栈操作是将元素添加到栈顶,这一过程中&#xf…

数据结构 前缀中缀后缀

目录 前言 一,前缀中缀后缀的基本概念 二,前缀与后缀表达式 三,使用栈实现后缀 四,由中缀到后缀 总结 前言 这里学习前缀中缀后缀为我们学习树和图做准备,这个主题主要是对于算术和逻辑表达式求值,这…

笔灵ai写作技术浅析(三):深度学习

笔灵AI写作的深度学习技术主要基于Transformer架构,尤其是GPT(Generative Pre-trained Transformer)系列模型。 1. Transformer架构 Transformer架构由Vaswani等人在2017年提出,是GPT系列模型的基础。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),完全依赖自…

专业的定制版软件,一键操作,无限使用

今天给大家介绍一个专业的PDF转word的小软件,软件只有5.5M。非常小,而且没有文档大小的限制,可以随意使用。 PDFtu PDF转word 软件第一次使用需要安装一下。 安装好之后,我们就能在桌面找到对应的图标,打开就能直接使…

QGIS系列22-如何提取不规则多边形的中心经纬度

今天我们来学习一下啊如何通过QGIS提取不规则多边形的中心经纬度 1、首先我们把不规则的多边形图形导入进QGIS里面去 2、现在打开的图层是不可以编辑的,因此我们还需要转换成可编辑状态,具体是选择图层,右键点击,选择切换编辑模式…

word2vec 实战应用介绍

Word2Vec 是一种由 Google 在 2013 年推出的重要词嵌入模型,通过将单词映射为低维向量,实现了对自然语言处理任务的高效支持。其核心思想是利用深度学习技术,通过训练大量文本数据,将单词表示为稠密的向量形式,从而捕捉单词之间的语义和语法关系。以下是关于 Word2Vec 实战…

数据库安全管理中的权限控制:保护数据资产的关键措施

title: 数据库安全管理中的权限控制:保护数据资产的关键措施 date: 2025/2/2 updated: 2025/2/2 author: cmdragon excerpt: 在信息化迅速发展的今天,数据库作为关键的数据存储和管理中心,已经成为了企业营运和决策的核心所在。然而,伴随着数据规模的不断扩大和数据价值…

【漫话机器学习系列】076.合页损失函数(Hinge Loss)

Hinge Loss损失函数 Hinge Loss(合页损失),也叫做合页损失函数,广泛用于支持向量机(SVM)等分类模型的训练过程中。它主要用于二分类问题,尤其是支持向量机中的优化目标函数。 定义与公式 对于…