论文地址:https://github.com/dgschwend/zynqnet/blob/master/zynqnet_report.pdf
论文简介:介绍如何使用HLS将卷积计算的C/C++代码进行综合为硬件电路,实现神经网络计算的FPGA移植。
本文简介:用FPGA实现CNN网络计算,需要对网络进行一定的更改,使其具有一些适配FPGA计算的特点。本文主要介绍第三章在CNN训练阶段使用了哪些方法和技巧。
3.4.1网络训练优化
- 结构分析,使用直方图表达每层的累乘操作次数(计算复杂度);
- 复杂度占比分析;
- SqueezeNet V1.1和ZynqNet在输出维度上进行了一些改进;
- 将7×7的第一层卷积层改为3×3,64通道;
- 去除不必要的padding;
3.4.2为FPGA实现的优化
- ZynqNet CNN输入输出均为2的N次方;
- 全卷积计算,将最大值池化等操作全部用步长为2的3×3卷积操作代替;
- FPGA的片上内存资源受限制,Zynq XC-7Z045包括2180 kB Block RAM memory,可以容纳大概560 000个32位浮点数,然而conv10层的权值数目为736×1024个1×1卷积核,共有753 664个参数,为了让FPGA兼容该层的计算,将该层划分为conv10/split1 和conv10/split2,共两个512输出通道;
3.4.3为提升准确度进行的优化
线性学习率;
SqueezeNet的输出维度并不是持续下降的,而是在conv10处有个峰值,ZynqNet CNN则是规律性的持续下降;
数据扩充;
fine-tuning;
总结:以上部分需要机器学习或者深度学习相关的知识,一些技巧也是常见的技巧,这里并没有用到BN,但是BN是一个很好的技术,但是作者的源码也并不支持BN层。