基于Hi3559AV100的SVP(NNIE)开发整体流程
1、SVP
1.1、SVP开发框架
图1 SVP开发框架
其中,我大体是开发Hardware层的NNIE硬件模块、u-boot、Kernel driver及MPI的开发,可能等基本框图实现后,会开发上层的APP系列等等,不过目前的工作还是偏底层,之后会多多更新项目开发的过程。
1.2、SVP开发文档
SVP NNIE的开发过程主要是参考如下技术文档,海思还是开发了相当多的接口,大家只要熟练了之后,代码还是容易实现的。
2、NNIE开发

图2 NNIE开发流程
对于扩展层,有相应的规则:Faster RCNN、SSD、RFCN 和 SegNet 等网络都包含了一些原始 Caffe 中没定义的层结构,如 ROIPooling、Normalize、PSROI Pooling 和 Upsample 等。NNIE 的 mapper 目前仅支持 Caffe 框架,且以 Caffe1.0 为基础。为了使 mapper 能支持这些网络,需要对原始的 Caffe 进行扩展。
而对于NNIE开发,使用的工具为RuyiStudio,RuyiStudio 集成 windows 版的 NNIE mapper 和仿真库,具 生成 NNIE wk 功能、仿真NNIE 功能,同时具 代码编辑、编译、调试、执行功能、网络拓扑显示、目标检测画框、向量相似度对比、调试定位信息获取等功能。RuyiStudio 集成 windows 版的 NNIE mapper 基于 Visual Studio 2015 64bit 版本编译,所以其依赖库也需要使用 Visual Studio 2015 64 bit 进行编译。RuyiStudio 集成仿真库基于 MinGW-W64 7.3.0 编译,所以其依赖的编译链环境也需要是 MinGW-W64。其安装步骤需要参考相关的说明文档,注意一定要和python版本等匹配,否则容易报错。安装完成之后,大家可以导入demo工程,可以参考官方写的代码,如图所示:

图3 RuyiStudio 工程示例
1 int main(int argc, char* argv[])
2 {
3 if (argc < 2)
4 {
5 SAMPLE_RUNTIME_Usage(argv[0]);
6 return HI_FAILURE;
7 }
8
9 #ifdef ON_BOARD
10 SAMPLE_COMM_SVP_SysInit();
11 #endif
12
13 switch (*argv[1])
14 {
15 case '0':
16 SAMPLE_AlexNet();
17 break;
18 case '1':
19 SAMPLE_RFCN();
20 break;
21 case '2':
22 SAMPLE_Model_Group_RFCNAlexNet();
23 break;
24 case '3':
25 SAMPLE_SSD();
26 break;
27 case '4':
28 SAMPLE_Model_Group_RFCN_GOTURN_ALEXNET(1, 5);
29 break;
30 default:
31 printf("index[%s] error !!!!!!!!!!\n", argv[1]);
32 SAMPLE_RUNTIME_Usage(argv[0]);
33 break;
34 }
35
36 #ifdef ON_BOARD
37 SAMPLE_COMM_SVP_SysExit();
38 #endif
39 return HI_SUCCESS;
40 }
图4 示例main()代码
其中非常重要的是xxx.cfg文件,其中有自己训练好的.caffemodel模型及对应prototxt(需要时NNIE所支持的网络层)

图5 xxx.cfg文件重要内容
部分prototxt代码如下所示:
1 name: "mxnet-mdoel"
2 input:"data"
3 input_shape {
4 dim:1
5 dim:3
6 dim:112
7 dim:112
8 }
9
10
11 layer {
12 bottom: "data"
13 top: "conv_1_conv2d"
14 name: "conv_1_conv2d"
15 type: "Convolution"
16 convolution_param {
17 num_output: 64
18 kernel_size: 3
19 pad: 1
20 stride: 2
21 bias_term: false
22 }
23 }
24
25 layer {
26 bottom: "conv_1_conv2d"
27 top: "conv_1_batchnorm"
28 name: "conv_1_batchnorm"
29 type: "BatchNorm"
30 batch_norm_param {
31 use_global_stats: true
32 moving_average_fraction: 0.9
33 eps: 0.001
34 }
35 }
36 layer {
37 bottom: "conv_1_batchnorm"
38 top: "conv_1_batchnorm"
39 name: "conv_1_batchnorm_scale"
40 type: "Scale"
41 scale_param { bias_term: true }
42 }
43
44 layer {
45 bottom: "conv_1_batchnorm"
46 top: "conv_1_relu"
47 name: "conv_1_relu"
48 type: "PReLU"
49 }
最后debug或者直接点击运行即可看结果,后续推出详细的操作流程。
基于Hi3559AV100的SVP(NNIE)开发整体流程的更多相关文章
- 基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...
- 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...
- 基于Hi3559AV100的视频采集(VDEC-VPSS-VO)整体框图设计
下面给出基于Hi3559AV100的视频采集整体设计,具体设计将在后续给出: 图形采集端整体设计 Hi3559AV100软件程序按结构划分可分为4层,第一层是硬件驱动层,第二层是操作系统层,第三层是媒 ...
- Hi3559AV100 NNIE开发(3)RuyiStudio软件 .wk文件生成过程-mobilefacenet.cfg的参数配置
之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(3)RuyiStudio软件 .wk文件生成过程-mobilefacenet.cfg的参数配置,目前项目需要对 ...
- Hi3559AV100 NNIE开发(7) Ruyistudio 输出mobileface_func.wk与板载运行mobileface_chip.wk输出中间层数据对比
前面随笔讲了关于NNIE的整个开发流程,并给出了Hi3559AV100 NNIE开发(5)mobilefacenet.wk仿真成功量化及与CNN_convert_bin_and_print_featu ...
- Hi3559AV100 NNIE开发(4)mobilefacenet.cfg参数配置挖坑解决与SVP_NNIE_Cnn实现分析
前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...
- Hi3559AV100 NNIE开发(5)mobilefacenet.wk仿真成功量化及与CNN_convert_bin_and_print_featuremap.py输出中间层数据对比过程
前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...
- 实例讲解基于 React+Redux 的前端开发流程
原文地址:https://segmentfault.com/a/1190000005356568 前言:在当下的前端界,react 和 redux 发展得如火如荼,react 在 github 的 s ...
- iOS开发从申请开发账号到APP上架的整体流程详解
应公司要求,写一份文档从申请账号一直到APP上架的整体流程,下面进入正文. https://blog.csdn.net/qq_35612929/article/details/78754470 首先第 ...
随机推荐
- 【poj 2407】Relatives(数论--欧拉函数 模版题)
题意就是求10^9以内的正整数的欧拉函数(Φ(n)表示<=n的与n互质的正整数个数). 解法:用欧拉筛和欧拉函数的一些性质: 1.若p是质数,Φ(p)=p-1: 2.欧拉函数是积性函 ...
- hdu2141 Can you find it? (二分)
Problem Description Give you three sequences of numbers A, B, C, then we give you a number X. Now yo ...
- xml——dom&sax解析、DTD&schema约束
dom解析实例: 优点:增删改查一些元素等东西方便 缺点:内存消耗太大,如果文档太大,可能会导致内存溢出 sax解析: 优点:内存压力小 缺点:增删改比较复杂 当我们运行的java程序需要的内存比较大 ...
- hdu5358 First One
Problem Description soda has an integer array a1,a2,-,an. Let S(i,j) be the sum of ai,ai+1,-,aj. Now ...
- GYM101810 ACM International Collegiate Programming Contest, Amman Collegiate Programming Contest (2018) M. Greedy Pirate (LCA)
题意:有\(n\)个点,\(n-1\)条边,每条边正向和反向有两个权值,且每条边最多只能走两次,有\(m\)次询问,问你从\(u\)走到\(v\)的最大权值是多少. 题解:可以先在纸上画一画,不难发现 ...
- UWP(二)调用Win32程序
目录 一.如何构建Win32程序 二.如何构建UWP工程? 三.Samples 一.如何构建Win32程序 打开csproj文件,使用如下代码添加引用(Reference).注意,如果指定位置不存在, ...
- servlet相关知识点
一.servlet的生命周期 Servlet(Sever Applet),全称是Java Servlet,是用java编写的服务器程序.Servlet是指任何实现了这个Servlet接口的类. ser ...
- Linux 驱动框架---设备文件devfs
设备文件系统 Linux引入了虚拟文件系统,从而使设备的访问可以像访问普通文件系统一样.因此在内核中描述打开文件的数据inode中的rdev成员用来记录设备文件对应到的设备号.设备文件也由一个对应的f ...
- python 编码问题随笔
原文点击这里 借用原作者的一句话"据说,每个做 Python 开发的都被字符编码的问题搞晕过,最常见的错误就是 UnicodeEncodeError.UnicodeDecodeError,你 ...
- 006.NET 项目建立+传值
1. 创建项目 2.传值(控制器向视图传递) 接收值 3.视图向控制器传递 4.session配置