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 }
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