Hi3559AV100 NNIE開發(3)RuyiStudio軟件 .wk文件生成過程-mobilefacenet.cfg的參數配置

  之後隨筆將更多筆墨着重於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實現具體過程。