基于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 首先第 ...
随机推荐
- P4755 Beautiful Pair (分治 + 主席树)
题意:1e5的数组 计算有多少对 ai * aj <= max(ai ai+1...aj-1 aj) 题解:在处理这种涉及到区间极值的题时 好像是个套路分治 从级值中间分成两个区间 从区间短的那 ...
- Educational Codeforces Round 90 (Rated for Div. 2) A. Donut Shops(数学)
题目链接:https://codeforces.com/contest/1373/problem/A 题意 有两种包装的甜甜圈,第一种 $1$ 个 $a$ 元,第二种 $b$ 个 $c$ 元,问买多少 ...
- Codeforces Round #633 (Div. 2)
Codeforces Round #633(Div.2) \(A.Filling\ Diamonds\) 答案就是构成的六边形数量+1 //#pragma GCC optimize("O3& ...
- 【noi 2.6_6049】买书(DP)
题意:有N元,有无限多本10.20.50和100元的书,问有几种购买方案. 解法:f[i]表示用 i 元的方案数.还有一个 j 循环这次买多少元的书. 注意--要先 j 循环,再 i 循环.因为要先考 ...
- CF1400-D. Zigzags
CF1400-D. Zigzags 题意: 给出一个由\(n\)个数字构成的数组\(a\),让你在这个数组中找出有多少个符合以下要求的元组\((i,j,k,l)\): 1. \(i<j<k ...
- Logstash 日志收集(补)
收集 Tomcat 日志 安装 Tomcat # 安装 jdk [root@web01 ~]# rpm -ivh jdk-8u181-linux-x64.rpm # 下载 [root@web01 ~] ...
- C# wpf window
使用vs2017 新建wpf 项目 MainWindow 被定义为partial,是因为他要和xaml的一些属性组合在一起,然后再运行起来,这正是 InitailizeCompoent 这个函数要干的 ...
- QUIC协议和HTTP3.0技术研究
QUIC:基于UDP的安全可靠的HTTP/2传输协议 摘要 QUIC(Quick UDP Internet Connection)是一个新的基于UDP的管线化技术和安全传输协议. QUIC提供: 和H ...
- C++ 0LL
C++ 0LL C plus plus L / l means long LL === long long int countDigitOne(int n) { int countr = 0; for ...
- Express All In One
Express All In One express.js, node.js web framework # v4.17.1 Latest, on May 26, 2019 $ yarn add ex ...