之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(3)RuyiStudio软件 .wk文件生成过程-mobilefacenet.cfg的参数配置,目前项目需要对mobilefacenet网络进行.wk的开发,通过RuyiStudio创建工程(关于软件RuyiStudio的安装与配置看后期是否有时间,有时间就会出一篇随笔供大家参考),在工程下配置mobilefacenet.cfg文件,加载训练好的mobilefacenet.caffemodel与mobilefacenet.prototxt并进行mobilefacenet.wk的生成,其中重要的一环为mobilefacenet.cfg参数的配置,下面随笔将给出具体操作,首先给出整体需要配置的参数表:

 1 [prototxt_file]
2 [caffemodel_file]
3 [batch_num]
4 [net_type]
5 [sparse_rate]
6 [compile_mode]
7 [is_simulation]
8 [log_level]
9 [instruction_name]
10 [RGB_order]
11 [data_scale]
12 [internal_stride]
13 [image_list]
14 [image_type]
15 [mean_file]
16 [norm_type]

  下面给出一一说明:

(1)prototxt_file

  为网络描述文件,NNIE mapper 对 prototxt 的输入层格式、layer 格式、激活层、Scale、Bias 层、RNN、LSTM 层及特殊的中间层上报、高精度配置、指定支持层有 CPU 执行等特定的规范约束。这里我对中间层、高精度配置、CPU执行进行一个具体的叙述:

  ①中间层是指不在网络段结尾处的层。用户需要中间层结果输出时,需要对应层的“top”域中添加“_report”标识符进行标注。如果某一中间层有多个 top 都需要输出,用户可以为每一个 top 添加上报标注。
 1 layer {
2 name: "conv5 "
3 type: "Convolution"
4 bottom: "conv4"
5 top: "conv5_report"
6 convolution_param {
7     num_output: 256
8     kernel_size: 3
9     pad: 1
10     stride: 1
11   }
12 }
  ②用户指定自定义计算精度(compile_mode=2)时,在对应层的层名后加上高精度 “_hp”(16比特)标记,可实现指定任意层为高精度输入,格式如下所示。

 1 layer {
2 name: "conv5_hp"
3 type: "Convolution"
4 bottom: "conv4"
5 top: "conv5"
6 convolution_param {
7     num_output: 256
8     kernel_size: 3
9     pad: 1
10     stride: 1
11   }
12 }
  ③对于mapper支持层,可以通过在name字段增加_cpu标记来指定该层切换为cpu执行(包含CPU、DSP等非NNIE执行的,均使用_cpu标志),格式如下所示。
 1 layer {
2 bottom: "rpn_cls_score"
3 top: "rpn_cls_score_reshape"
4 name: "rpn_cls_score_reshape_cpu"
5 type: "Reshape"
6 reshape_param {
7   shape {
8     dim: 0
9     dim: 2
10     dim: -1
11     dim: 0
12     }
13   }
14 }

(2)caffemodel_file:

  网络模型数据文件。

(3)[batch_num]

  0/1:single(单张)模式;
  >1:batch(多张)模式。采用single模式mapper一个任务只能处理一张图片,内部存储全部为一张图片分配,减少数据调度次数。采用batch模式,在计算FC时batch_num张图片同时计算,计算资源利用率高。 (最大取值256)

(4) [net_type]:

  网络的类型。

  0:CNN(不包含LSTM/RNN/ROIPooling/PSROIPooling 的任意网络);
  1:ROI/PSROI(包含 ROI Pooling 和 PSROI Pooling的网络);
  2:Recurrent(包含 LSTM、RNN 的网络);

(5) [sparse_rate] --->(取值0到1,默认0)

  NNIE引擎采用了参数压缩技术以减少带宽占用,为了提高压缩率,可通对FC参数进稀疏处理。

  用户通过sparse_rate数值指定多少比例的FC参数稀疏为0,例如配0.5,则FC参数有50%将被稀疏为0,由于数据变的稀疏,压缩模块会获得更好的压缩率。稀疏值越高,计算FC时所需参数带宽越低,但精度会有所下降。

(6) [compile_mode]

  0:Low-bandwidth(低带宽模式,默认):通过量化算法使参数与数据位宽最少,使系统所需带宽达到最小,但会有精度损失;
  1:High-precision(高精度模式): 结果精度最好,但是性能会下降;;
  2:User-specify(用户配置模式): 需要用户在prototxt中标明所有使用高精度计算的层,标注规则请见prototxt_file说明;

(7) [is_simulation]

  网络模型转化类型。
  0:Chip,芯片模式,网络模型转化成在芯片上加载的wk文件,指令仿真也使用此模式;
  1:Simulation,仿真模式,网络模型转化成在PC端仿真上加载的wk文件,功能仿真使用此模式;

(8) [log_level]

  设置是否开启日志文件,以及配置打印的等级,本参数可省略,当省略时,为不打印日志文件。
  0:打印main函数流程,cfg文件等信息;
  1:打印nnie_mapper解析到的文件信息,包含image_list、prototxt、内存分配过程;
  2:打印中间表示信息;
  3:打印详细信息,有大量文件输出,转化耗时较长,请谨慎使用; 

(9) [instruction_name]

  nnie_mapper生成的知识库文件名称。默认生成如下格式的知识库名:inst.wk;用户也可以自行修改生成的知识库名字。 

(10) [RGB_order]   --->取值范围:{RGB,BGR}  default:BGR

  image_type设置为0时,该参数无效;
  image_type设置为1时,不管该参数配置何值,要求用户板端输入必须为BGR_Planar格式图像;
  image_type设置为3、5时,表示YUV图像数据转成RGB Planar或者BGR Planar图像输入给网络。
  本参数可省略。

(11) [data_scale]

  数据预处理缩放比例,配置为浮点数,配合norm_type使用本参数可省略,默认为0.00390625=1/256。FLT_MAX等于3.402823466e+38。 

(12) [internal_stride]

  用户根据DDR颗粒对应的最佳读写效率配置中间结果的对齐方式。要求:DDR3对应16,DDR4对应32,可不填,默认为16; 

(13) [image_list]

  NNIE mapper 用于数据量化的参考图像 list 文件或feature map 文件。该配置跟 image_type 相关。如果网络的数据输入是灰度或者 RGB 图像输入,即image_type 配置不为 0,image_list 配置为所参考图片的list,内容示意图如下图图示,图片的格式支持以下几种:

(14) [image_type]

  表示网络实际执行时输入给网络的数据类型,该配置跟 image list 相关。

  0∶表示网络数据输入为 SVP BLOB_TYPE_S32(参考《HiSVP API参考》)或者向量的类型(VEC_S32和 SEQ S32);此时要求 image list 配           置为 feature map 文件;
  1∶ 表示网络数据输入为 SVP BLOB TYPE U8(普通的灰度图和 RGB 图)类型; 此时要求 image_list 配置是 RGB 图或者灰度图片的 list 文件;
  3∶ 网络数据输入为 SVP_ BLOB_TYPE YUV420SP类型;
  5∶ 网络数据输入为SVP_BLOB_TYPE YUV422SP类型;
  当配置为3或者5时,image_list配置为 RGB图片的 list 文件。

(15) [mean_file]

  norm_type为1、4时,表示均值文件xxx.binaryproto;
  norm_type为2、5时,表示通道均值文件;
  norm_type为0、3时,用户也需要配置mean_file项,但具体内容可以是一个无效路径,比如null;通道均值文件mean.txt中每一行的浮点数表示             对应的通道均值,如单通道只有一个值。

(16)[norm_type]

  表示对网络数据输入的预处理方法。注意image_type配置为0时,norm_type只能配置为0;image_type配置为3或者5时,网络输入数据为YUV图像,但是NNIE硬件会根据RGB_order配置项自动转为RGB或者BGR图像,此时norm_type配置方法跟image_type为1时一致。

  0:不做任何预处理;
  1:mean file,减图像均值;
  2:channel mean_value,减通道均值;
  3:data_scale,对图像像素值乘以data_scale;
  4:mean filewith data_scale,减图像均值后再乘以data_scale;
  5:channel mean_value with data_scale,减通道均值后再乘以data_scale。 
(17) [is_check_prototxt] 
  检查网络描述文件标志。
  0:mapper模式,对prototxt、caffemodel等进行转化。
  1:网络过滤器模式,对prototxt文件是否符合支持规格进行检查。 
 
  给出目前我的mobilefacenet.cfg配置:
 1 [prototxt_file] ./mark_prototxt/mobilefacenet_mark_nnie_20210205133124.prototxt
2 [caffemodel_file] ./data/mobilefacenet.prototxt.caffemodel
3 [batch_num] 256
4 [net_type] 0
5 [sparse_rate] 0
6 [compile_mode] 0
7 [is_simulation] 1
8 [log_level] 3
9 [instruction_name] ./mobileface_func
10 [RGB_order] BGR
11 [data_scale] 0.0078125
12 [internal_stride] 16
13 [image_list] ./data/images/imageList.txt
14 [image_type] 1
15 [mean_file] ./data/pixel_mean.txt
16 [norm_type] 5

  后面随笔将给出mobilefacenet网络的NNIE实现具体过程。

 
 
 
 
 
 
 
 
 
 
 
 
 

Hi3559AV100 NNIE开发(3)RuyiStudio软件 .wk文件生成过程-mobilefacenet.cfg的参数配置的更多相关文章

  1. Hi3559AV100 NNIE开发(5)mobilefacenet.wk仿真成功量化及与CNN_convert_bin_and_print_featuremap.py输出中间层数据对比过程

    前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...

  2. Hi3559AV100 NNIE开发(7) Ruyistudio 输出mobileface_func.wk与板载运行mobileface_chip.wk输出中间层数据对比

    前面随笔讲了关于NNIE的整个开发流程,并给出了Hi3559AV100 NNIE开发(5)mobilefacenet.wk仿真成功量化及与CNN_convert_bin_and_print_featu ...

  3. Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析

    之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析,通过对LoadModel函数及 ...

  4. Hi3559AV100 NNIE开发(4)mobilefacenet.cfg参数配置挖坑解决与SVP_NNIE_Cnn实现分析

    前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...

  5. Hi3559AV100 NNIE开发(6)RFCN中NNIE实现关键线程函数->SAMPLE_SVP_NNIE_Rfcn_ViToVo()进行数据流分析

    前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...

  6. 基于Hi3559AV100的SVP(NNIE)开发整体流程

    在之后的hi3559AV100板载开发中,除了走通V4L2->VDEC->VPSS->VO(HDMI)输出,还有需要进行神经网络的开发学习,进行如face detection的开发等 ...

  7. Hi3559AV100 NNIE RFCN开发:V4L2->VDEC->VPSS->NNIE->VGS->VO系统整体动态调试实现

    下面随笔将给出Hi3559AV100 NNIE RFCN开发:V4L2->VDEC->VPSS->NNIE->VGS->VO系统整体动态调试实现,最终的效果是:USB摄像 ...

  8. Hi3359AV100 NNIE开发(1)-RFCN demo LoadModel函数与参数解析

    之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3359AV100 NNIE开发(1)-RFCN demo LoadModel函数与参数解析,通过对LoadModel函数的解析,能够很好理解. ...

  9. 工具武装的前端开发工程师 Mac 软件清单

    Awesome Mac  这个仓库主要是收集非常好用的Mac应用程序.软件以及工具,主要面向开发者和设计师.有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章<工具武装的前端开发工程 ...

随机推荐

  1. PowerShell多任务

    代码 foreach ($server in $servers) { $running = @(Get-Job | Where-Object { $_.State -eq 'Running' }) i ...

  2. word2vector论文笔记

    背景 很多当前的NLP系统和技术都把单词像ont-hot一样当做原子性的一个概念去对待,单纯就是一个索引,无法表示词之间的相似性.原因就是往往一个简单的.鲁棒的.可观测的模型在海量数据集上的学习效果要 ...

  3. Netty(三)基于Bio和Netty 的简易版Tomcat

    参考代码: https://github.com/FLGBetter/tomcat-rpc-demo

  4. 015.NET5_MVC_Razor局部视图

    局部视图 1. 可以增加代码的重用性 如何定义? 1.添加一cshtml文件 2. 在页面中调用局部视图:@html.Partial("局部视图的名称") 问题:局部视图中不能访问 ...

  5. Free Video Player All In One

    Free Video Player All In One VLC media player https://github.com/videolan/vlc VideoLAN https://www.v ...

  6. css variables & CSS 变量

    css variables & CSS 变量 https://gist.github.com/xgqfrms-GitHub/5d022a13292c615d2730e84d909e1aba c ...

  7. ES6 进制字面量 All In One

    ES6 进制字面量 All In One 二进制 & 八进制 & 字面量 https://developer.mozilla.org/en-US/docs/Web/JavaScript ...

  8. redis源码之SDS

    1:SDS介绍 我们在redis中执行命令 set key name 的时候,key和name都是字符串类型,而且字符串(string)在redis中是会经常用到的类型,那redis是如何保存字符串的 ...

  9. 发布Jar包到maven中央仓库

    什么是maven中央仓库 maven是java世界最流行的构建工具,构建内容囊括了一个java项目的整个生命周期.其中最重要的功能就是依赖管理,maven通过一个类似云的ftp站点统一管理所有java ...

  10. Javascript中的事件冒泡与捕获

    事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数,useCapture:是否使用事件捕获,觉得有点模糊 Js事件流 页面的哪一部 ...