HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(2) --- 模型生成及模型仿真(实例分析)
PS:要转载请注明出处,本人版权所有。
PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。
前置说明
本文作为本人csdn blog的主站的备份。(BlogID=085)
本文发布于 2019-06-08 10:44:29,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=085)
环境说明
无
背景
本文建立在上文环境配置的基础上继续。(上文链接:https://blog.csdn.net/u011728480/article/details/91125581)
本文将会以一个实例来进行分析。同时本文的教程都是建立在《HiSVP 开发指南.pdf》基础上的。
NNIE 模型生成
NNIE 新建工程
File 新建NNIE工程,选择MinGW GCC 空工程即可。
NNIE Mapper 配置文件建立
File 新建nnie mapper配置文件,如下图:
双击这个mapper文件,你可以进入配置页面,如下图,其相关的参数和选项要按照《HiSVP 开发指南.pdf》的NNIE mapper配置文件参数详解。
这里有几个地方要注意一下:
- is_simulation 是生成功能仿真或者指令仿真模型。指令仿真模型就是最终到板子上的模型。
- batch_num 对于forward来说,一般都是一张图像,这里选1就行了。
- sparse_rate 先0不影响正常输出。
- data_type 这里你一定要去看文档说明,弄清楚你的网络需要输入的是什么数据类型,有些在网络里面做了归一化,这里选U8,如果网络前面做归一化,这里就要选S32,其他类型,看文档。
NNIE 模型生成
在把NNIE Mapper配置配好了后,点击如下图的按钮即可生成对应的wk文件。
我这里就根据is_simulation生成了两种模型,功能仿真模型输出内容多。指令仿真模型输出基本保持和板子上是一致的。
NNIE 模型仿真工程搭建
这里,我们就不要做重复造轮子的工作,直接导入官方sample_simulator,然后在其基础上魔改就行了。
魔改切入点
在src目录,打开main.cpp,简单分析一波,根据我的网络特点,直接选择分类网络例子(svpsampleclassification.cpp),复制为我的cpp和hpp。
其核心调用在仿真里面就两个函数:
- HI_MPI_SVP_NNIE_Forward 网络forward
- HI_MPI_SVP_NNIE_Query forward状态查询
其余的都是在准备数据和查看数据。这里你可以参考svpsampleclassification.cpp进行简化魔改即可。
需要注意的是:HI_MPI_SVP_NNIE_Forward 的api参考文档中,有关于输入和输出数据的规格说明,别弄错了。
魔改好了,直接打印出最后一层的输出。
每一层的数据保存
这种方法适用于后续的向量对比,用于查看你生成的模型对不对。在sim_out的目录下有一个nnie_sim.ini配置文件,里面可以设置一些不错的参数。
双击后,可以界面设置:
这里必须勾上第一个,第二个建议勾上,这样跑的快点。第一个勾上后,会输出每一层的输出。
然后运行你魔改的程序,在sim_out下会出现如下图的内容(我这里我两种模型的仿真都做过了,所以有两种每一层网络的输出):
网络标准输出
点这个,配置参数,然后输出你的caffe模型的每一层数据,用作后续的向量分析。
这里没什么注意的,自己配置好相关的内容即可。
这里执行后会在output dir 输出每一层caffe模型的forward输出
如下图:
向量对比
向量对比有什么作用,相比经常接触这方面的人会有感受,就是指你的模型输出对不对。比如:caffe 的输出,nnie的输出到底能否对上,hisi提供了这样的一个工具。
一个选择caffe输出,一个选择仿真输出。对比即可。双击可以查看每一层的所有输出数据,这里我就直接看最后一层。
从最后一层的数据对比来看,基本偏差不大,因为后续还要继续对数据进行处理。这样的话,就证明了我的nnie模型至少现在看来没什么问题了。
后记
注意事项
如果你的输出和标准caffe输出差的非常远,有70%的可能性是你输入数据不一致导致的,你要和算法他们详细沟通,并打印输入数据,经过实际对比,看看哪里有什么问题。
不一致的原因很多,一般来说就是图像通道对不上,预处理不一致等等。
参考文献
- 无
打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)
PS: 请尊重原创,不喜勿喷。
PS: 要转载请注明出处,本人版权所有。
PS: 有问题请留言,看到后我会第一时间回复。
HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(2) --- 模型生成及模型仿真(实例分析)的更多相关文章
- [Javascript摸鱼记录] 关于js简单字符删减替换增加插入追加前中后处理
以前总是怕死js如其名,能让我入坑润不出来,然后最近被迫写点静态html,又要用到数值运算处理, 于是又开启了「好几十个标签栏解决一个问题」的"探索路程",顺便记录一下摸鱼结果希望 ...
- Sony深度学习框架 - Neural Network Console - 教程(1)- 原来深度学习可以如此简单
“什么情况!?居然不是黑色背景+白色文字的命令行.对,今天要介绍的是一个拥有白嫩的用户界面的深度学习框架.” 人工智能.神经网络.深度学习,这些概念近年已经涌入每个人的生活中,我想很多人早就按捺不住想 ...
- (转)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:/ ...
- 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",即可获得课件电子资源. 文章已经表明,对于将知识从整体模型或高度正则化的大型模型转换为较小的蒸馏模型,蒸馏非常 ...
随机推荐
- 19.1 DLL基础--《Windows核心编程》
Windows 中最重要的三个DLL是: Kernel32.dll:包含的函数用来管理内存.进程以及线程 User32.dll:包含的函数用来执行和用户界面相关的任务 GDI32.dll:包含的函数用 ...
- NC16466 [NOIP2015]信息传递
题目链接 题目 题目描述 有 n 个同学(编号为 1 到 n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为Ti的同学. 游戏开始时, ...
- NC20240 [SCOI2005]互不侵犯KING
题目链接 题目 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案. 国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 输入描述 只有一行 ...
- NC20875 舔狗舔到最后一无所有
题目链接 题目 题目描述 作为队伍的核心,forever97很受另外两个队友的尊敬. Trote_w每天都要请forever97吃外卖,但很不幸的是宇宙中心forever97所在的学校周围只有3家fo ...
- MySQL查看bin_log日志
有这样一段业务逻辑,首先保存业务数据,然后发送报文,最后确认报文回来以后更新业务数据.伪代码大概是这样的: /** * 保存数据,并调用发送报文方法 */ public void save() { / ...
- 从零开始手写 redis(四)监听器的实现
前言 java从零手写实现redis(一)如何实现固定大小的缓存? java从零手写实现redis(三)redis expire 过期原理 java从零手写实现redis(三)内存数据如何重启不丢失? ...
- Keil MDK STM32系列(十) Ubuntu下的PlatformIO开发环境
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- OneCloud记录
配置信息 S805, 1G RAM, 8G ROM, USB2.0 * 2, 1GB LAN, SD Cardreader S805参数: 32-bit, ARMv7-A, Cortex-A5, 1. ...
- 搜索引擎RAG召回效果评测MTEB介绍与使用入门
RAG 评测数据集建设尚处于初期阶段,缺乏针对特定领域和场景的专业数据集.市面上常见的 MS-Marco 和 BEIR 数据集覆盖范围有限,且在实际使用场景中效果可能与评测表现不符.目前最权威的检索榜 ...
- mac更新系统后,提示xcrun的错误问题
pycharm运行代码终端报错: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), ...