当前位置: 首页 > news >正文

模型部署|将自己训练的yolov8模型在rk3568上部署

  RK3568作为瑞芯微推出的高性能处理器,广泛应用于嵌入式系统,具有强大的计算能力和较低的功耗,适合用于运行深度学习任务。将YOLOv8部署在RK3568上,不仅能够提升目标检测的效率,还能充分利用RK3568的硬件加速能力,为开发者提供更高效、更实用的方案。

1 将模型转成onnx

训练的步骤这里就不赘述,之前文章已经提到过,不知道的兄弟们可以看以下文章:
实例分割 | yolov11训练自己的数据集
yolov8和yolov11的训练方法都是相同的。

1.1 明确需要的模型结构

如果直接使用官方给的导出onnx功能,会得到以下结构模型:
在这里插入图片描述
输入为1x3x640x640,两个输出output0和output1,而官方给的输出为13个,如下图所示:
在这里插入图片描述
想要看原文的可以看这里:官方示例
至于怎么将自己训练的模型转成官网的这种结构,请继续往下看。

1.2 导出onnx模型

git clone https://github.com/airockchip/ultralytics_yolov8.git
cd ultralytics_yolov8

将ultralytics/cfg/default.yaml 中 model 文件路径,改为自己训练模型路径,如下图所示:
在这里插入图片描述
在这里修改你训练的模型的绝对路径和训练尺寸,然后输入继续以下命令:

# linux下用export windows下用set
export/set PYTHONPATH=./
python ./ultralytics/engine/exporter.py

如图所示,看打印输出output数量为13个则表示打印成功:
在这里插入图片描述

1.3 onnx转rknn

  在将ONNX模型转换为RKNN模型之前,需要一台电脑或Ubuntu系统的虚拟机作为开发环境,至于为什么,请看这里:
在这里插入图片描述
这里要安装的ubuntu版本和python版本也可以参考一下,这里推荐使用Ubuntu20.04和python3.8。

1.3.1 下载并安装rknn-toolkit2

rknn-toolkit2官网地址
在这里插入图片描述
在这里插入图片描述
这里一般选择虚拟机x86_64,开发板选arm64:
在这里插入图片描述
在这里插入图片描述
这里选择下载你对应python版本的rknn-toolkit2和requirments.txt_cpxx,cp版本就是python版本,cp37就是python3.7,下面是安装命令:

# 以python3.8版本为例
pip install -r requirements_cp38-2.3.2.txt
pip install rknn_toolkit2-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

1.3.2 转换模型到rknn

转化代码:

# convert.py
import sys
from rknn.api import RKNNDATASET_PATH = 'xxx/coco_subset_20.txt'
DEFAULT_RKNN_PATH = 'xxx/yolov8_seg.rknn'
DEFAULT_QUANT = Truedef parse_arg():if len(sys.argv) < 3:print("Usage: python3 {} onnx_model_path [platform] [dtype(optional)] [output_rknn_path(optional)]".format(sys.argv[0]));print("       platform choose from [rk3562, rk3566, rk3568, rk3576, rk3588, rv1126b, rv1109, rv1126, rk1808]")print("       dtype choose from [i8, fp] for [rk3562, rk3566, rk3568, rk3576, rk3588, rv1126b]")print("       dtype choose from [u8, fp] for [rv1109, rv1126, rk1808]")exit(1)model_path = sys.argv[1]platform = sys.argv[2]do_quant = DEFAULT_QUANTif len(sys.argv) > 3:model_type = sys.argv[3]if model_type not in ['i8', 'u8', 'fp']:print("ERROR: Invalid model type: {}".format(model_type))exit(1)elif model_type in ['i8', 'u8']:do_quant = Trueelse:do_quant = Falseif len(sys.argv) > 4:output_path = sys.argv[4]else:output_path = DEFAULT_RKNN_PATHreturn model_path, platform, do_quant, output_pathif __name__ == '__main__':model_path, platform, do_quant, output_path = parse_arg()# Create RKNN objectrknn = RKNN(verbose=False)# Pre-process configprint('--> Config model')rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform=platform)print('done')# Load modelprint('--> Loading model')ret = rknn.load_onnx(model=model_path)if ret != 0:print('Load model failed!')exit(ret)print('done')# Build modelprint('--> Building model')ret = rknn.build(do_quantization=do_quant, dataset=DATASET_PATH)if ret != 0:print('Build model failed!')exit(ret)print('done')# Export rknn modelprint('--> Export rknn model')ret = rknn.export_rknn(output_path)if ret != 0:print('Export rknn model failed!')exit(ret)print('done')# Releaserknn.release()

这里的DATASET_PATH 是你量化需要加的数据集文件,如果DEFAULT_QUANT =False则不用管
DEFAULT_RKNN_PATH 为你要输出的模型路径及名称。
转化模型命令:

cd python
python convert.py <onnx_model> <TARGET_PLATFORM> <dtype(optional)> <output_rknn_path(optional)># such as: 
python convert.py ../model/yolov8s-seg.onnx rk3588
  • onnx_model: 指定 ONNX 模型路径。
  • TARGET_PLATFORM: 指定 NPU 平台名称。支持平台请参阅此处。
  • dtype(optional): 指定为 或 。 用于进行量化,用于不进行量化。默认值为 。i8/u8fpi8/u8fpi8/u8
  • output_rknn_path(optional): 指定 RKNN 模型的保存路径,默认保存在与 ONNX 模型相同的目录中,名称为yolov8_seg.rknn

如图所示:
在这里插入图片描述
这样算是导出成功,至于warning 不用管。

总结

  本文主要记录了如何将自己训练的 .pt 文件模型转换为 RKNN 格式的模型。这个过程涉及从 PyTorch 框架中导出训练好的模型,并通过 RKNN Toolkit 对其进行优化和转化,以便能够在 Rockchip 的硬件平台上进行推理加速。


文章转载自:

http://uDhH0uUn.kghhL.cn
http://2OnYlnm2.kghhL.cn
http://Yj6wZGFu.kghhL.cn
http://auKqhfZG.kghhL.cn
http://hxvWraIw.kghhL.cn
http://1SrPY4p3.kghhL.cn
http://Vu1WlhO9.kghhL.cn
http://76NNfYLm.kghhL.cn
http://m0QhVVxU.kghhL.cn
http://BIxxwCK6.kghhL.cn
http://WYCIiQ1l.kghhL.cn
http://71z6lNWk.kghhL.cn
http://xbo97vxv.kghhL.cn
http://AHxch8lI.kghhL.cn
http://4eAThPJL.kghhL.cn
http://IlF9QgIy.kghhL.cn
http://rj7XW1zv.kghhL.cn
http://sIFqpezX.kghhL.cn
http://lJs9gV7R.kghhL.cn
http://6ZyKdw0M.kghhL.cn
http://u40JckBX.kghhL.cn
http://pzF1zqAy.kghhL.cn
http://0s4NzWLW.kghhL.cn
http://UYehrlfD.kghhL.cn
http://45fuQCyT.kghhL.cn
http://wpm4RWQO.kghhL.cn
http://Vjv789TR.kghhL.cn
http://FAJqcKIi.kghhL.cn
http://sJCHj80x.kghhL.cn
http://eusfFU1K.kghhL.cn
http://www.dtcms.com/a/382694.html

相关文章:

  • Vue中的slot标签——插槽
  • k8s集群—node节点的删除与添加
  • k8s的dashboard
  • k8s-容器探针和生命周期回调学习
  • 跟上大数据时代步伐:食物营养数据可视化分析系统技术前沿解析
  • 大数据毕业设计选题推荐-基于大数据的结核病数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • 全网首发! Nvidia Jetson Thor 128GB DK 刷机与测评(三)常用功能测评 DeepAnything 系列
  • Python快速入门专业版(二十六):Python函数基础:定义、调用与返回值(Hello函数案例)
  • 【系列文章】Linux中的并发与竞争[03]-自旋锁
  • Web前端面试题(1)
  • 海盗王客户端BMP纹理图片解密
  • FreeRTOS 知识点
  • Mac电脑上如何打印出字体图标
  • 2.2顺序表
  • 如何打造高效AI智能体工具
  • 2025智能制造研发效率提升指南:从“项目-流程-数据”闭环看工具选型
  • 【leetcode】5. 最长回文子串
  • 01trie
  • P4342 [IOI 1998] Polygon -普及+/提高
  • 13.ImGui-搭建内部绘制的ImGui项目框架(无消息循环的简单ImGui实例)
  • 工业互联网与数字孪生:解码产业数字化转型的核心支撑
  • 知识库内容冗余重复该怎么办
  • ScreenToGif:一款免费开源的屏幕录制与GIF制作工具
  • XHR与Fetch取消请求的方法及原理深度解析
  • 除了 transformer 还有哪些 新的 神经网络架构
  • 鸿蒙NEXT的Web组件网络安全与隐私保护实践
  • D. Coprime
  • 利用python pandas库清洗病例处方清洗步骤
  • 数据库在并发访问时,不同隔离级别下脏读幻读问题
  • Python核心技术开发指南(065)——with语句