1. 程式人生 > >Hi3559AV100 NNIE開發(3)RuyiStudio軟體 .wk檔案生成過程-mobilefacenet.cfg的引數配置

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實現具體過程。

                        &nbs