HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(3) ---真机调试(实例分析)
PS:要转载请注明出处,本人版权所有。
PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。
前置说明
本文作为本人csdn blog的主站的备份。(BlogID=086)
本文发布于 2019-06-15 18:08:34,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=086)
环境说明
无
背景
本文建立前两篇的文章基础之上:
- 《HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(1) --- 环境搭建》
https://blog.csdn.net/u011728480/article/details/91125581 - 《HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(2) --- 模型生成及模型仿真(实例分析)》
https://blog.csdn.net/u011728480/article/details/91294917
本文将会以一个实例来进行分析。hisi svp sdk的基础之上。同时本文也是本系列文章的终章。
NNIE 使用流程(其实就是读其sdk文档)
hisi svp 整体框架
vision app
--------------------
mpi(MPP Program Interface)
--------------------
driver(ko)
--------------------
nnie(hardware)
从上述框架来说,我们要自己用的内容就是vision app 、mpi、以及nnie api
vision app就是做图像数据的准备以及结果处理,mpi做mmz内存分配(海思特有的内存空间),nnie做forward。
相关api 简介
/*
* mpp System init
*/
HI_MPI_SYS_Exit()
HI_MPI_VB_Exit()
//设置MPP 视频缓存 池 属性 。
HI_MPI_VB_SetConfig()
HI_MPI_VB_Init()
HI_MPI_SYS_Init()
//load model
//在mmz中分配一部分内存来存放model
HI_MPI_SYS_MmzAlloc()
//从mmz内存中解析模型
HI_MPI_SVP_NNIE_LoadModel()
//NNIE Param Init
//forward prepare
//------------------------根据model的配置,为每一段(这里你可以简单理解为层)的forward ctrl param , src Blob, dst Blob.也就是初始化SVP_NNIE_FORWARD_CTRL_S[],SVP_NNIE_FORWARD_WITHBBOX_CTRL_S[],SVP_SRC_BLOB_S[],SVP_DST_BLOB_S[]数组元素的值。
HI_MPI_SVP_NNIE_GetTskBufSize()//获取给定网络任务 各段 辅助内存
HI_MPI_SVP_NNIE_AddTskBuf()//记录TskBuf 地址 信息
//----------------给第一层送入预处理好的图片到SVP_SRC_BLOB_S
HI_MPI_SYS_MmzFlushCache()//刷新内存
HI_MPI_SVP_NNIE_Forward()//forward
HI_MPI_SVP_NNIE_Query()//查询forward任务是否完成
HI_MPI_SYS_MmzFlushCache()//刷新内存
//---------------解析HI_MPI_SVP_NNIE_Forward的参数astDst[],得到网络的最终输出
各种类型的forward其实hisi都已经有各个例子可以参考的。上面的总结也是我从它的例子中剥离出来的。我这里也想吐槽一下,hisi例子写的很好,就是封装的层数太多了,反而让人感觉很不爽。
NNIE 开发实例流程(其实就是参考其sample)
魔改hisi sample
在hisi sdk中,提供了多种网络的例子,这里以我的cnn 分类网络为例。
根据前文可以得到inst 的wk模型。以及一个预处理好的图片bin文件。
找到目标文件,smp/a7_linux/mpp/sample/svp/nnie/sample/sample_nnie.c,直接复制void SAMPLE_SVP_NNIE_Cnn(void)为我的函数,修改图片bin路径和wk路径。
作为新手,不建议去看其他的,直接改最后一部分,打印最后一层输出,直接和仿真的值进行对比。当然你熟悉后就必须自己一点点看懂,不然出错没有办法纠正。
我这里给个demo参考例子。结果打印:
仿真以及caffe输出值对比最后一层:
可以发现确实是对应上了,这就证明了这个网络至少跑出来的大方向是没问题了,剩下的就是自己组织优化的问题了。
注意
如果出现最后输出对应不上,先去检查图像输入对不对,也就是srcBlob的第一层是不是一样的,70%都是这里出问题了。
其次再去看打印的方式对不对。
最后看整个nnie器件你使用对不对。
后记
总结
要完成这个事情,需要对深度学习,嵌入式编程有一定基础才行。一般来说,都是算法出模型,嵌入式的人做这个事情,当然有兴趣的话都一起做也行。这里我想说的是这是一个学科交叉的事情,单单了解一个方向的知识都不行的。所以,一定要多沟通,才能够干好这个事情。
其实这也是嵌入式方向的人的一个契机,当你了解一些基本的深度学习知识,而且又掌握嵌入式相关的内容,肯定是非常不错的,毕竟这是一个非常有趣的事情。
参考文献
- 无
打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)
PS: 请尊重原创,不喜勿喷。
PS: 要转载请注明出处,本人版权所有。
PS: 有问题请留言,看到后我会第一时间回复。
HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(3) ---真机调试(实例分析)的更多相关文章
- [Javascript摸鱼记录] 关于js简单字符删减替换增加插入追加前中后处理
以前总是怕死js如其名,能让我入坑润不出来,然后最近被迫写点静态html,又要用到数值运算处理, 于是又开启了「好几十个标签栏解决一个问题」的"探索路程",顺便记录一下摸鱼结果希望 ...
- (转)The Neural Network Zoo
转自:http://www.asimovinstitute.org/neural-network-zoo/ THE NEURAL NETWORK ZOO POSTED ON SEPTEMBER 14, ...
- 论文笔记之:Progressive Neural Network Google DeepMind
Progressive Neural Network Google DeepMind 摘要:学习去解决任务的复杂序列 --- 结合 transfer (迁移),并且避免 catastrophic f ...
- 深度神经网络如何看待你,论自拍What a Deep Neural Network thinks about your #selfie
Convolutional Neural Networks are great: they recognize things, places and people in your personal p ...
- Recurrent Neural Network[survey]
0.引言 我们发现传统的(如前向网络等)非循环的NN都是假设样本之间无依赖关系(至少时间和顺序上是无依赖关系),而许多学习任务却都涉及到处理序列数据,如image captioning,speech ...
- (zhuan) Recurrent Neural Network
Recurrent Neural Network 2016年07月01日 Deep learning Deep learning 字数:24235 this blog from: http:/ ...
- Sony深度学习框架 - Neural Network Console - 教程(1)- 原来深度学习可以如此简单
“什么情况!?居然不是黑色背景+白色文字的命令行.对,今天要介绍的是一个拥有白嫩的用户界面的深度学习框架.” 人工智能.神经网络.深度学习,这些概念近年已经涌入每个人的生活中,我想很多人早就按捺不住想 ...
- Graph Embedding Review:Graph Neural Network(GNN)综述
作者简介: 吴天龙 香侬科技researcher 公众号(suanfarensheng) 导言 图(graph)是一个非常常用的数据结构,现实世界中很多很多任务可以描述为图问题,比如社交网络,蛋白体 ...
- 梳理检测论文-Refinement Neural Network
Single-Shot Refinement Neural Network for Object Detection 目录 1. motivation 2. RefineDet 解析(Network ...
- 【DKNN】Distilling the Knowledge in a Neural Network 第一次提出神经网络的知识蒸馏概念
原文链接 小样本学习与智能前沿 . 在这个公众号后台回复"DKNN",即可获得课件电子资源. 文章已经表明,对于将知识从整体模型或高度正则化的大型模型转换为较小的蒸馏模型,蒸馏非常 ...
随机推荐
- 使用私有gitlab搭建gitbook持续集成
目录 环境搭建 1. 安装 Node.js 2. 安装 gitbook 3. 安装 Gitlab Runner 4. 注册Runner gitbook 配置 1. 目录结构 2. 命令行 3. 插件 ...
- UUID算法:独一无二的标识符解决方案
引言 在分布式系统和大数据环境下,唯一标识符的生成和管理是一项关键任务.UUID(Universally Unique Identifier)算法应运而生,成为了解决重复数据和标识符冲突的有效工具.本 ...
- 计网学习笔记四 Bridge && Switch
在前面的学习中,我们学习了MAC和LAN.在一个LAN里可以通信是很不错的,我们可以用一些东西让它变得更加不错!那就是我们接下来学习的网桥和交换机,其中包括了一点802.1D机制. Bridge 网桥 ...
- WPF仿win10加载动画 可用于loading加载
直接上xaml 没有cs代码 (自己琢磨了好久感觉这样能接受) <UserControl x:Class="WpfApp1.Loading" xmlns="http ...
- egrep命令
egrep命令 egrep命令用于模式搜索,属于grep函数族,工作原理和grep -E一样,其将模式视为扩展正则表达式,并打印出与模式匹配的行,如果有多个文件具有匹配的模式,其还能显示每行的文件名. ...
- haproxy ssl证书配置
通常情况下,web应用程序的ssl证书放置于nginx的服务器,但很多时候前面会加一次负载均衡,使用HAProxy可以实现https的证书安全,从客户浏览器到HAProxy代理服务器之间为ssl加密传 ...
- wordpress设置固定链接404及伪静态配置
说明 最近在将wordpress设置中文章url修改为月份和名称型 之后访问文章出现404.原因是配有配置好apache的伪静态. 配置步骤 1.修改httpd.conf 我这里是centos7,默认 ...
- Clock题解
Clock 题意:给一些时间,24小时制,给一个初始出发时间,问在钟表上最少转多少度能把所有给的时间都经历一遍. 思路:分四种情况模拟. 注意: 求的是度数,所以最后要乘6转换. 3:00,转到15: ...
- GYM-A. Golden Spirit等
1.题目链接:Problem - A - Codeforces 题意:桥两边有2 * n个不能独立过桥的老人,老人想到对面休息 re 分钟后返回原位置,每次过桥需要花费 cr 分钟,问最少需要多长时间 ...
- win32-封装BeginPaint
Graphics* StartPaint(HWND win, HDC* hdc, PAINTSTRUCT* ps) { *hdc = BeginPaint(win, ps); return new G ...