yolov11 部署瑞芯微rk3588、RKNN部署工程难度小、模型推理速度快

该文章已生成可运行项目,

   yolov8还没玩溜,yolov11又来了,那么部署也又来了。

特别说明:如有侵权告知删除,谢谢。

完整代码:包括onnx转rknn和测试代码、rknn板端部署C++代码
【onnx转rknn和测试代码】
【rknn板端部署C++代码】

1 模型训练

  yolov11训练官方开源的已经非常详细了,参考官方代码。

2 导出 yolov11 onnx

   导出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

第二处:增加保存onnx代码
在这里插入图片描述

        print("===========  onnx =========== ")
        import torch
        dummy_input = torch.randn(1, 3, 640, 640)
        input_names = ["data"]
        output_names = ["reg1", "cls1", "reg2", "cls2", "reg3", "cls3"]
        torch.onnx.export(self.model, dummy_input, "/root/zhangqian/ultralytics-main/yolov11n_80class_ZQ.onnx",
                          verbose=False, input_names=input_names, output_names=output_names, opset_version=11)
        print("======================== convert onnx Finished! .... ")

修改完以上两处,运行以下代码:

from ultralytics import YOLO
model = YOLO(model='yolov11n.pt')  # load a pretrained model (recommended for training)
results = model(task='detect', source='./test.jpg', save=True)  # predict on an image

特别说明: 修改完以上两处后运行会报错,但不影响onnx的生成;生成onnx后强烈建议用from onnxsim import simplify 处理一下再转rknn。

3 测试onnx效果

pytorch效果
在这里插入图片描述
onnx效果(测试onnx代码链接
在这里插入图片描述

4 onnx转rknn

onnx转rknn代码链接

转rknn后仿真结果
在这里插入图片描述

5 rk3588板子测试yolov11模型

使用的 rknn_toolkit 版本:rknn_toolkit2-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
C++代码中的库和工具链的版本注意对应适配。

1)编译

cd examples/rknn_yolov11_demo_dfl_open

bash build-linux_RK3588.sh

2)运行

cd install/rknn_yolo_demo_Linux

./rknn_yolo_demo 

注意:修改模型、测试图像、保存图像的路径,修改文件为src下的main.cc


int main(int argc, char **argv)
{
    char model_path[256] = "/home/zhangqian/rknn/examples/rknn_yolov11_demo_dfl_open/model/RK3588/yolov11n_80class_ZQ.rknn";
    char image_path[256] = "/home/zhangqian/rknn/examples/rknn_yolov11_demo_dfl_open/test.jpg";
    char save_image_path[256] = "/home/zhangqian/rknn/examples/rknn_yolov11_demo_dfl_open/test_result.jpg";

    detect(model_path, image_path, save_image_path);
    return 0;
}

3)板端效果和时耗

在这里插入图片描述

在这里插入图片描述

本文章已经生成可运行项目
03-10
### RKNN神经网络推理引擎介绍 RKNN(Rockchip Neural Network)是一种专为嵌入式设备设计的轻量级神经网络推理引擎。该引擎支持多种Rockchip芯片,包括但不限于RK3566、RK3568、RK3588/RK3588S以及RV1103/RV1106等型号[^1]。 #### 支持特性 - **多平台兼容**:不仅限于上述提到的具体硬件平台,还能够适配其他基于ARM架构的计算单元。 - **高效能表现**:针对不同应用场景进行了优化,在保持较低功耗的同时提供高效的运算能力。 - **丰富的API接口**:通过简洁易用的应用程序编程接口(API),方便开发者快速集成并调用所需功能。 ### 使用方法概述 为了使开发人员更便捷地利用这一强大工具集完成项目目标,RKNN 工具链涵盖了从模型转换直至最终部署运行所需的全部环节: 1. **准备阶段** - 获取待迁移训练好的深度学习框架下的预训练权重文件(.h5,.pb,.pt等形式). 2. **量化处理** - 对浮点型参数实施整数化操作,减少存储空间占用率同时也加快了实际预测速度. 3. **编译过程** - 将经过前两步调整后的结构定义文档连同对应的权值一起输入给rknn-toolkit中的`convert`命令行实用程序来生成适用于特定SoC的目标二进制格式. 4. **加载至目标板卡** - 把刚刚得到的结果拷贝上传送至真实物理环境当中去测试验证效果如何. 5. **性能评估与调试** - 运行简单的应用程序来进行初步的功能性和效率方面的考量;必要时返回修改原算法或者重新设置某些超参以达到更好的平衡状态. ```bash # 安装 rknn-toolkit pip install rknn-toolkit==0.9.7.post1 --user # 转换 ONNX 模型RKNN 格式 rknn convert \ --model yolov5s.onnx \ -o yolov5s.rknn # 加载和运行 RKNN 模型 (Python API 示例) from rknn.api import RKNN rknn = RKNN() ret = rknn.load_rknn('./yolov5s.rknn') if ret != 0: print('Load RKNN model failed!') exit(ret) ret = rknn.init_runtime(target='rv11xx') # 或者 'rk3588' if ret != 0: print('Init runtime environment failed!') exit(ret) outputs = rknn.inference(inputs=[img]) ```
评论 57
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值