RK3588 NPU研究(一)

  1. 使用NPU进行AI计算,具体对应模型推理

  2. 对应代码位置
    hardware/rockchip/rknpu2

  3. examples: yolo5 编译

    • 下载NDK工具https://developer.android.google.cn/ndk/downloads?hl=zh-cn
    • 源码中使用16b,测试可以使用16/17/18/19/20,不可以使用21,后续未测试
    • 修改:ANDROID_NDK_PATH=~/opt/android-ndk-r20b
    • 命令:bash build-android_RK3588.sh
    • 生成物:build目录下rknn_yolov5_demo,model/,lib/
  4. examples: yolo5 运行

    post process config: box_conf_threshold = 0.25, nms_threshold = 0.45
    Read meetting03.jpg ...
    img width = 3840, img height = 2160
    Loading mode...
    sdk version: 1.5.2 (c6b7b351a@2023-08-23T15:27:35) driver version: 0.9.2
    model input num: 1, output num: 3
      index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
      index=0, name=output, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003860
      index=1, name=283, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=491520, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
      index=2, name=285, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=163840, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003915
    model is NHWC input fmt
    model input height=640, width=640, channel=3
    resize with RGA!
    scal once run use 22.702000 ms
    once run use 20.701000 ms
    loadLabelName ./model/coco_80_labels_list.txt
    person @ (1482 475 1944 938) 0.704657
    person @ (792 604 1632 2116) 0.614134
    person @ (126 661 882 1815) 0.602546
    person @ (84 540 432 1096) 0.582360
    person @ (1290 428 1644 860) 0.570635
    person @ (1272 759 2784 2160) 0.494397
    person @ (2952 475 3834 1383) 0.484189
    person @ (1800 506 2340 968) 0.442070
    loop count = 1000 , average run  21.540229 ms
    emo model/RK3588/yolov5s-640-640.rknn meetting03.jpg                          <
    post process config: box_conf_threshold = 0.25, nms_threshold = 0.45
    Read meetting03.jpg ...
    img width = 1920, img height = 1080
    Loading mode...
    sdk version: 1.5.2 (c6b7b351a@2023-08-23T15:27:35) driver version: 0.9.2
    model input num: 1, output num: 3
      index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
      index=0, name=output, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003860
      index=1, name=283, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=491520, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
      index=2, name=285, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=163840, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003915
    model is NHWC input fmt
    model input height=640, width=640, channel=3
    resize with RGA!
    scal once run use 13.794000 ms
    once run use 21.535000 ms
    loadLabelName ./model/coco_80_labels_list.txt
    person @ (738 237 975 469) 0.704657
    person @ (396 303 816 1051) 0.614134
    person @ (57 327 444 897) 0.604937
    person @ (645 214 822 426) 0.601903
    person @ (42 270 216 551) 0.566727
    person @ (645 386 1389 1080) 0.486672
    person @ (1473 237 1911 691) 0.472939
    person @ (903 253 1173 482) 0.426558
    loop count = 1000 , average run  21.586659 ms
    

    在这里插入图片描述

  5. examples: yolo5 分析

    图像数据流程

    • model的输入格式是RGB888,大小是640x640,输入需要被识别文件为jpg,用opencv进行转换缩放
    • cv::Mat orig_img = cv::imread(image_name, 1);
    • cv::cvtColor(orig_img, img, cv::COLOR_BGR2RGB);
    • src = wrapbuffer_virtualaddr((void*)img.data, img_width, img_height, RK_FORMAT_RGB_888);
    • dst = wrapbuffer_virtualaddr((void*)resize_buf, width, height, RK_FORMAT_RGB_888);
    • IM_STATUS STATUS = imresize(src, dst);
    • inputs[0].buf = resize_buf;
    • 图像缩放使用的rga,4k rgb需要12ms,4k yuv需要9ms

    model运行流程

    • 加载模型、rknn初始化、获取rknn信息、执行rknn,获取结果、后期处理、结果释放、后期处理资源释放、rknn资源释放
    • unsigned char* model_data = load_model(model_name, &model_data_size);
    • ret = rknn_init(&ctx, model_data, model_data_size, 0, NULL);
    • ret = rknn_query(ctx, RKNN_QUERY_SDK_VERSION, &version, sizeof(rknn_sdk_version));
    • ret = rknn_query(ctx, RKNN_QUERY_IN_OUT_NUM, &io_num, sizeof(io_num));
    • ret = rknn_query(ctx, RKNN_QUERY_INPUT_ATTR, &(input_attrs[i]), sizeof(rknn_tensor_attr));
    • ret = rknn_query(ctx, RKNN_QUERY_OUTPUT_ATTR, &(output_attrs[i]), sizeof(rknn_tensor_attr));
    • ret = rknn_run(ctx, NULL);
    • ret = rknn_outputs_get(ctx, io_num.n_output, outputs, NULL);
    • post_process((int8_t*)outputs[0].buf, (int8_t*)outputs[1].buf, (int8_t*)outputs[2].buf,…);
    • ret = rknn_outputs_release(ctx, io_num.n_output, outputs);
    • deinitPostProcess();
    • ret = rknn_destroy(ctx);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源代码分享(17)—基于yalmip+cplex的微电网优化调度(附matlab代码)

1基本概念 微网&#xff08;Micro-Grid&#xff0c;MG&#xff09;是进行电能调度时常见的概念&#xff0c;作为组织各分布式单元的结构。微网概念的提出旨在实现分布式电源的灵活、高效应用&#xff0c;解决数量庞大、形式多样的分布式电源并网问题[8]。微网中集成了电源、储能…

DS1302时钟芯片

目录 DS1302简介 前言 DS1302内部结构 理解&#xff1a; DS1302引脚图 DS1302常用寄存器 寄存器控制指令 解释&#xff1a; 常用寄存器指令 DS1302控制时序 单字节读 代码辅助理解 单字节写 代码辅助理解 仿真案例 电路图 keil文件 DS1302简介 前言 DS1302…

Pycharm环境配置完整教程

目录 python解释器下载 检查是否正确安装 Pycharm下载 Pycharm环境配置 本文主要介绍python解释器安装、Pycharm环境配置以及运行第一个程序的零基础的教程&#xff0c;即使是python小白也能正确配置相应的python学习环境哦&#xff01; python解释器下载 官网地址&#…

在jupyter notebook中使用conda环境

在jupyter notebook中使用conda环境 1. 环境配置 conda activate my-conda-env # this is the environment for your project and code conda install ipykernel conda deactivateconda activate base # could be also some other environment conda install nb_cond…

java学习之路-数组定义与使用

目录 ​编辑 1.什么是数组 2.数组的创建及其初始化 2.1数组的创建 2.2数组的初始化 3.数组的使用 3.1数组元素访问 3.2遍历数组 4.数组是引用类型 4.1jvm的内存分布 4.2基本类型变量与引用类型变量的区别 4.3引用变量详解 4.4 null 5.数组的使用场景 5.1存储数据 5…

【网课必备】学浪视频下载到本地

学浪作为知识付费平台&#xff0c;拥有大量的课程&#xff0c;所以很多人在学浪上购买自己的课程&#xff0c;但是学浪官方没有提供下载选项&#xff0c;只可以在学浪客户端软件观看&#xff0c;并不是很方便 于是为了解决这一个需求&#xff0c;小白老师s开发了学浪视频下载到…

uniapp 开发之原生Android插件

开发须知 在您阅读此文档时&#xff0c;我们假定您已经具备了相应Android应用开发经验&#xff0c;使用Android Studio开发过Android原生。也应该对HTML,JavaScript,CSS等有一定的了解, 并且熟悉在JavaScript和JAVA环境下的JSON格式数据操作等。 为了插件开发者更方便快捷的开…

verdi出现的问题

仿真时Verdi出现的问题&#xff1a; User Defined system task or function ($fsdbDumpfile) registered during elaboration and used within the simulation has not been registered during simulation. 解决方法&#xff1a;在run脚本中加上以下设置 又遇到如下问题&#x…

基于kmeans的聚类微博舆情分析系统

第一章绪论 1.1研究背景 如今在我们的生活与生产的每个角落都可以见到数据与信息的身影。自从上十世纪八十年代的中后期开始&#xff0c;我们使用的互联网技术已经开始快速发展&#xff0c;近些年来云计算、大数据和物联网等与互联网有相领域的发展让互联网技术达到了史无前例…

揭秘阿里巴巴面试题:JVM垃圾回收存活算法和两次标记过程

大家好,我是你们的小米。今天我们来聊聊一个热门话题,那就是阿里巴巴的面试题:JVM垃圾回收存活算法和两次标记过程。作为一个热爱技术、乐于分享的小米,我将会带领大家一起深入探讨这个话题。 引用计数法 首先,我们来了解一下引用计数法。这是一种简单直观的垃圾回收算法…

备战蓝桥杯---刷杂题1

1.来个小定理&#xff08;上次DP的青蛙过河用过&#xff09; 事实上&#xff0c;假如他们的gcd&#xff01;1,那么P,q都可以表示成gcd的倍数&#xff0c;因此假如一个数不是gcd的倍数就不可以表示&#xff0c;若互质由裴蜀定理大于一定时一定可以表示出。 事实上为&#xff08…

关于 QSound播放wav音频文件,播放失败“using null output device, none available” 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/137264493 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

GaussDB云数据库极简版安装与使用-新手指南

一、前言 作为一款领先的企业级数据库管理系统&#xff0c;GaussDB 提供了强大的性能、高度可靠性和丰富的功能&#xff0c;是企业构建可靠、高性能的数据库解决方案的理想选择。 本文主要针对高校和个人测试环境&#xff0c;介绍极简版安装和使用过程&#xff0c;更加适合高…

护眼台灯哪个牌子好?护眼台灯品牌排行前十名推荐

台灯可以说家家必备的一盏灯具&#xff0c;如果家长有正在上学的孩子的更需要一款好的台灯&#xff0c;因为不管是看书、写字、阅读都离不开台灯的帮助&#xff0c;而且一款好的台灯不仅仅能够提供明亮充足的照明环境&#xff0c;而且还能起到保护视力健康&#xff0c;预防近视…

echarts实现炫酷科技感的流光效果

前言&#xff1a; echarts实现炫酷科技感的流光效果 效果图&#xff1a; 实现步骤&#xff1a; 1、引入echarts,直接安装或者cdn引入 npm i echarts https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js 2、封装 option方法&#xff0c;第一个数据是折线数据&a…

互联网轻量级框架整合之JavaEE基础I

不得不解释得几个概念 JavaEE SUN公司提出来的企业版Java开发中间件&#xff0c;主要用于企业级互联网系统的框架搭建&#xff0c;同时因为Java语言优质的平台无关性、可移植性、健壮性、支持多线程和安全性等优势&#xff0c;其迅速成为构建企业互联网平台的主流技术&#x…

AI预测福彩3D第24弹【2024年4月2日预测--第4套算法重新开始计算第10次测试】

今天继续对第4套算法进行测试&#xff0c;因为第4套算法已连续多期命中&#xff0c;相对来说还算稳定。好了&#xff0c;废话不多说了&#xff0c;直接上预测的结果吧~ 2024年4月2日福彩3D的七码预测结果如下 第一套&#xff1a; 百位&#xff1a;1 2 …

旅游管理系统|基于Springboot的旅游管理系统设计与实现(源码+数据库+文档)

旅游管理系统目录 目录 基于Springboot的旅游管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户管理 2、景点分类管理 3、景点信息管理 4、酒店信息管理 5、景点信息 6、游记分享管理 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xf…

【MySQL】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

郭天祥新概念51单片机(第四期读书笔记)

时钟周期、状态周期、机器周期、指令周期与晶振频率之间的关系 1、晶振频率与脉冲的关系 假设单片机的晶振频率是12MHz&#xff0c;那么它的一个脉冲为1/12微秒&#xff1b;晶振单位时间发出的脉冲则为&#xff1a; 12 ∗ 1 0 6 12*10^6 12∗106。 假设单片机的晶振频率是4MH…