将深度神经网络算法部署到现实场景(基于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格式,这样可以适配采用不同框架开发算法的人员。