RK3588 NPU研究(一)

news2024/11/27 6:17:54
  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);

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

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

相关文章

C语言-atoi函数的模拟

模拟术语讲解 首先&#xff0c;需要定义一个标志位变量sign&#xff0c;用于表示转换结果的合法性1。定义一个函数My_atoi&#xff0c;用于实现atoi的功能1。在My_atoi函数中&#xff0c;首先遍历字符串&#xff0c;直到遇到第一个非空格字符1。如果第一个字符不是数字或正负号…

ROS安装教程(鱼香ROS快捷版)

文章目录 前言一、ROS版本二、ROS安装1.添加ROS源2.添加密钥3.安装ROS4.安装python依赖包&#xff08;可选&#xff09;5.初始化rosdep6.ROS 测试 总结 前言 对于初学者来说&#xff0c;ROS的安装往往是一个令人头疼的问题&#xff0c;复杂的步骤和网络问题常常成为入门的第一…

kubernetes-dashboard 安装配置

k8s 1.23以上的版本 https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 执行命令&#xff1a; kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 安装完成后&#x…

FSH6罗德与施瓦茨FSH6频谱分析仪

181/2461/8938产品概述&#xff1a; R&S FSH6频谱分析仪坚固耐用、方便易用&#xff0c;专为野外使用而设计。它重量轻、操作简单、设计合理且具有大量测量功能&#xff0c;是任何需要高效测量仪器进行户外工作的人不可或缺的工具。 R&S FSH6是一款手持式频谱分析仪&…

项目:USB键盘和鼠标的复合设备

我们的复合设备使用一个物理设备就可以完成多个功能。 使用复合设备同时完成USB键盘和鼠标功能&#xff0c;它的主要实现方式有两种&#xff0c; 第一个就是我们将多个设备描述符合并成一个&#xff0c;这个相对比较简单&#xff0c;我们只要根据相应的报告描述符处理数据就可…

基于springboot实现在线文档管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线文档管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;在线文档管理当然也不能排除在外。在线文档管理系统是以实际运用为开发背景&am…

3分钟教你最大化利用APP消息推送(Push)在运营中的优势

推送通知是指运营团队通过自有产品或外部工具&#xff0c;主动向用户的移动设备发送信息。用户可以直接在手机的锁屏和通知中心看到这些推送通知&#xff0c;点击通知中心的相关内容可以激活应用并跳转至特定页面。例如&#xff0c;我们在手机锁屏时接收到的微信消息&#xff0…

SSM框架学习——MyBatis关联映射

MyBatis关联映射 为什么要关联映射 实际开发中&#xff0c;对数据库操作常常会涉及多张表&#xff0c;所以在OOP中就涉及对象与对象的关联关系。针对多表操作&#xff0c;MyBatis提供关联映射。 关联关系概述 一对一&#xff1a;A类中定义B类的属性b&#xff0c;B类中定义A…

电脑常见故障检测方法与对应问题分析说明

电脑常见故障检测方法与对应问题分析说明 前言说明1、机器无法开机故障2、屏幕无法显示3、无法联网4、能开机但是无法进入系统&#xff0c;提示not boot5、USB接口无法识别U盘 前言说明 本文为小白向&#xff0c;许多内容属于经验学而非科学&#xff0c;还望大佬们轻喷。 如上…

Verilog语法之always语句学习

always语法是Verilog_HDL中最常用的一种语法。 always过程语句和语句块组成的&#xff0c;语法格式如下所示。 always(敏感信号1 or 敏感信号2.....) always实现组合逻辑和时序逻辑。用always实现组合逻辑要将所有的敏感信号加入敏感列表中&#xff1b;用always实现时序逻辑时…

为什么都说”一入Java深似海“?

引言 在当今数字化时代&#xff0c;编程已经成为一项至关重要的技能。而在众多编程语言中&#xff0c;Java以其广泛的应用领域和强大的功能特性&#xff0c;吸引了无数开发者的目光。无论是Web开发、移动应用还是大数据处理&#xff0c;Java都发挥着举足轻重的作用。然而&…

GDAL源码剖析(一)

GDAL源码剖析&#xff08;一&#xff09;_gdal 源码-CSDN博客 一、GDAL简介 GDAL官方网站http://www.gdal.org/&#xff0c;本文章中的基本内容都是参照官网中的信息&#xff0c;如有错误或者与官网中的内容冲突&#xff0c;以官网中的为正确。 在开始文章之前&#xff0c;我…

探索数字物流技术 2024中国国际展览会与您相约七月杭州

数字贸易创新引领合作动能 《十四五规划》明确指出关于“加快数字化发展&#xff0c;建设数字中国”要求&#xff0c;积极为全国数字物流链转型革新试水探路。全力发展以数字化为引领的现代产业体系,打造面向未来、全球的数字物流技术变革高地。数字化成为了物流和供应链企业推…

Redis实战(黑马点评:短信登录)

1.基于Session实现发送短信验证码 UserController: /*** 发送手机验证码*/PostMapping("code")public Result sendCode(RequestParam("phone") String phone, HttpSession session) {return userService.sedCode(phone,session);}UserServiceImpl: Overri…

[yolox]ubuntu上部署yolox的ncnn模型

首先转换pytorch->onnx->param模型&#xff0c;这个过程可以查资料步骤有点多&#xff0c;参考blog.51cto.com/u_15660370/6408303&#xff0c;这里重点讲解转换后部署。 测试环境&#xff1a; ubuntu18.04 opencv3.4.4(编译过程省略&#xff0c;参考我其他博客) 安装…

一个页面实现两个滚动条【前端】

一个页面实现两个滚动条【前端】 前言版权推荐一个页面实现两个滚动条最后 前言 2024-4-2 12:54:46 以下内容源自《【前端】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://jsss-1.blog.csdn.net …

25.死锁

一个线程如果需要同时获取多把锁&#xff0c;就容易产生死锁。 t1线程获得A对象锁&#xff0c;接下来想获取B对象的锁。 t2线程获得B对象锁&#xff0c;接下来想获取A对象的锁。 /*** 死锁demo* param args*/public static void main(String[] args) {Object a new Object(…

数字医疗:智慧医共体引领健康未来

随着科技的不断发展&#xff0c;数字医疗正在成为医疗行业的一场革命。数字化技术的应用不仅提高了医疗服务的效率和质量&#xff0c;还为人们带来了更便捷、智能的健康管理方式。在这个数字化时代&#xff0c;智慧医共体已经成为了健康未来的引领者。 数字医疗&#xff0c;顾…

超图新建三维数据集继续学习

1 新建三维数据集 之前操作过新建三维数据集&#xff0c;还不熟悉&#xff0c;继续熟悉&#xff1b; 现在有一个文件型的数据源&#xff0c;名为swtest1&#xff1b;它前面小图标上有UDX三个字母&#xff0c;表明这是一个UDX类型的数据源&#xff1b;在此数据源上右击&#x…

研发效能·创享大会—IDCF五周年专场

时光流转&#xff0c;IDCF即将迎来五周年的庆典。在这个意义非凡的时刻&#xff0c;我们精心筹备了一场盛大的聚会【研发效能创享大会—IDCF五周年专场】。 IDCF自2019年成立以来&#xff0c;携手百余位技术领头人共同打造DevOps技术学习平台&#xff0c;与30万社群伙伴联动&a…