yolo5 onnx2rknn 瑞芯微香橙派 rk3588

2023-10-31 00:01

本文主要是介绍yolo5 onnx2rknn 瑞芯微香橙派 rk3588,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

yolo 训练

我用的环境是yolo5.6.0 应该是
然后使用同环境下的export 注意 不要换环境。。。

python export.py --weights D:\project\Pythonproj\yolov5\yolo5\runs\train\exp5\weights\best.pt --img 640 --batch 1 --include onnx --opset 12

导出 onnx ,如果你和我的版本完全相同 ,那么你的onnx路径应该是
D:\project\Pythonproj\yolov5\yolo5\runs\train\exp5\weights\best.onnx

yolo onnx 剪裁

原则上,如果你自己写后处理函数/对yolo后处理函数非常熟悉的话,你可以直接改他的后处理,应该也是可以的
那么如果你是新手,并且想快速的在3588上面部署yolo5 看下面
使用onnx可视化网站(网不好的话可以fanqiang 加速) https://netron.app/ 查看你的生成模型的可视化结果

看到了之后,把transpose前面的卷积层(三个卷积层的名字找到) 从左到右分别是1 2 3 ,分别放到下面的三个名字的位置

使用下面的脚本

import onnx
from onnx import helper, checker
from onnx import TensorProto
import re
import argparse
# model = "D:\project\Pythonproj\yolov5\yolo5\yolov5s.onnx"
model = r"D:\project\Pythonproj\yolov5\yolo5\runs\train\exp5\weights\best.onnx"
# model = r"D:\project\Pythonproj\yolov5\yolo5\runs\train\exp15\weights\best.onnx"# model = "D:\project\caffe\dockerfile\yolov5s-simple.onnx"
import onnxonnx_model = onnx.load(model)
graph = onnx_model.graph
# print(graph)
node = graph.node# node[213].output[0] = node[212].output[0]
# node[213].output[0] = node[213].input[0]
# for idx in graph.node:
#     print(idx)
# graph.node[]
print(graph.output[0].type.tensor_type.shape)# graph.output
# graph.output[1].type.tensor_type.elem_type = 1
# graph.output[2].name = "output2"
def createGraphMemberMap(graph_member_list):member_map=dict()for n in graph_member_list:member_map[n.name]=nreturn member_mapx = {"Concat_302","Reshape_301","Reshape_263","Reshape_282","Sigmoid_267","Sigmoid_286","Sigmoid_248","Split_249","Split_268","Split_287","Mul_251","Mul_257","Mul_270","Mul_276","Mul_289","Mul_295","Mul_255","Mul_261","Mul_274","Mul_280","Mul_293","Mul_299","Add_253","Add_291","Add_272","Pow_259","Pow_278","Pow_297","Concat_262","Concat_281","Concat_300"}# 我没有实际用到 不用看我
# x = {"Concat_382","Reshape_257","Reshape_319","Reshape_381","Sigmoid_245","Sigmoid_307","Sigmoid_369","Split_246","Split_308","Split_370","Mul_248","Mul_253","Mul_310","Mul_315","Mul_372","Mul_377","Mul_251","Mul_255","Mul_313","Mul_317","Mul_375","Mul_379","Add_249","Add_311","Add_373","Pow_254","Pow_316","Pow_378","Concat_256","Concat_318","Concat_380","Transpose_322","Transpose_198","Transpose_260"}de = []
num = 0
#
node_map = createGraphMemberMap(graph.node)
output_map = createGraphMemberMap(graph.output)
graph.output.remove(output_map["output0"])
# new_output_node_names  = ["output0","output1","output2"]
output_shape_map = [[1,18,80,80],[1,18,40,40],[1,18,20,20]]
# for i in range(3):# new_nv = helper.make_tensor_value_info(new_output_node_names[i], TensorProto.FLOAT, output_shape_map[i])# graph.output.extend([new_nv])
output_map = createGraphMemberMap(graph.output)for i in range(len(graph.node)):if node[i].name in x:de.append(i)num = num+1
de.sort()
de.reverse()
# for i in range(num):
#     graph.node.remove(graph.node[de[i]])
print("graph_output:", graph.output)
for i in range(len(graph.node)):if node[i].name == "Conv_196":# 卷积层1 new_nv = helper.make_tensor_value_info(node[i].output[0], TensorProto.FLOAT, output_shape_map[0])graph.output.extend([new_nv])# node[i].output[0]="output0"if node[i].name == "Conv_215":# 卷积层2 new_nv = helper.make_tensor_value_info(node[i].output[0], TensorProto.FLOAT, output_shape_map[1])graph.output.extend([new_nv])#     node[i].output[0]="output1"if node[i].name == "Conv_234":# 卷积层3 new_nv = helper.make_tensor_value_info(node[i].output[0], TensorProto.FLOAT, output_shape_map[2])graph.output.extend([new_nv])#     node[i].output[0]="output2"onnx.checker.check_model(onnx_model)
onnx.save(onnx_model,"del_rknn.onnx")

运行python 脚本 删除层
在脚本同路径拿到结果 del_rknn.onnx

结果转换

剩下的千篇一律了,找到官方的RKNN文档随便下载一下看看,最快的方案是使用docker那个拉取一下,
然后Python test.py
需要注意的是 广为流传的demo里面的test.py导出的是rk3568还是rk3566的,需要config里面配置一下targetplatform

这篇关于yolo5 onnx2rknn 瑞芯微香橙派 rk3588的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/311436

相关文章

瑞芯微Parameter File Format解析

Rockchip android系统平台使用parameter文件来配置一些系统参数 主要包含:串口号:nandflash分区 固件版本,按键信息等; 如下是台电P98HD的parameter参数: FIRMWARE_VER:4.1.1        // 固件版本 //固件版本,打包 updata.img 时会使用到,升级工具会根据这个识别固件版本。 //Boot loader 会读取

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现 2

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现 2 flyfish 前置知识 1 前置知识 2 Host侧CPU和Device侧NPU的主要区别 不同的硬件资源 CPU是为了执行通用计算任务而设计的,但在处理大量的并行计算(如矩阵乘、批数据处理)时效率不高。NPU是为了加速机器学习和深度学习任务而设计的,它擅长执行大量的并行计算。N

[rk3588 ubuntu20.04]移植ROS2

目录 1 使用命令行安装ROS2 1.1设置语言 1.2添加源 1.3安装ROS2 1.4设置环境变量 2 在编译源码阶段安装ROS2 2.1调整roofts.img大小 2.2 安装ROS2 3 ROS2功能测试 1 使用命令行安装ROS2 1.1设置语言         设置语言为UTF-8。 sudo apt update && sudo apt insta

将RK3588平台的TMC等USB function驱动挪出内核源码树

背景 前一段时间定位一个上位机通过USB-TMC连接下位机(基于RK3588平台)时界面发生卡顿的问题,发现USB-TMC驱动代码是放在内核源码树里跟内核一起编译的,觉着这样既不便于更换TMC 驱动版本(每次修改代码都要重编内核),也不便于将TMC驱动代码单独放到SVN管理(RK的build系统有16GB之巨,全部提交到SVN服务器吃不消),于是考虑将其挪到源码树外。 想参照自己之前在zynq

香橙派连接WiFi

1. 确认无线网卡驱动已安装 首先,确保你的香橙派已经安装了无线网卡的驱动。你可以通过以下命令来查看无线设备: iwconfig 如果看到了无线网卡的信息(通常是wlan0),则说明驱动已经安装。 2. 使用命令行连接WiFi a. 使用nmcli(NetworkManager的命令行工具) 如果你使用的是NetworkManager,可以使用以下命令连接到WiFi: nm

RK3588 13.0去掉SystemUI快速设置选项

Android13.0的SystemUI下拉菜单有很多快速设置选项,有些选项对我们设备来说是多余的,用户要求去掉无用的选项,只保留Internet  Bluetooth  Screen record 去掉之前: 去掉之后: 为了去掉这些快速设置选项,试了很多地方,研究了很多代码,最后发现改这个config文件就可以去掉了 diff --git a/core/res/res/

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现 flyfish 前置知识 基于Kernel直调工程的算子开发流程图 其中有一个Tiling实现 什么是Tiling、Tiling实现 计算API,包括标量计算API、向量计算API、矩阵计算API,分别实现调用Scalar计算单元、Vector计算单元、Cube计算单元执行计算的功

在国产芯片上实现YOLOv5/v8图像AI识别-【4.2】RK3588获取USB摄像头图像推流RTSP更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 前言 在实际生产过程中,有很多时候不光是通过网络获取rtsp视频流,通常会采用在板子上插上USB摄像头获取画面。 今天

RK3588 NPU开发环境搭建

如何在Ubuntu系统(PC)上搭建RK3588 Buildroot Linux的NPU开发环境?即电脑端运行Ubuntu系统,而RK3588板卡运行Buildroot Linux系统的情况下,搭建RK3588 NPU开发环境。 下面是相应的步骤(对应的命令): 0.依赖文件     RKNPU2 工程下载地址:rknn-toolkit2/rknpu2 at master · airockc

瑞芯微RK3588 camera驱动总结三调试

一、指令 先介绍一些很有用的指令 1.media-ctl -p -d /dev/media0 用于打印 /dev/media0 设备的媒体管道拓扑结构。媒体管道拓扑结构描述了多媒体设备内部各组件之间的连接关系,包括视频输入、视频输出、编码器、解码器、ISP(图像信号处理器)等组件之间的连接。 media-ctl -d /dev/media1 -e "rkisp_selfpath" med