基于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 首先第 ...
随机推荐
- Paths on a Grid POJ - 1942 排列组合
题意: 从左下角移动到右上角.每次只能向上或者向右移动一格.问移动的轨迹形成的右半边图形有多少种 题解: 注意,这个图形就根本不会重复,那就是n*m的图形,向上移动n次,向右移动m次. 从左下角移动到 ...
- 牛客算法周周练20 F.紫魔法师 (二分图染色)
题意:给你一张图,对其染色,使得相连的点的颜色两两不同求,最少使用多少种颜色. 题解:首先,若\(n=1\),只需要一种.然后我们再去判断是否是二分图,对于二分图,两种颜色就够了,若不是二分图,也就是 ...
- Educational Codeforces Round 56 (Rated for Div. 2) D. Beautiful Graph (二分图染色)
题意:有\(n\)个点,\(m\)条边的无向图,可以给每个点赋点权\({1,2,3}\),使得每个点连的奇偶不同,问有多少种方案,答案对\(998244353\)取模. 题解:要使得每个点所连的奇偶不 ...
- 【译】Async/Await(五)—— Executors and Wakers
原文标题:Async/Await 原文链接:https://os.phil-opp.com/async-await/#multitasking 公众号: Rust 碎碎念 翻译 by: Praying ...
- 第三方库:logger,自定义日志封装模块
为了使用方便,二次封装logger. import os import datetime from loguru import logger class Logings: __instance = N ...
- echart关系图平分节点删除时自动平衡问题
项目场景: 项目场景:Echarts关系图中(不是力图)一个节点x,y是固定的,为了同一列能居中显示,规定:当前列有奇数个元素新节点往下放,有偶数个节点时新节点往上放. 问题描述: 删除中间节点会有空 ...
- 查找命令中grep,find,which和whereis的使用及区别
在linux系统中,许多时候需要查找某些文件或者字符,如果用ls, cd 等基础命令就显得很无力了,那么Linux提供了grep,find,which 三种查找命令,在这里我记录一下: 一.grep命 ...
- FZU 2082 过路费(树链剖分 边权)题解
题意:给出每条边权值,可以更新每条边权值,询问两个点路径的最小权值 思路:重链剖分边权化点权,让每个儿子节点继承边权. 插点权的时候比较边的两个节点的深度,插进儿子节点中. 代码: #include& ...
- u-boot 移植 --->6、引导Linux启动测试
在引导Linux开机之前需要先清楚Linux启动的必要或者说是先决条件,这里就是提到了u-boot的作用了引用百度云---主要用于嵌入式系统的引导加载,其实在我调试下来总结一下就是初始化硬件这里的硬件 ...
- Web 页面生命周期 All In One
Web 页面生命周期 All In One Web Page LifeCycle All In One refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允 ...