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",即可获得课件电子资源. 文章已经表明,对于将知识从整体模型或高度正则化的大型模型转换为较小的蒸馏模型,蒸馏非常 ...
随机推荐
- Mac基于VMware安装CentOS
流程偏长,下一步根本点不完: 01 首先,明确下两款软件的版本信息: VMware是[VMware-Fusion-13.5.0] CentOS是[CentOS-7-x86_64-Minimal-190 ...
- SUM和IF使用求部分和
GROUP BY可以按照某一列的不同值进行分组,然后将不同组的数据可以利用聚合函数进行汇总取值. --我们可以在老师表里面求解不同班级的老师分别有多少名 SELECT class_id,COUNT(t ...
- MySQL 报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket
MySQL 报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket 一.错误现场还原: 下面我们通过三种方式 ...
- Python-open函数-读写文件
一.open 函数语法 open() 函数的作用是打开一个文件,并返回一个 file对象(即文件对象). open 是一个动作,可以理解为我们打开文档的点击动作. file 对象是一个实物,可以理解为 ...
- Moon.Orm版本维护及下载
MoonOrm最新版及代码生成器 (2020-8-29)
- STC8A8K64S4A12内部时钟的IRTRIM和LIRTRIM简单标定
STC8A8K64S4A12因为没有固化的频率调节值, 要么在STC-ISP烧录时设置写入, 要么通过idata高地址读取, 这对于Linux下的SDCC用户就非常不方便, 既不能用STC-ISP, ...
- Centos7 和 Centos8 升级内核
从yum安装kernel-ml 对于Centos7 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org yum install htt ...
- Js实现链表操作
Js实现链表操作 JavaScript实现链表主要操作,包括创建链表.遍历链表.获取链表长度.获取第i个元素值.获取倒数第i个元素值.插入节点.删除节点.有序链表合并.有序链表交集. 创建链表 cla ...
- 删除node_modules文件夹cmd指令 - 20201015
方法 方法一: rm -rf /node_modules cmd原生命令.只要支持cmd就可以使用. 方法二: rmdir /s/q your_app_dir 原生node方法,redir为node删 ...
- Linux驱动开发笔记(三):基于ubuntu的helloworld驱动源码编写、makefile编写以及驱动编译加载流程测试
前言 前面学习了驱动的基础框架,上一篇编译了gcc7.3.0,那么为了方便很好的熟悉流程,本篇,将使用ubuntu18.04,直接编译ubuntu18.04的驱动,然后做好本篇文章的相关实战测试. ...