RKNPU2通用API和零拷贝API

news/2024/7/24 5:20:16 标签: RKNN

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.niftyadmin.cn/n/5005397.html

相关文章

jQuery成功之路——jQuery动画效果和遍历效果概述

一、jQuery动画效果 1.1显示效果 方法 方法名称解释show([speed],[easing],[fn]])显示元素方法hide([speed],[easing],[fn]])隐藏元素方法toggle([speed],[easing],[fn])切换元素方法,显示的使之隐藏,隐藏的使之显示 参数 参数名称解释speed三种预…

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

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

Linux命令200例:who用于显示当前登录到系统的用户信息

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

c语言字符串相关函数的分析

c语言中&#xff0c;常见的字符串相关函数主要分为两类&#xff1a; 1.与字符串长度无关的函数&#xff0c;如strcpy&#xff0c;strcat&#xff0c;strcmp。 2.与字符串长度有关的函数&#xff0c;如strlen&#xff0c;strncpy&#xff0c;strncat&#xff0c;strncmp。 st…

【C++从入门到精通】第0篇:简介

文章目录 0.1 本专栏的介绍0.1.1 专栏架构0.1.2 目标0.1.3 充分利用本教程0.1.4 常见问题0.2 编程语言简介0.2.1 机器语言0.2.2 汇编语言0.2.3 高级语言0.2.4 规则、最佳做法和警告0.3 C/C++简介0.3.1 C++0.3.2 C和C++的哲学0.4 C++开发简介0.4.1 步骤1:定义要解决的问题0.4.2…

三维数据Ply格式介绍与读取

三维数据Ply格式介绍与读取 PLY文件格式是在1990年代中期由斯坦福大学的一组研究人员开发的。它已经发展成为最广泛使用的3D数据文件格式之一。该文件格式有ASCII版本和二进制版本。在需要文件大小和处理效率的情况下,首选二进制版本。ASCII版本使得调试变得非常容易。在这里…

打造高效等级查询系统

在现代教育体系中&#xff0c;考试等级查询系统是学生、家长和校园必不可少的工具。易查分是一款功能强大、易于使用的在线成绩查询平台&#xff0c;可以帮助学生和家长方便查询学生的考试成绩和等级&#xff0c;了解学习情况&#xff0c;从而更好的制定学习计划和提供必要的支…

裙式给料机的全球市场在2030年前将达到64亿美元!

裙式给料机&#xff0c;又称旋翼式给料机或喂料机&#xff0c;是一种结构独特的连续式给料设备&#xff0c;主要用于粗碎或中碎物料的过程。其核心部分为带有旋翼的裙式料斗&#xff0c;通过裙式料斗的旋转&#xff0c;将物料均匀地送入后续的破碎设备中。这种给料机的特点是结…