將深度神經網絡算法部署到現實場景(基於FPGA),主要包含兩部分的工作,一個是爲場景找到合適的算法,訓練出滿足要求的模型;第2個是將模型定點化後部署在FPGA上運行,主要含以下步驟:
- 準備工作:數據收集及TFrecord製作,數據預處理函數編寫。
練習時從kaggle網站上獲取帶標註數據集;
製作訓練與驗證用的Tfrecord數據文件;
圖像增強、剪裁、pad、標準化等預處理;
訓練及驗證用的mini-batch數據生成(隨機、多線程)
2. 基於Tensorflow框架下VGG13,InceptionV3,Resnet50網絡改寫及適配,適配到本地數據集的類別數。在本地數據集上訓 練,精度達到要求。
3. 網絡模型壓縮
Xilinx公司提供了Decent_Q工具進行模型壓縮及定點,但官方只提供定點功能,帶剪枝功能的模型壓縮工具估計要另外收 費。後面個人想自己開發一個工具替代該功能。通過網絡結構及參數,將權重較小的或者值比較相近的kernel去掉,重新構 建更稀疏的網絡,保存新的網絡和權重,重新導入數據,做微調重新訓練,生成新的Pb,給xilinx的decent_Q做定點。
4. FPGA上的部署:
固化後的模型及參數保存,使用pb文件格式;
FPGA上DPU集成;
利用DNNDK工具生成DPU的運行指令;
Petalinux系統製作及DPU後端C程序開發。
不過如果不是卷積網絡,就無法利用xilinx的這套工具鏈。
自己開發部署工具鏈一般包含:
硬件:硬件加速器的開發,針對算法開發算子、調度單元、通信模塊。
定點工具及編譯器:模型定點化,以及網絡模型、權重翻譯成指令及權重數據。
Runtime:運行時配合的驅動以及數據預處理、後處理代碼。
另外,mxnet、keras、pytorch這些開發框架下開發的模型,可以轉化成pb格式,這樣可以適配採用不同框架開發算法的人 員。