基于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或者直接点击运行即可看结果,后续推出详细的操作流程。
最新文章
- Oracle CDC配置案例
- hadoop 分布式缓存
- iOS逆传值的三种方式
- YOU KNOW NOTHING , SNOW
- 设计师必备!免费下载 PSD 素材的32个网站
- SQL Server case when 日期字符串转换 多表查询 嵌套子查询
- CSS笔记(十五)CSS3之用户界面
- 九度OJ 1131 合唱队形 -- 动态规划(最长递增子序列)
- JAVA: 接入YSDK遇到的问题
- 全球主流8位MCU芯片详细解剖No.2:英飞凌 XC866 - 全文
- SSO-单点统一登录系统的设计与实现
- DataReader的使用
- SQLite 线程安全和并发
- Django+Vue打造购物网站(一)
- acm--博弈入门2(P/N分析)--(HDU 1847 HDU 2188 HDU 3863)
- 20、collections模块和re模块(正则表达式详解)
- 解决Windows10或者其他版本Windows Update报错的问题
- 1-4-bootloader架构学习
- Linux文件系统命令 ln
- drf 分页
热门文章
- 【noi 2.6_8786】方格取数(DP)
- hdu3706 Second My Problem First
- Codeforces Round #307 (Div. 2) B. ZgukistringZ
- MiniSMB 网络性能测试 免费版本安装指南
- MYSQL基础常见常用语句200条
- element-ui &; babel-plugin-component config bug
- 中文域名 &; 原理剖析
- pull down/pull up refresh &; UI Components
- linux bash which
- React SSR in Action