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

   yolov13部署。

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

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

1 模型训练

  yolov13 训练参考官方代码。

2 导出 yolov13 onnx

   导出onnx修改以下几处,和之前的导出yolov8、yolov11、yolov12等方式一样。
第一处:修改导出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 = ["output1", "output2", "output3", "output4", "output5", "output6"]
        torch.onnx.export(self.model, dummy_input, "/root/zhangqian/ultralytics-main/yolov13n_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='yolov13n.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效果
在这里插入图片描述

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_yolov13_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_yolov13_demo_dfl_open/model/RK3588/yolov13n_80class_ZQ.rknn";
    char image_path[256] = "/home/zhangqian/rknn/examples/rknn_yolov13_demo_dfl_open/test.jpg";
    char save_image_path[256] = "/home/zhangqian/rknn/examples/rknn_yolov13_demo_dfl_open/test_result.jpg";

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

3)板端效果和时耗
在这里插入图片描述
在这里插入图片描述

这个时耗比较长,毫无疑问很多算子切换到cpu上进行的。
在这里插入图片描述

### 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,并根据不同应用场景需求选取最适合的技术路线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值