RKNN模型部署(4)—— 模型部署


1、简介

   RKNN SDK为带有RKNPU的芯片平台提供C语言编程接口,用于用户部署RKNN模型。RK3588芯片适用SDK库中的/rknpu2/runtime的librknnrt.so。

  在虚拟机ubuntu环境解压rknpu2压缩包。安装交叉编译平台sudo apt install gcc-aarch64-linux-gnu g+±aarch64-linux-gnu。接着可以进入解压后example目录,修改编译脚本中的编译器名称。执行编译后会生成install目录,将其拷贝到RK3588平台运行。

  实际上rknpu2文件夹因为适配多种硬件平台,所以目录结构复杂。如果像我一样只需要在RK3588上进行部署,可以将3rdpart、runtime及感兴趣的样例目录拷贝出来单独组成自己的项目工程。

  像华为的AscendCL、英伟达的TensorRT一样,瑞芯微同样提供一套C语言API接口。用于模型部署时应用开发。比较特别的是瑞芯微提供通用API接口和零拷贝API接口(限RK356X/RK3588)。通用API接口按照异构编程规范,需要将数据拷贝到NPU运行时的内存空间。

2、 模型部署流程

  • 初始化上下文,需要先创建上下文对象和读取模型文件
rknn_context ctx;
model = load_model(model_path, &model_len);
ret = rknn_init(&ctx, model, model_len, 0, NULL);
\\使用opencv读取需要处理的图片,一定要将图片从BGR转换为RGB格式

cv::Mat orig_img = imread(img_path, cv::IMREAD_COLOR);
cv::cvtColor(orig_img, orig_img_rgb, cv::COLOR_BGR2RGB);
  • 创建输入
rknn_input inputs[1];
inputs[0].index = 0;
inputs[0].type = RKNN_TENSOR_UINT8;
inputs[0].size = img.cols*img.rows*img.channels();
inputs[0].fmt = RKNN_TENSOR_NHWC;
inputs[0].buf = img.data;
``
- 设置输入
```c
ret = rknn_inputs_set(ctx, io_num.n_input, inputs);
  • 执行模型
ret = rknn_run(ctx, nullptr);
  • 创建输出对象
rknn_output outputs[1];
  • 解析输出信息
rknn_outputs_get(ctx, 1, outputs, NULL);
float *buffer = (float *)outputs[i].buf;
  • 释放资源
rknn_outputs_release(ctx, 1, outputs);
rknn_destroy(ctx);
free(model);

来源: https://zhuanlan.zhihu.com/p/523627210

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人涮火锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值