论文部分内容阅读
随着计算机性能的不断提升,以及学术界对机器学习领域研究的逐渐深入,卷积神经网络(convolutional neural network,CNN)成为了近年来最为热门的机器学习算法之一,在机器视觉、视频监控、图像搜索、模式识别等领域得到了广泛的应用。目前的卷积神经网络算法主要通过GPU平台进行实现,但由于GPU存在能耗过高的问题,难以应用于嵌入式系统中。基于ASIC的卷积神经网络加速器开发周期长、成本投入巨大且缺乏灵活性。现有的嵌入式系统大多基于ARM、FPGA等单一平台。使用ARM可以方便快捷的搭建嵌入式系统,由于卷积神经网络中特定的计算方法,单独在通用处理器上运行效率较低,难以达到满意的性能。FPGA具有强大的可编程性、低延迟设计、低功耗特性,基于FPGA的卷积神经网络加速器逐渐引起人们的重视,成为现如今深度学习算法硬件实现研究的一个重要领域。但是在FPGA中部署卷积神经网络算法仍然存在很多挑战,随着算法理论的发展与完善,近年来提出的新算法网络层数逐渐加深,网络层操作复杂化、多样化,通过传统的HDL语言编写FPGA存在开发难度高、开发周期长、可移植性差的问题。本文采用了ARM+FPGA的异构设计,对基于卷积神经网络的SSD算法进行软硬件协同开发。SSD算法卷积部分涉及乘加操作计算总量约为68.22G次,权重因子数量约为27.44M个,属于计算密集、存储密集型算法。在算法层面上,对SSD的部分网络层进行硬件适应性优化,并使用PASCAL VOC 2007、VOC 2012数据集对优化后的算法进行训练,重新训练后的算法与原SSD算法的查准率几乎一致。部署过程中,对算法进行合理的软硬件分区,将计算密集、耗时占比高的部分进行硬件加速。分析了卷积神经网络算法的共有特性,在PL端设计了加速器通用架构,采用对卷积层进行维度拆分和分区数据流管理的方式,使加速器可实现任意尺寸的卷积计算,并使用高层次综合(high-level synthesis,HLS)的开发方式对通用卷积核各层级进行了并行化设计,PL端加速器可高效完成卷积、池化、激活等网络层操作。在PS端对算法的特异性模块进行编写,通过调用PL端加速器的方式实现算法通用网络层堆叠,使用SDSoC平台综合设计完成了ARM与FPGA间高速的信息交互,实现了SSD算法网络的快速搭建。最终在Xilinx ZCU102开发板上实现了优化后的SSD全网络,在200MHz的频率下,数据类型为单精度浮点时,单帧检测速度为1.57s,本文提出的软硬件协同设计方案与基于ARM的软件设计方案相比,可实现110倍的加速比,并节约101倍的功耗。若对算法进行定点量化及剪枝压缩优化,可在嵌入式领域实现SSD算法的视频流实时处理。