全志V853 NPU 系统介绍

news2025/2/21 21:47:04

NPU 系统介绍

V853 芯片内置一颗 NPU,其处理性能为最大 1 TOPS 并有 128KB 内部高速缓存用于高速数据交换,支持 OpenCL、OpenVX、android NN 与 ONNX 的 API 调用,同时也支持导入大量常用的深度学习模型。

NPU 系统架构

NPU 的系统架构如下图所示:

在这里插入图片描述

上层的应用程序可以通过加载模型与数据到 NPU 进行计算,也可以使用 NPU 提供的软件 API 操作 NPU 执行计算。

NPU包括三个部分:可编程引擎(Programmable Engines,PPU)、神经网络引擎(Neural Network Engine,NN)和各级缓存。

可编程引擎可以使用 EVIS 硬件加速指令与 Shader 语言进行编程,也可以实现激活函数等操作。

神经网络引擎包含 NN 核心与 Tensor Process Fabric(TPF,图中简写为 Fabric) 两个部分。NN核心一般计算卷积操作, Tensor Process Fabric 则是作为 NN 核心中的高速数据交换的通路。算子是由可编程引擎与神经网络引擎共同实现的。

NPU 支持 UINT8,INT8,INT16 三种数据格式。

NPU 模型转换

NPU 使用的模型是 NPU 自定义的一类模型结构,不能直接将网络训练出的模型直接导入 NPU 进行计算。这就需要将网络训练出的转换模型到 NPU 的模型上。

NPU 的模型转换步骤如下图所示:

在这里插入图片描述

NPU 模型转换包括准备阶段、量化阶段与验证阶段。

准备阶段

首先我们把准备好模型使用工具导入,并创建配置文件。

这时候工具会把模型导入并转换为 NPU 所使用的网络模型、权重模型与配置文件。

配置文件用于对网络的输入和输出的参数进行描述以及配置。这些参数包括输入/输出 tensor 的形状、归一化系数 (均值/零点)、图像格式、tensor 的输出格式、后处理方式等等。

量化阶段

由于训练好的神经网络对数据精度以及噪声的不敏感,因此可以通过量化将参数从浮点数转换为定点数。这样做有两个优点:

(1)减少了数据量,进而可以使用容量更小的存储设备,节省了成本;

(2)由于数据量减少,浮点转化为定点数也大大降低了系统的计算量,也提高了计算的速度。

但是量化也有一个致命缺陷——会导致精度的丢失。

由于浮点数转换为定点数时会大大降低数据量,导致实际的权重参数准确度降低。在简单的网络里这不是什么大问题,但是如果是复杂的多层多模型的网络,每一层微小的误差都会导致最终数据的错误。

那么,可以不量化直接使用原来的数据吗?当然是可以的。

但是由于使用的是浮点数,无法将数据导入到只支持定点运算的 NN 核心进行计算,这就需要可编程引擎来代替 NN 核进行计算,这样可以大大降低运算效率。

另外,在进行量化过程时,不仅对参数进行了量化,也会对输入输出的数据进行量化。如果模型没有输入数据,就不知道输入输出的数据范围。这时候我们就需要准备一些具有代表性的输入来参与量化。这些输入数据一般从训练模型的数据集里获得,例如图片数据集里的图片。

另外选择的数据集不一定要把所有训练数据全部加入量化,通常我们选择几百张能够代表所有场景的输入数据就即可。理论上说,量化数据放入得越多,量化后精度可能更好,但是到达一定阈值后效果增长将会非常缓慢甚至不再增长。

这里是一个因为错误的量化导致精度丢失并识别失败的案例:

在这里插入图片描述

而正常情况应该是这样的:

在这里插入图片描述

验证阶段

由于上一阶段对模型进行了量化导致了精度的丢失,就需要对每个阶段的模型进行验证,对比结果是否一致。

首先我们需要使用非量化情况下的模型运行生成每一层的 tensor 作为 Golden tensor。输入的数据可以是数据集中的任意一个数据。然后量化后使用预推理相同的数据再次输出一次 tensor,对比这一次输出的每一层的 tensor 与 Golden tensor 的差别。

如果差别较大可以尝试更换量化模型和量化方式。差别不大即可使用 IDE 进行仿真。也可以直接部署到 V853 上进行测试。

此时测试同样会输出 tensor 数据,对比这一次输出的每一层的 tensor 与 Golden tensor 的差别,差别不大即可集成到 APP 中了。

模型转换实操

详见:NPU 转换 YOLO V3 模型

NPU 模型的部署

NPU 系统的模型部署流程一般包括以下四个部分:

在这里插入图片描述

数据预处理

数据预处理即将数据处理到适合模型使用的过程。

这里就以一个图像主体识别案例来举例:摄像头捕获到了图像数据,其数据格式是YUV的,而我们的模型使用的输入数据是RGB的数据,所以需要使用前处理将 YUV 数据转换到 RGB。

模型部署实操

接下来是将模型加载到 NPU 内,初始化 NPU 的环境与分配内存,然后将之前预处理的数据交给 NPU 进行计算。计算后 NPU 会输出一个 tensor 数据,这时候就需要数据后处理,将 tensor 数据转换为具体的坐标与类型,就可以反馈到上层应用程序做应用的处理了。

部署实操详见:NPU 模型的部署

FAQ

(1)NPU 支持调用算子级别的运算吗?支持哪些算子?

NPU 默认使用的是网络级别的调用,但是 NPU 同时也支持算子级别的调用。不过由于直接调用算子导致数据需要到内存里交换,不能通过 NPU 内置的SRAM交换,大大降低了效率,不推荐这样的做法。

NPU 使用的是双算子结构,其中的神经网络引擎使用的是硬算子,其性能很高,速度很快;而可编程引擎属于软算子,可以覆盖硬件算子没有支持的一些算子结构。硬算子覆盖了大部分的卷积操作。而软算子可以通过编程实现算子。具体的算子支持表格可以到文档《Operation Mapping and Support》查询。

(2)NPU 是否支持 FP16,FP32?

不支持。

(3)NPU 支持多模型运行吗?

支持多模型运行

(4)是否可以使用自己的量化函数量化?

可以的,只需要输出的量化表符合格式即可。

(5)NPU 支持的模型

V853 支持的常用深度学习框架模型有:

  • TensorFlow
  • Caffe
  • TFLite
  • Keras
  • Pytorch
  • Onnx NN
  • Darknet
  • and so on…

原贴链接:https://v853.docs.aw-ol.com/npu/dev_npu/
资源获取、问题讨论可以到全志在线开发者社区进行:https://www.aw-ol.com
全志及开发者最新动态可以关注全志在线微信公众号

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

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

相关文章

猿创征文| 六款我的开发者宝藏工具箱

目录 No.1 | 亿图图示 简介: 推荐之处: 下载途径: Show time: No.2 | 飞书 简介: 推荐之处: 下载途径: Show time: No.3 | 迅捷PDF转换器 简介: 推荐之处: …

Allegro SigXplorer 等长设置方法-比较简单

使用方法示一: 1、如图SDRAM的连线U2到U5、U6和U7的地址线均需要设置等长,常规我们对每个网络设置pin pair,会比较繁琐,设过的人都知道。 使用方法二: 2、开始设置,打开规则管理器,在电气规则…

HTML爱心代码 | 一起体验理工男的极致浪漫(电视剧男主同款)

写在前面 大家好,我是陈橘又青,今天中午刷微博,看到最近《点燃我温暖你》中男主角——理工男李峋的爱心代码撩到了无数人,于是把代码开源分享给大家。 文章目录写在前面运行示例完整代码保姆级运行教学添加背景图片修改爱心颜色运…

软件工程毕业设计课题(17)基于python的毕业设计python鲜花水果商城系统毕设作品源码

项目背景和意义 目的:伴随着互联网技术的不断发展和完善,在人们的生活和工作的各个方面,互联网都有着非常重大的影响。伴随着国内电子商务行业的迅猛发展,消费者现在能够轻松的实现足不出户的,仅仅通过网络购物平台就可…

这些包括我在内都有的Python编程陋习,趁早改掉

B站|公众号:啥都会一点的研究生 相关阅读 整理了几个100%会踩的Python细节坑,提前防止脑血栓 整理了十个100%提高效率的Python编程技巧,更上一层楼 Python-列表,从基础到进阶用法大总结,进来查漏补缺 Python-元组&…

pytest参数化详解

文章目录一.概念二.单个参数三.多个参数案例1案例2:使用py文件存放测试数据案例3:使用yaml文件存放测试数据案例4:使用json文件存放测试数据四.对测试类参数化案例1一.概念 参数化,就是把测试过程中的数据提取出来,通过参数传递不同的数据来驱动用例运行…

健身房信息管理系统(PHP+Html+MySQL)

3.需求分析 3.1 健身房管理系统功能需求 健身房管理信息系统,提供动作教学,健身基本动作可视化,健身知识层次化,一个完整的健身房管理系统,为健身爱好者对健身知识的了解和健身动作的了解提供了便利,系统应…

网络协议:透彻解析HTTPS协议

本篇内容包括:HTTPS 协议概述,SSL 与 TLS(SSL 与 TLS 概述、SSL证书 和 SSL 与 TLS 二者之间关系),以及 HTTPS 下浏览器访问一个网站的全过程的内容! 文章目录一、HTTPS 协议概述二、SSL 与 TLS1、SSL 与 T…

两种让python输出更加美观的方式,三分钟看完就会

嗨害大家好鸭!我是小熊猫❤ 最近要给大家持续带来干货输出啦! 赶紧收藏起来,以后查漏补缺要用到的喔~ 源码、资料电子书点击这里 1.输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 (第三种方式是使用文件对象的 write…

Web前端开发技术课程大作业——南京旅游景点介绍网页代码html+css+javascript

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

二选一工作器引入的Verilog语法

二选一工作器引入的Verilog语法 ——XILINX 基于BASYS 3板 状态机、线性序列机、学习仿真 DDS:矩阵键盘、DAC,LCD/数码管,这些模块间的接口逻辑 常见的接口设计:SPI、IIC、UART 学习:三八译码器、计数器电灯、学习开发工具的使用…

年轻人不用太过于努力

周末和一个毕业一年多的朋友聊天,我随口问了一句「你有什么想跟我分享的」,然后他就说了上面的那句话。「年轻人不用太过于努力」和读者聊天会做成我的一个公众号专栏,内容有也会越来越丰富,全部的内容都会收录到我的程序人生专栏…

RK3568平台开发系列讲解(音频篇)Audio 音量控制流程

🚀返回专栏总目录 文章目录 一、安卓音量控制流程简介二、什么是AudioService沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍安卓音量控制流程。 一、安卓音量控制流程简介 Android音频系统,分为数据流和策略两部分。 数据流描述了音频数据从数据源…

【C++哈希表】哈希碰撞,线性探测,二次探测 ,荷载因子,闭散列的实现及string需要特化

目录 1.哈希概念 2.哈希碰撞 3.解决哈希冲突 4.哈希表闭散列实现 框架: 4.3插入 1.哈希概念 线性表以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。线性表查找…

首届数据安全大赛初赛web

文章目录easy_nodeeasy_webeasy_phar刮刮乐my_cloudeasy_node 访问src得到源码 第一步需要伪造admin用户 可以看到都是通过jwt进行加密解密 很容易想到jwt的几种攻击方式,可以参考下文章https://blog.csdn.net/miuzzx/article/details/111936737 首先试下改为n…

Linux篇【4】:Git,Gitee,GitHub

在 Linux 系统中,如何将普通源文件和普通头文件上传到 Gitee ? Git 是一个分布式的版本控制器,目前可以理解成百度云盘,其次,在 Linux 系统中,Git 也是一个软件/工具/指令,在 Windows 系统中&a…

212 - 218. MySQL索引的基本用法

1.索引的简介 1.1 索引的概念 是数据库对象,实现数据库快速查询 1.2 为什么使用索引 实现数据库快速查询,提高查询速度 1.3 索引的分类 a.普通索引 最基本的索引,对字段数据的类型和值没有任何限制,数据类型可以任意,…

电脑技巧:Win10自带的6个实用功能,你都会用吗

目录 1、系统自带计算器 2、Win10自带截图功能 3、 Win10自带的手写输入 4、历史剪贴板 5、定时提醒 6、自带录屏功能 1、系统自带计算器 系统里自带了一个计算器大家都知道,打开是这个样子。 但当你点击计算器左上角的三个横杠图标后会发现这个计算器功能非常强大。…

Python画爱心——谁能拒绝用代码敲出来会跳动的爱心呢~

还不快把这份浪漫拿走!!节日就快到来了,给Ta一个惊喜吧~ 今天给大家分享一个浪漫小技巧,利用Python制作一个立体会动的心动小爱心 成千上百个爱心汇成一个大爱心,从里到外形成一个立体状,给人视觉上的冲击…

phy层深入了解编码

1,我们知道mac层通过MDI来访问phy层的,那么phy层到光模块数据是怎么处理的呢。从下面这个图中可以看出基本的关系: serdies接口说明: Medium Independent Interface (MII): 介质无关接口。提供公共接口,屏蔽多个物理…