yolov8 官方模型进行瑞芯微RKNN和地平线Horizon芯片仿真测试部署

文章介绍了如何将经过训练的Yolov8模型,使用ReLU替换SiLU激活函数后,导出为ONNX模型,以适应板端芯片如瑞芯微RKNN和地平线Horizon的高效部署。作者强调了导出模型后进行简化的重要性,以解决结构不匹配、加载异常和测试结果异常等问题。文章还提供了板端高效部署的参考方法。
部署运行你感兴趣的模型镜像

  由于之前写了一篇 ”yolov8 瑞芯微RKNN和地平线Horizon芯片仿真测试部署“ 这一篇导出的onnx模型在板端芯片部署效率非常高的,高效率体现在模型的所有操作都在加速引擎(NPU或BPU)上,模型推理没有CPU和板端加速引擎的切换,且后处理对一些维度变换直接用了索引的方式,没有额外的维度变换操作;且导出的onnx模型通用性很强,可以转换成任何板端模型;但工程部署难道相对大一些,有网友希望提供一个基于官方导出的onnx进行板端部署,因此本篇就基于 yolov8 官方导出onnx的方式,进行模型在板端芯片部署和仿真测试。

完整代码部署代码参考

1 模型训练修改部分

  由于有些板端芯片对SiLU激活函数不支持,因此将激活函数 SiLU 替换成 ReLU,并基于 VOC 数据集进行了重新训练。

2 导出onnx模型修改

   导出onnx需要修改一行
在这里插入图片描述

# 导出 onnx
from ultralytics import YOLO

model = YOLO('../weights/yolov8n_relu_20class.pt')
success = model.export(format="onnx")

强烈建议、强烈建议、强烈建议:导出 onnx 后用 simplify 后再看输出或转换成其他板端模型
有些同学反馈沟过的问题,在这里统一列出来:
1、导出的onnx输出和博客中的结构不一样
2、转换成板端模型时onnx模型加载异常
3、测试onnx输出结果异常

以上问题通过 simplify 后解决。

from onnxsim import simplify
import onnx

onnx_model = onnx.load('./yolov8n_relu_20class.onnx')
model_simp, check = simplify(onnx_model)

assert check, "Simplified ONNX model could not be validated"
onnx.save(model_simp, './yolov8n_relu_20class_sim.onnx')

3 onnx测试效果

数据来源VOC

4 板端高效部署方式

   请参考板端芯片高效部署

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### YOLOv10 部署于不同硬件平台 #### 瑞芯微 RKNN 芯片部署 YOLOv10 的复杂度与性能表现 对于瑞芯微RKNN芯片而言,YOLO系列模型的移植通常涉及将PyTorch或ONNX格式转换成RKNN专用格式。由于缺乏针对YOLOv10的具体优化工具链支持,这一过程可能较为繁琐[^1]。然而,在完成必要的量化处理并成功编译后,基于RK3588等高性能SoC的表现来看,其能够提供令人满意的实时检测能力。 ```bash # 假设已经安装好rknn-toolkit2环境 python3 -m rknn.api.create_rknn --model yolov10.onnx --output yolov10.rknn ``` #### 地平线 Horizon 芯片上的部署挑战与优势 地平线Horizon提供了专门面向AI加速器设计的软件栈,使得像YOLO这样的神经网络更容易被适配到这些平台上运行。尽管官方文档主要围绕较早版本的YOLO展开讨论,但对于最新版如YOLOv10来说,通过调整输入尺寸、锚框参数等方式仍可实现良好效果。此外,得益于内置的强大算力单元,即使是在高分辨率图像下也能保持较快的速度。 ```cpp // 使用Horizon SDK加载预训练好的YOLOv10权重文件 horizon::vision::Model model = horizon::vision::loadModel("path/to/yolov10"); ``` #### NVIDIA TensorRT 上的应用特点分析 NVIDIA TensorRT作为一款专为深度学习推理而生的产品,拥有成熟的生态系统完善的支持体系。它不仅可以直接读取来自PyTorch/ONNX等形式定义的YOLO架构描述符,而且借助FP16半精度浮点数运算模式进一步提升了效率。因此,在GPU资源充足的情况下,采用TensorRT来承载YOLOv10几乎是最优解之一;同时,凭借CUDA库的优势,可以获得极高的吞吐量较低延迟特性。 ```python import tensorrt as trt from torch2trt import TRTModule net_trt = TRTModule() net_trt.load_state_dict(torch.load('yolov10_tensorrt.pth')) ``` 综上所述,虽然各平台间存在一定差异,但从整体上看,如果开发者具备一定经验,则可以在上述三种环境中顺利集成YOLOv10,并根据不同应用场景需求选取最适合的技术路线。
评论 30
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值