yolov8pose 部署rknn(rk3588)、部署地平线Horizon、部署TensorRT,部署工程难度小、模型推理速度快,DFL放后处理中

  特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。

  模型和完整仿真测试代码,放在github上参考链接 模型和代码

  之前写了yolov8、yolov8seg、yolov8obb 的 DFL 放在模型中和放在后处理中的两种不同部署方法(推荐放在后处理中);而yolov8pose只写了一篇放在模型中,有网友希望写一篇放在后处理中的,yolov8pose的DFL放在后处理中的博客来了。

1 模型和训练

  老规矩,训练不涉及,训练代码参考官方开源的yolov8训练代码。

2 导出 yolov8 onnx

  修改两处、增加保存onnx代码,一共修改三个地方。

修改第一处:增加以下几行代码
在这里插入图片描述

        # 导出 onnx 增加
        y = []
        for i in range(self.nl):
            t1 = self.cv2[i](x[i])
            t2 = self.cv3[i](x[i])
            y.append(t1)
            y.append(t2)
        return y

第二处:增加以下几行代码
在这里插入图片描述

        ps = []
        for i in range(self.nl):
            ps.append(self.cv4[i](x[i]))
        x = self.detect(self, x)
        return x, ps

  增加保存onnx模型代码
在这里插入图片描述

        print("===========  onnx =========== ")
        dummy_input = torch.randn(1, 3, 640, 640)
        input_names = ["data"]
        output_names = ["reg1", "cls1", "reg2", "cls2", "reg3", "cls3", "ps1", "ps2", "ps3"]
        torch.onnx.export(self.model, dummy_input, "./yolov8n_pose.onnx", verbose=False, input_names=input_names, output_names=output_names, opset_version=11)
        print("======================== convert onnx Finished! .... ")

  修改完以上几个地方,运行以下两行。

from ultralytics import YOLO
model = YOLO('./weights/yolov8n-pose.pt')

3 yolov8n-pose onnx 测试效果

在这里插入图片描述

4 时耗

将DFL放后处理中,模型和后处理时耗,使用芯片rk3588,模型输入分辨率640x640。部署rk3588板端代码
在这里插入图片描述

以下截图是将DFL放在模型中的时耗(模型推理时会长一些,但后处理会稍微快一点),将DFL放在模型中部署【参考链接】

在这里插入图片描述

### 转换 YOLOv8 Pose 关键点检测模型RKNN 格式的流程 #### 1. 导出 ONNX 模型 为了将 YOLOv8 Pose 模型转换为 RKNN 格式,第一步是从 PyTorch 的 `.pt` 文件导出为 ONNX 格式。可以通过创建 `export_onnx.py` 并添加以下代码来完成此操作: ```python from ultralytics import YOLO model = YOLO('./ultralytics/cfg/models/v8/yolov8n-pose.yaml') model.export(format='onnx', simplify=True, opset=12) ``` 上述脚本会生成一个简化的 ONNX 模型文件[^3]。 --- #### 2. 修改 ONNX 输出层以适配 RK3588 设备 由于 RK3588 平台的硬件限制,YOLOv8 原生模型的部分输出可能无法被支持。因此,在将其转换为 RKNN 格式之前,需对 ONNX 模型进行调整,裁剪掉不兼容的操作或节点。具体方法可以参考相关文档中的说明[^4]。 --- #### 3. 使用 RKNN Toolkit 进行转换 安装 RKNN 工具包并加载修改后的 ONNX 模型。以下是 Python 实现的一个简单示例: ```python from rknn.api import RKNN # 创建 RKNN 对象实例 rknn = RKNN() # 配置模型参数 print('--> Configuring model parameters') ret = rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]]) if ret != 0: print('Config failed!') exit(ret) # 加载 ONNX 模型 print('--> Loading ONNX model') ret = rknn.load_onnx(model='./yolov8-pose.onnx') # 替换为你实际路径下的 onnx 文件名 if ret != 0: print('Load ONNX model failed!') exit(ret) # 编译模型RKNN 格式 print('--> Building model') ret = rknn.build(do_quantization=False, dataset='./dataset.txt') # 数据集用于量化校准 if ret != 0: print('Build failed!') exit(ret) # 保存最终的 RKNN 模型 print('--> Exporting RKNN model') ret = rknn.export_rknn(path='./yolov8-pose.rknn') if ret != 0: print('Export RKNN model failed!') exit(ret) print('Model conversion completed successfully.') ``` 以上代码展示了如何利用 RKNN Toolkit 将 ONNX 模型编译成适用于嵌入式平台(如 RK3588)的 RKNN 格式[^1]。 --- #### 4. 测试与部署 最后一步是在目标设备上测试生成的 RKNN 模型。确保设备端 SDK 安装无误,并编写相应的推理程序调用该模型。 --- ### 注意事项 - 如果遇到性能瓶颈或者精度下降问题,建议尝试不同的优化策略,比如启用量化选项或将输入分辨率降低。 - 整个过程中涉及到的所有工具版本应保持一致,以免因接口差异引发错误。 ---
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值