之后随笔将更多笔墨着重于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实现具体过程。

 
 
 
 
 
 
 
 
 
 
 
 
 

版权声明:本文为iFrank原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/iFrank/p/14515089.html