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

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

yolov12 部署又来了

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

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

【onnx转rknn和测试代码】

【rknn板端部署C++代码】

1 模型训练

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

2 导出 yolov12 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 = ["output1", "output2", "output3", "output4", "output5", "output6"]
        torch.onnx.export(self.model, dummy_input, "./yolov12n_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='yolov12n.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。

import onnx
from onnxsim import simplify

model_path = 'yolov12n.onnx'
model_proto = onnx.load(model_path)
model_sim, check = simplify(model_proto)
onnx.save(model_sim, 'yolov12n_smi.onnx')

print('simplify finished.')

3 测试onnx效果

pytorch效果
在这里插入图片描述
onnx效果
在这里插入图片描述

4 onnx转rknn

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

5 rk3588板子测试yolov12模型

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

1)编译

cd examples/rknn_yolov12_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_yolov12_demo_dfl_open/model/RK3588/yolov12n_zq.r";
    char image_path[256] = "/home/zhangqian/rknn/examples/rknn_yolov12_demo_dfl_open/test.jpg";
    char save_image_path[256] = "/home/zhangqian/rknn/examples/rknn_yolov12_demo_dfl_open/test_result.jpg";

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

3)板端效果和时耗

在这里插入图片描述

在这里插入图片描述
这个时耗非常高,查看转rknn时的日志,很多操作切换到cpu上进行计算。
在这里插入图片描述


http://www.kler.cn/a/567377.html

相关文章:

  • 大模型应用案例 | 大模型+金融运维,擎创携手某证券创新运维能力新范式
  • Proser:新增CRC计算辅助功能
  • 从UNIX到Linux:操作系统进化史与开源革命
  • 加油站小程序实战05地图加载
  • 计算机毕业设计SpringBoot+Vue.js社团管理系统(源码+文档+PPT+讲解)
  • 如何在工控机上实现机器视觉检测?
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-loss.py
  • Kubernetes (K8S) 高效使用技巧与实践指南
  • MySQL 主从同步配置及操作步骤
  • 20250226-代码笔记05-class CVRP_Decoder
  • (十 四)趣学设计模式 之 策略模式!
  • 蓝桥杯试题:二分查找数组元素
  • Leetcode-最大矩形(单调栈)
  • 苹果与小米破冰合作:iPhone 16e全面支持Find My网络,跨生态互通实现技术性突破
  • springboot、deepseek4j、bge-m3和milvus
  • Airflow和PySPARK实现带多组参数和标签的Amazon Redshift数据仓库批量数据导出程序
  • 【网络】数据链路层(以太网帧格式、MTU、ARP)、NAT、内网穿透
  • vue3 keep-alive 页面切换不触发onActivated和onDeactivated方法周期
  • Channel State Information 信道状态信息
  • ESP32+Mixly+LED交通信号灯模块