全志V853 NPU开发之Demo使用说明

news2024/11/28 10:34:59

上一章节中配置 NPU 扩展包后可以在 menuconfig 里看到两个 Demo 测试应用程序。这里我们来介绍一下怎么使用这两个 Demo。

YOLOV3

在 NPU Package 中我们提供了一个较为完整的 YOLOV3 Demo 作为测试,程序源码位于:

openwrt/package/npu/yolov3/src

这个 Demo 相较于 Lenet 的 Demo 增加了图片前处理、数据处理、后处理与图片打框的功能。可以将上传的图片物体打框标记并输出打框后的图片。

首先我们在 menuconfig 里选中 YOLOV3 的相关选项

可以看到这里选择了 yolov3 会出现 yolov3-model 这个选项,这个选项是提供一个测试使用的模型到系统中,文件较大,如果编译打包出现错误请参阅【FAQ 常见问题 - V853】查看或参考以下解决方法。

报错时的错误提示:

解决方法:修改板级目录下面的 sys_partition.fex 的 rootfs.fex 节点 45360 ==> 95744 。

测试 YOLOV3

首先我们准备一张图片,并把图片转换为 416*416 分辨率的图片。

使用 ADB 将图片下载到 root 目录

adb push 2.jpg root

在开发板上,切换文件夹到 root 文件夹,使用 ls 列出看看有没有 2.jpg 这个图片文件

cd /root

ls

可以看到,这里已经下载成功了,接下来运行 yolov3,格式是:

yolov3 <模型文件> <图片文件>

之前我们选中了 yolov3-model 模型包,模型已经安装到/etc/models/yolov3_model.nb了,所以在这里我们直接可以使用这个模型,执行

yolov3 /etc/models/yolov3_model.nb 2.jpg

可以看到识别到了 carmotorbike ,此时 ls 可以看到打标完成的图片 yolo_v3_output.bmp

可以使用 adb 上传图片到主机查看。

adb pull /root/yolo_v3_output.bmp

打开图片即可查看标注情况

如果运行出现错误,请确认图片格式是否为jpg,图片分辨率是否为 416x416

Error: Input size mismatch for 2.jpg, file data size:516672, expected:519168

Lenet

如果说深度学习有什么 HelloWorld,那一定是 Lenet。

在 NPU 扩展包中提供了一个 Lenet 的 Demo 程序。

这个 Demo 较为基础,演示了模型转换生成的模板代码如何集成到 Tina Linux 里。由于没有前处理与后处理,所以输入数据与输出数据均为二进制 tensor 文件。也正因为如此,所以可以将输出的 tensor 与仿真输出的 tensor 进行对比,验证是否有错误。

如果想要更完善的包括前处理与后处理的 Demo 可以查看 yolov3 Demo。

我们先 make menuconfig 找到 Lenet 选项,这里提供 lenet 主程序与 lenet-model 模型两个包,可以只选中主程序使用自己转换的模型测试。

在这里我们就使用扩展包提供的模型进行验证。先去 扩展包里找到测试数据 lenet_input_0.dat 并上传到开发板。

使用 ls 列出上传的数据

使用 lenet 命令运行测试模型

lenet <模型文件> <数据文件>
lenet /etc/models/lenet_model.nb lenet_input_0.dat

可以看到这里输出了 tensor output0_10_1.dat 文件

如果需要实现图片的输入与输出,需要基于这个模板增加图片前处理与数据后处理部分的代码。前处理将图片转为 tensor 输入,后处理解析 tensor 输出数据。

vpm_run

vpm_run 软件包是用于在开发板上测试运行的工具,一般用于开发板测试推理。而且可以通过参考 vpm_run 的流程,用户可以开发自己的 AI 应用程序,所以它可以看成是一套基于 AI 应用开发模板,只不过,它有自己的一些特点,

  • vpm_run 是可以作为一个通用模型运行环境,程序不需要修改,可以运行任何部署正确的NBG 模型文件.

  • vpm_run 基于 viplite 网络层 API,程序短小精悍。

  • vpm_run 具备默认的后处理程序 TOP5, 如果不满足你的算法要求,可以自行扩展。

我们先 make menuconfig 找到 vpm_run 选项,勾选,打包编译。这里我们同样勾选 lenet 选项,待会测试 vpm_run 使用,提供模型。

在开发板中,可以运行 vpm_run 查看支持的操作

vpm_run

可以看到,他需要一个 sample.txt 文件,定义如下

[network]                  # 模型的名称
./lenet_model.nb
[input]                    # 输入数据
./lenet_input_0.dat
[golden]                   # 标准输出数据,会与输出数据比对检查是否有偏差(可选)
./lenet_input_golden.dat
[output]                   # 输出数据
./lenet_output_data.dat

其中的 golden 标签代表的是标准输入,可以看作一个满分的输出,这个输出可以用预推理阶段生成的输出文件,也可以用仿真输出的文件。vpm_run 会比对这两个文件查看是否有错误产生。

vpm_run sample.txt

有些模型需要的内存较大,需要修改更大的内存,可以打开 openwrt/package/npu/vpm_run/src/vpm_run.c 修改分配的内存大小(viip_init(内存大小))。

多输入/多网络配置

多输入sample.txt文件配置,当只有一个nb模型但需要有两个输入时:

``` [network] ./network_binary.nb [input] ./iter_0_images_262_out0_1_3_640_640.tensor ./input_0.dat


多网络sample.txt文件配置,当需要一次运行多个nb模型时,不同nb以标签为界限:

 ```
[network]
 ./network_binary.nb
 [input]
 ./iter_0_images_262_out0_1_3_640_640.tensor

 [network]
 ./network_binary.nb
 [input]
 ./input_0.dat

常见问题

① 按照官网上的教程在V853上部署 lenet 模型,使用 vpm_run sample.txt 的时候出现segmentation fault ,如下图所示

读取sample.txt失败,检查一下vpm_run.c源码,查看获取文件名的换行符类型。

尝试将把sample.txt文件中的空格去掉,这是导致segmentation fault错误的原因之一。

windows操作系统的换行为:CR/LF或\r\n,而Linux的换行符为LF或\n。

② NPU模块vpm_run例程运行时sample.txt读取错误

编写sample.txt文件:

``` [network] ./network_binary.nb [input] ./iter_0_images_262_out0_1_3_640_640.tensor


将模型、输入文件、vpm_run例程传入板端

运行vpm_run例程:

./vpm_run -s sample.txt


报错LOG如下:

unsupported input file type=tenso. error input file type segmentation fault ```

报错为读取sample.txt失败,检查一下vpm_run.c源码,查看获取文件名的换行符类型,多是由于空格字符问题引起。

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

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

相关文章

Spark基础内容

Spark基本介绍 Spark是什么 定义 Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎. Spark与MapReduce对比 mapreduce架构图如下: MapReduce的主要缺点&#xff1a; 1- MapReduce是基于进程进行数据处理&#xff0c;进程相对线程来说&#x…

【数据结构—排序—交换排序】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、排序的概念及其运用 1、排序的概念 2、排序运用 3、 常见的排序算法 二、交换排序 1、冒泡排序 1.1算法讲解 1.2冒泡排序的实现&#xff1a; 1.2.1头文件的…

6.云原生之jenkins集成SonarQube

文章目录 搭建 SonarQube配置SonarQube创建sonar-token生成令牌查看jenkins暴露的NodePort端口创建Webhook 服务器将 SonarQube 配置添加到 ks-installer Jenkins集成SonarQube将 SonarQube 服务器添加至 Jenkinsjenkins配置SonarQubejenkins中配置SonarQube创建Jenkins凭证将 …

LDD学习笔记 -- Linux字符设备驱动

LDD学习笔记 -- Linux字符设备驱动 虚拟文件系统 VFS设备号相关Kernel APIs动态申请设备号动态创建设备文件内核空间和用户空间的数据交换系统调用方法readwritelseek 写一个伪字符设备驱动在主机上测试pcd(HOST)在目标板上测试pcd(TARGET) 字符驱动程序用于与Linux内核中的设备…

Docker使用扩展

日升时奋斗&#xff0c;日落时自省 目录 1、容器 1.1、容器的生命周期 1.1.1、容器OOM 1.1.2、容器异常退出 1.1.3、容器暂停 1.2、容器命令 1.2.1、创建容器 1.2.2、启动容器 1.2.3、容器日志 1.2.4、容器交互 1.2.5、容器停止 1.2.6、扩展 1.3、综合演示 2、存…

FPGA高端项目:纯verilog的 25G-UDP 高速协议栈,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案本协议栈的 1G-UDP版本本协议栈的 10G-UDP版本1G 千兆网 TCP-->服务器 方案1G 千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案 3、该UDP协议栈性能4、详细设计方案设计架构框图网络调试助手…

《Learning eBPF》读书笔记

文章目录 章节内容简介第1章 什么是ebpf&#xff0c;为什么它很重要&#xff1f;第2章 ebpf版hello world第3章 ebpf程序剖析ebpf虚拟机一个xdp的hello word例子c语言程序编译为ebpf字节码加载bpf程序到内核检查加载的程序运行时编译机器码附加到事件分离程序卸载程序 第4章 bp…

CAN物理层协议介绍

目录 ​编辑 1. CAN协议简介 2. CAN物理层 3. 通讯节点 4. 差分信号 5. CAN协议中的差分信号 1. CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519) &#xff0…

光明源@智慧公厕系统的功能介绍-详情可点击查看

什么是智慧公厕系统&#xff1f;智慧公厕系统是一种通过科技手段提升公共卫生设施管理和服务水平的解决方案。智慧公厕系统都有哪些功能呢&#xff1f;那么小编讲以光明源的角度来讲一下公厕系统都有哪些功能&#xff01; 光明源智慧公厕系统-实时监控和管理公厕 该系统使用各…

【leetcode】力扣算法之旋转图像【难度中等】

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 用例 输入&#xff1a; matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&…

【Spring实战】26 使用Spring Security 保护 Spring Boot Admin

文章目录 1. 定义1.集成流程1&#xff09;添加 Spring Boot Admin 依赖2&#xff09;配置 Spring Boot Admin3&#xff09;启动 Spring Boot Admin 服务4&#xff09;访问 Spring Boot Admin 服务5&#xff09;添加 Spring Security 依赖6&#xff09;配置 Spring Security7&am…

【书生大模型00--开源体系介绍】

书生大模型开源体系介绍 0 通用人工智能1 InternLM性能及模型2 从模型到应用 大模型成为目前很热的关键词&#xff0c;最热门的研究方向&#xff0c;热门的应用&#xff1b;ChatGPT的横空出世所引爆&#xff0c;快速被人们上手应用到各领域&#xff1b; 0 通用人工智能 相信使…

02、Kafka ------ 配置 Kafka 集群

目录 配置 Kafka 集群配置步骤启动各Kafka节点 配置 Kafka 集群 启动命令&#xff1a; 1、启动 zookeeper 服务器端 小黑窗输入命令&#xff1a; zkServer 2、启动 zookeeper 的命令行客户端工具 &#xff08;这个只是用来看连接的节点信息&#xff0c;不启动也没关系&#…

Hadoop3.3.5云服务器安装教程-单机/伪分布式配置

系列文章目录 华为云服务器试用领取 领取的试用云服务器在哪 Hadoop3.3.5云服务器安装教程-单机/伪分布式配置 文章目录 系列文章目录创建hadoop用户更新apt安装SSH、配置SSH无密码登陆安装Java环境安装 Hadoop3.3.5Hadoop单机配置(非分布式)Hadoop伪分布式配置运行Hadoop伪分…

【AI视野·今日Sound 声学论文速览 第四十二期】Fri, 5 Jan 2024

AI视野今日CS.Sound 声学论文速览 Fri, 5 Jan 2024 Totally 10 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers PosCUDA: Position based Convolution for Unlearnable Audio Datasets Authors Vignesh Gokul, Shlomo Dubnov深度学习模型需要大量干净的…

Windows.OpenSSL生成ssl证书配置到nginx

一、下载OpenSSL程序安装 到E:\soft\OpenSSL-Win64 二、打开一个CMD控制台窗口&#xff0c;设置好openssl.cnf路径 E: cd E:\soft\OpenSSL-Win64\bin set OPENSSL_CONFE:\soft\OpenSSL-Win64\bin\openssl.cnf 三、在当前目录 E:\soft\OpenSSL-Win64\bin 里创建两个子目录 m…

UVa12419 Heap Manager

题目链接 UVa12419 - Heap Manager 题意 内存以内存单元为基本单位&#xff0c;每个内存单元用一个固定的整数作为标识&#xff0c;称为地址。地址从0开始连续排列&#xff0c;地址相邻的内存单元被认为是逻辑上连续的。我们把从地址i开始的s个连续的内存单元称为首地址为i长度…

三代半导体材料有何区别

什么是半导体材料 半导体材料是制作半导体器件和集成电路的电子材料&#xff0c;是半导体工业的基础。利用半导体材料制作的各种各样的半导体器件和集成电路&#xff0c;促进了现代信息社会的飞速发展。 绝缘体、半导体和导体的典型电导率范围 半导体材料的研究开始于19世纪初…

行走在深度学习的幻觉中:问题缘由与解决方案

如何解决大模型的「幻觉」问题&#xff1f; 我们在使用深度学习大模型如LLM&#xff08;Large Language Models&#xff09;时&#xff0c;可能会遇到一种被称为“幻觉”的现象。没错&#xff0c;它并不是人脑中的错觉&#xff0c;而是模型对特定模式的过度依赖&#xff0c;这…

ChatGPT学习笔记——大模型基础理论体系

1、ChatGPT的背景与意义 近期,ChatGPT表现出了非常惊艳的语言理解、生成、知识推理能力, 它可以极好的理解用户意图,真正做到多轮沟通,并且回答内容完整、重点清晰、有概括、有条理。 ChatGPT 是继数据库和搜索引擎之后的全新一代的 “知识表示和调用方式”如下表所示。 …