论文部分内容阅读
随着深度学习技术的不断发展,卷积神经网络被广泛地运用到实际场景中,例如语音识别、人脸检测、自然语言处理等。尤其是在计算机视觉领域,卷积神经网络相比较于传统的机器学习算法而言,具有更好的鲁棒性和普遍适用性。但是随着实际应用场景变得越来越复杂、应用领域也变得越来越广泛,卷积神经网络的结构也变得越来越复杂,这对硬件的计算能力的要求也越来越高。虽然现在广泛用于运行卷积神经网络的CPU和GPU能满足某些应用需求,但是在能耗要求较高的应用场景下,如移动终端、大型服务器集群等,CPU和GPU就不太适用了。FPGA具有可配置、低能耗等优点,在FPGA上运行卷积神经网络具有广泛的应用前景。本文的研究内容就是如何在FPGA上实现并加速卷积神经网络的前向过程。本文首先根据卷积神经网络的计算方式和结构特点分析其计算复杂度和空间复杂度,并以VGG16为例结合Roofline Model分析网络的性能瓶颈,找出潜在的优化策略。分析结果表明卷积神经网络中的计算瓶颈主要集中在卷积层的计算上,存储带宽瓶颈主要在全连接层上。然后根据分析结果提出优化方案,对于卷积层的计算,结合Winograd最小滤波算法减少其计算复杂度;对于全连接层使用批量计算的方法减少其带宽使用;对于池化层的计算,使用Ping-Pong Buffer结构来提高计算并行度从而加速计算。同时结合卷积神经网络的计算特点和FPGA的硬件结构,设计出一种流水线和并行计算结构,加速卷积神经网络的计算。在流水线结构中将每一层的计算分解成多个小的计算单元使得各个单元之间的计算可以流水执行;在并行计算结构中,将输入的特征和卷积核Rearrange,使得多个卷积核之间的运算可以并行执行。本文使用OpenCL实现了上述优化方案,以VGG16和AlexNet为例进行了多组对照实验。实验结果表明,与CPU和GPU相比,FPGA上卷积神经网络的计算处理速度位于两者之间,但是FPGA的能耗最低且能耗效率是CPU的56.8倍、是GPU的3.4倍。同时与其他的FPGA实现方法相比,本文中的方法达到了最大的系统吞吐量。最后为了将理论研究与实际应用相结合,本文设计出了基于FPGA的人脸识别系统。