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) --- 模型生成及模型仿真(实例分析)的更多相关文章

  1. [Javascript摸鱼记录] 关于js简单字符删减替换增加插入追加前中后处理

    以前总是怕死js如其名,能让我入坑润不出来,然后最近被迫写点静态html,又要用到数值运算处理, 于是又开启了「好几十个标签栏解决一个问题」的"探索路程",顺便记录一下摸鱼结果希望 ...

  2. Sony深度学习框架 - Neural Network Console - 教程(1)- 原来深度学习可以如此简单

    “什么情况!?居然不是黑色背景+白色文字的命令行.对,今天要介绍的是一个拥有白嫩的用户界面的深度学习框架.” 人工智能.神经网络.深度学习,这些概念近年已经涌入每个人的生活中,我想很多人早就按捺不住想 ...

  3. (转)The Neural Network Zoo

    转自:http://www.asimovinstitute.org/neural-network-zoo/ THE NEURAL NETWORK ZOO POSTED ON SEPTEMBER 14, ...

  4. 论文笔记之:Progressive Neural Network Google DeepMind

    Progressive Neural Network  Google DeepMind 摘要:学习去解决任务的复杂序列 --- 结合 transfer (迁移),并且避免 catastrophic f ...

  5. 深度神经网络如何看待你,论自拍What a Deep Neural Network thinks about your #selfie

    Convolutional Neural Networks are great: they recognize things, places and people in your personal p ...

  6. Recurrent Neural Network[survey]

    0.引言 我们发现传统的(如前向网络等)非循环的NN都是假设样本之间无依赖关系(至少时间和顺序上是无依赖关系),而许多学习任务却都涉及到处理序列数据,如image captioning,speech ...

  7. (zhuan) Recurrent Neural Network

    Recurrent Neural Network 2016年07月01日  Deep learning  Deep learning 字数:24235   this blog from: http:/ ...

  8. Graph Embedding Review:Graph Neural Network(GNN)综述

    作者简介: 吴天龙  香侬科技researcher 公众号(suanfarensheng) 导言 图(graph)是一个非常常用的数据结构,现实世界中很多很多任务可以描述为图问题,比如社交网络,蛋白体 ...

  9. 梳理检测论文-Refinement Neural Network

    Single-Shot Refinement Neural Network for Object Detection 目录 1. motivation 2. RefineDet 解析(Network ...

  10. 【DKNN】Distilling the Knowledge in a Neural Network 第一次提出神经网络的知识蒸馏概念

    原文链接 小样本学习与智能前沿 . 在这个公众号后台回复"DKNN",即可获得课件电子资源. 文章已经表明,对于将知识从整体模型或高度正则化的大型模型转换为较小的蒸馏模型,蒸馏非常 ...

随机推荐

  1. ssh原理及使用场景

    用过linux系统的朋友,基本肯定会用过ssh.因为大部分的linux登录都是通过ssh将进行登录,除非你用的是类似windows的桌面版. 一.什么是SSH SSH 为 Secure Shell 的 ...

  2. (python)每日代码||2024.1.29||斐波那契数列第i个数函数

    def fib(n): a, b = 0, 1 for _ in range(n): a, b = b, a + b return a

  3. 24.3 向量化异常VEH--《Windows核心编程》

    Windows 提供了向量化异常处理(vectored excepation handing,VEH)机制.程序可以注册一个函数,每当异常发送或者一个未处理异常脱离标准SEH的控制时,这个函数就会被调 ...

  4. 《ASP.NET Core 与 RESTful API 开发实战》-- (第10章)-- 读书笔记

    第 10 章 部署 10.1 部署到 IIS ASP.NET Core 应用程序支持部署到 IIS 中,之后它将作为应用程序的反向代理服务器和负载均衡器,向应用程序中转传入的 HTTP 请求 默认情况 ...

  5. YOLOV3目标检测模型训练实例

    YOLOV3目标检测 从零开始学习使用keras-yolov3进行图片的目标检测,比较详细地记录了准备以及训练过程,提供一个信号灯的目标检测模型训练实例,并提供相关代码与训练集. DEMO测试 YOL ...

  6. Swoole从入门到入土(17)——WebSocket服务器[成员函数与配置选项]

    这一节,我们重点了解websocket server的成员函数以及相关的配置选项. 1.成员函数 push:向 WebSocket 客户端连接推送数据,长度最大不得超过 2M. Swoole\WebS ...

  7. 解决:Not found the kernel library or the kernel library is invalid

    问题说明: 今天运行一个E语言写的程序报错, 看样子是缺少核心依赖库. 解决方法 去下载个易语言安装包安装一下即可.比如我安装的是: 易语言5.6完美破解版(精简版).exe 下载地址:https:/ ...

  8. ckeditor使用技巧总结

    介绍 官方开发者文档:CKEditor 4 documentation 技巧总结 1.挑选需要的插件,打包下载 参考:CKEditor 4.4.1 添加代码高亮显示插件功能--使用官方推荐Code S ...

  9. U盘安装win7提示缺少所需的CD/DVD驱动器设备驱动程序

    问题: 最近使用U盘启动盘安装win7,系统弹出提示框: 解决方法: U盘别插在usb3.0的口(蓝色),换成一个usb2.0的口就可以了

  10. Java并发编程实例--16.使用ReentrantLock实现线程同步

    Java提供另一机制去同步代码块.它比synchronized关键字更强大且易用. 它是基于Lock接口和其实现类例如:ReentrantLock. 这一机制对比synchronized关键字的优势在 ...