RKNPU2通用API和零拷贝API

news2024/11/26 14:43:12

RKNPU2通用API

通用API接口按照异构编程规范,需要将数据拷贝到NPU运行时的内存空间。

通用API部署流程

  • 初始化上下文,需要先创建上下文对象和读取模型文件

    rknn_context ctx;
    model = load_model(model_path, &model_len);
    ret = rknn_init(&ctx, model, model_len, 0, NULL);
    \\使用opencv读取需要处理的图片,一定要将图片从BGR转换为RGB格式
    
    cv::Mat img = imread(img_path, cv::IMREAD_COLOR);  // 读取图片数据,并保存在img
    cv::cvtColor(img, img, 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;			// 把img拷贝到inputs[0].buf
    ``
    - 设置输入
    ```c
    ret = rknn_inputs_set(ctx, io_num.n_input, inputs);  // 把inputs数据拷贝到ctx对象当中
    
  • 执行模型

    ret = rknn_run(ctx, nullptr);
    
    
  • 释放资源

    rknn_outputs_release(ctx, 1, outputs);
    rknn_destroy(ctx);
    free(model);
    
    

在这里插入图片描述

RKNPU2零拷贝API

通用API需要利用rknn_inputs_set设置输入,零拷贝API则直接将数据拷贝到之前申请好的内存即可。

零拷贝API部署流程

  • 初始化上下文,需要先创建上下文对象和读取模型文件

    rknn_context ctx;
    model = load_model(model_path, &model_len);
    ret = rknn_init(&ctx, model, model_len, 0, NULL);
    \\使用opencv读取需要处理的图片,一定要将图片从BGR转换为RGB格式
    
    cv::Mat img = imread(img_path, cv::IMREAD_COLOR);  // 读取图片数据,并保存在img
    cv::cvtColor(img, img, cv::COLOR_BGR2RGB);
    
    
  • 创建输入

    // 调用rknn_create_mem接口申请内存
    input_mems[0]   = rknn_create_mem(ctx, input_attrs[0].size_with_stride);
    ...
    // 调用rknn_set_io_mem接口让NPU使用已经申请的内存
    rknn_set_io_mem(ctx, input_mems[0], &input_attrs[0]);
    
  • 执行模型

    ret = rknn_run(ctx, nullptr);
    
    
  • 释放资源

    rknn_destroy_mem(ctx, input_mems[0]);
    rknn_destroy(ctx);
    free(model);
    
    

在这里插入图片描述

速度对比

warmup轮数50,循环推理1000次,计算平均耗时,包括预处理和后处理的总时间。npu只用了一个核心。

型号速度
通用API30-32ms
零拷贝API30-31ms

来源于https://blog.csdn.net/weixin_43337573/article/details/131817935

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/980053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集合的进阶学习

集合体系结构 Collection 单列集合 包含List Set List 包含ArrayList LinkedList Set包含HashSet TreeSet HashSet包含LinkedHashSet List系列集合:添加的元素是有序的、可重复、有索引 Set系列集合:添加的元素是无序的、不重复、无索引 Collectio…

华为云云服务器评测|在Docker环境下部署Mysql数据库

华为云云服务器评测|在Docker环境下部署Mysql数据库 一、前言1.1 云耀云服务器L实例简介1.2 Mysql数据库简介 二、本次实践介绍2.1 本次实践简介2.2 本次环境规划 三、购买云耀云服务器L实例3.1 登录华为云3.2 购买云耀云服务器L实例3.3 查看云耀云服务器L实例状态3…

Windows wsl2安装Ubuntu

wsl(Windows Subsystem for Linux)即适用于Windows的Linux子系统,是一个实现在Windows 10 / 11上运行原生Linux的技术。 wsl2 为其迭代版本,可以更好的在Windows上运行Linux子系统。 这里以 Windows 11 安装Ubuntu作为示例。 开启…

浅识java多线程

目录 一 进程和线程定义 二 创建线程的种类 (1)继承java.lang.Thread (2)实现java.lang.Runnable接口 三 多线程 (1)继承java.lang.Thread多线程 (2)实现java.lang.Runnable…

vmware fusion12共享文件夹到虚拟机window10

文章目录 一、window10虚拟机安装VMware Tools二、MAC配置共享文件夹三、使用 一、window10虚拟机安装VMware Tools vmware fusion—虚拟机----安装VMware Tools–一路下一步 确认安装 双击进行安装 一路下一步,傻瓜式安装 二、MAC配置共享文件夹 设置—系…

2023年高教社杯全国大学生数学建模竞赛参赛事项注意

MathClub数模资源,含专属思路 资源链接:点击这里获取众多数模资料、思路精讲、论文模板latex和word、学习书籍等 2023高教社杯数学建模国赛–赛前准备 一年一度的数学建模国赛要来啦!!!小编仔细阅读了比赛官方网站上…

【Java】线程都有哪几种状态

文章目录 前言传统线程模型(操作系统)中线程状态Java线程中的状态线程的运行流程 前言 首先我们要知道,在传统(操作系统)的线程模型中线程被分为五种状态,在java线程中,线程被分为六种状态。 …

使用客户支持自动化,您的电子商务收益稳了

经营电子商务业务涉及处理各种任务,从营销和库存管理到客户支持和数据分析。这些职责的复杂性可能是压倒性的,即使有一个专门的团队。 聊天机器人可以通过指导您的客户完成购买过程并回答他们有关产品的问题来提供更好的体验。例如SaleSmartly&#xff…

房地产推广传单制作攻略,打造让人惊艳的电子传单

随着互联网的发展,传统的纸质传单已经逐渐被电子版传单所取代。电子版传单不仅可以节省成本,还可以更好地展示房产信息。在传统的设计软件中制作电子版传单需要一定的门槛,但是现在有了乔拓云网的后台,设计电子版房产H5传单变得简…

Android——数据存储(二)(二十二)

1. SQLite数据库存储 1.1 知识点 (1)了解SQLite数据库的基本作用; (2)掌握数据库操作辅助类:SQLiteDatabase的使用; (3)可以使用命令操作SQLite数据库; …

RabbitMQ:hello结构

1.在Linux环境上面装入rabbitMQ doker-compose.yml version: "3.1" services:rabbitmq:image: daocloud.io/library/rabbitmq:managementrestart: alwayscontainer_name: rabbitmqports:- 6786:5672- 16786:15672volumes:- ./data:/var/lib/rabbitmq doker-compos…

Vue框架--Vue中的样式绑定

1.Vue绑定class样式属性(内部样式) 这里我们介绍三种Vue关于绑定class属性的操作。 ①.字符串写法:适用于:样式的类名不确定,需要动态指定 ②.数组写法:适用于:要绑定的样式个数不确定、名字也不确定 ③.对象写法:

vscode 调试debug rust代码的时候,中文乱码的解决办法

上次也是同样的问题,解决了。今天又遇到,我还以为是项目代码用了什么高深的地方,其实用chcp 65001,都可以解决。 一种解决方法是: 但建议不要用这种方法,因为会引起其他软件不能用(或者出问题…

山西电力市场日前价格预测【2023-09-07】

日前价格预测 预测明日(2023-09-07)山西电力市场全天平均日前电价为331.72元/MWh。其中,最高日前电价为461.61元/MWh,预计出现在19: 30。最低日前电价为254.50元/MWh,预计出现在12: 45。 价差方向预测 1: 实…

stm32同芯片但不同flash工程更换Device出现报错

目录 1. 问题描述2. 解决方案 1. 问题描述 stm32同芯片但不同flash工程更换Device出现报错 2. 解决方案 更换Device,我是从ZE换为C8: 把这个从HD更换为MD 解决!

3D点云处理:Opencv Pcl实现深度图转点云(附源码)

文章目录 0. 测试效果1. 代码实现文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_0. 测试效果 处理结果1. 代码实现 文章中提供的深度图像,深度图像一般以.tiff和.png保存,可以通过Opencv中的

Echarts图表跟随父容器的变化自适应

如果页面中有多个图表 隐藏/展开左边侧边栏echarts图表自适应 <div class"line"><div class"title">制冷站关键参数</div><div id"chartLine1" style"width: 100%;height:85%;"></div></div><…

生成树STP中的概念

在数据结构中&#xff0c;有一个方法叫做最小生成树。有环的我们常称为图。将图中的环破了&#xff0c;就生成了树。在计算机网络中&#xff0c;生成树的算法叫作 STP&#xff0c;全称 Spanning Tree Protocol。 Root Bridge&#xff0c;也就是根交换机。这个比较容易理解&…

卖家福利!第三方物流兼容亚马逊日本站运输管理功能!

亚马逊日本站发布公告称外部解决方案提供商Redo Bong LLC提供的库存和运输管理应用程序 “maru9”中添加了与亚马逊 “Marketplace Shipping Service”兼容的运输管理功能&#xff0c;以下是公告内容&#xff1a; 外部解决方案提供商Redo B…

怎么解决期权手续贵的问题?

在开通50ETF期权交易权限之前&#xff0c;券商可能会要求您参加相关的培训或考试&#xff0c;以确保您了解ETF期权交易的基本概念和交易规则&#xff0c;特别是期权手续费的问题&#xff0c;在你开之前&#xff0c;需要咨询协商价格&#xff0c;符合你的心理预期再去开通&#…