yolov5 onnx模型 转为 rknn模型

文章描述了如何将ONNX模型转换为RKNN模型以在RV1126开发板上运行的过程,包括搭建转换环境、使用docker镜像、生成量化图片列表以及执行模型转换。转换过程中涉及的关键步骤有设置工作区域映射、运行gen_list.py脚本生成图片路径文件,以及使用rknn_convert.py脚本进行模型转换。此外,文章还强调了在资源有限的环境下(如虚拟机)进行此过程可能面临的挑战。
摘要由CSDN通过智能技术生成

1、转换为rknn模型环境搭建

onnx模型需要转换为rknn模型才能在rv1126开发板上运行,所以需要先搭建转换环境

模型转换工具 模型转换相关文件下载:

网盘下载链接:百度网盘 请输入提取码  提取码:teuc

将其移动到虚拟机中,找到文件夹中的docker文件 rknn-toolkit-1.7.1-docker.tar.gz 、 model_convert文件夹

加载 模型转换工具docker镜像

docker load --input /home/developer/rknn-toolkit/rknn-toolkit-1.7.1-docker.tar.gz

进入 镜像bash环境

 执行以下指令把工作区域映射进docker镜像,其中/home/developer/rknn-toolkit/model_convert为工作区域/test为映射到docker镜像/dev/bus/usb:/dev/bus/usb为映射usb到docker镜像:

docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v /home/developer/rknn-toolkit/model_convert:/test rknn-toolkit:1.7.1 /bin/bash

两处文件映射,即同步

 2、生成量化图片列表

这一步是把准备好的一些图片,生成图片路径的文本文件,在构建RKNN模型的时候有用处。通过使用真实的样本数据集,RKNN工具可以更好地理解和建模模型的输入数据,从而更好地优化网络结构、权重和量化方案。

在docker环境切换到模型转换工作目录;执行 gen_list.py,会得到一个文本文件pic_path.txt,里面是图片的路径:

cd /test/coco_object_detect
python gen_list.py

gen_list.py内容如下:

import os
import random


def main(image_dir):
	save_image_txt = './pic_path.txt'
	save_val_number = 0

	img_path_list = []

	image_list = os.listdir(image_dir)
	for i in image_list:
		#if os.path.isdir(image_dir):
		#print("i:", i)
		image_path = image_dir + '/' + i
		#print("image_path:", image_path)
		img_path_list.append(image_path)

	#print(img_path_list)

	
	print('len of all', len(img_path_list))

	random.shuffle(img_path_list)

	with open(save_image_txt, 'w') as F:
		for i in range(len(img_path_list)):
		    F.write(img_path_list[i]+'\n')


if __name__ == '__main__':
    image_dir = '/test/quant_dataset/coco_data'  # 图片所在路径,大概500张
    main(image_dir)

3、onnx模型转换为rknn模型

还是在docker环境 模型转换工作目录,运行rknn_convert.py

python rknn_convert.py

这一步如果是在虚拟机上运行的话,8GB的内存条win10系统也要用,分配给虚拟机的没多少,3GB也不够执行这一步。

后来我直接在Ubuntu系统执行这一步,8GB系统用一点还剩6.7GB,CPU和内存直接干满

 

rknn_convert.py 源码:

import os
import urllib
import traceback
import time
import sys
import numpy as np
import cv2
from rknn.api import RKNN


ONNX_MODEL = 'best.onnx' # onnx 模型的路径
RKNN_MODEL = './yolov5_mask_rv1126.rknn'  # 转换后的 RKNN 模型保存路径
DATASET = './pic_path.txt'   # 数据集文件路径

QUANTIZE_ON = True   # 是否进行量化

if __name__ == '__main__':

	# 创建 RKNN 对象
	rknn = RKNN(verbose=True)

    # 检查 ONNX 模型文件是否存在
	if not os.path.exists(ONNX_MODEL):
		print('model not exist')
		exit(-1)

	# 配置模型预处理参数
	print('--> Config model')
	rknn.config(reorder_channel='0 1 2', # 表示 RGB 通道
			    mean_values=[[0, 0, 0]], # 每个通道的像素均值,预处理时对应通道减去该值
			    std_values=[[255, 255, 255]], # 每个通道的像素标准差,每个通道除以该值
			    optimization_level=3, # 优化级别
			    target_platform = 'rv1126', #指定目标平台为rv1126
			    output_optimize=1,      # 输出优化为真
			    quantize_input_node=QUANTIZE_ON)  # 对时输入节点进行量化
	print('done')

	# 加载 ONNX 模型
	print('--> Loading model')
	ret = rknn.load_onnx(model=ONNX_MODEL)
	if ret != 0:
		print('Load yolov5 failed!')
		exit(ret)
	print('done')

	# 构建模型
	print('--> Building model')
	ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET)
	if ret != 0:
		print('Build yolov5 failed!')
		exit(ret)
	print('done')

	# 导出 RKNN 模型
	print('--> Export RKNN model')
	ret = rknn.export_rknn(RKNN_MODEL)
	if ret != 0:
		print('Export yolov5rknn failed!')
		exit(ret)
	print('done')

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!关于yolov5onnx模型的推理,你可以按照以下步骤进行操作: 1. 首先,确保你已经成功安装了ONNX运行时(ONNX Runtime)库。这个库可以用来加载和运行ONNX模型。 2. 下载yolov5onnx模型文件,通常是一个以.onnx为后缀的文件。你可以在yolov5的官方GitHub仓库(https://github.com/ultralytics/yolov5)上找到这个文件。 3. 使用ONNX Runtime库加载模型文件。你可以使用类似以下代码的Python代码来完成这一步骤: ```python import onnxruntime as ort # 加载模型 model = ort.InferenceSession("path/to/yolov5.onnx") ``` 4. 准备输入数据。yolov5模型期望输入为一张图片,所以你需要将待推理的图片换成模型期望的格式。具体的换过程可能因模型的不同而有所不同。 5. 运行推理。使用加载的模型对输入数据进行推理,可以使用以下代码: ```python import cv2 import numpy as np # 加载输入图片 image = cv2.imread("path/to/input.jpg") # 换图片格式为模型期望的格式(具体换过程可能因模型的不同而有所不同) # 运行推理 outputs = model.run(None, {"input": image}) ``` 6. 处理输出结果。yolov5模型的输出通常是检测到的物体的边界框、类别和置信度等信息。你可以根据模型的输出结构来解析这些信息,并进行后续的处理或可视化。 这些是使用yolov5onnx模型进行推理的基本步骤,具体的细节可能因模型和应用场景的不同而有所不同。希望对你有帮助!如果你有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值