论文部分内容阅读
近年来,卷积神经网络在诸如图像分类、姿态估计等许多应用领域展现出优异的性能,在无人机和无人驾驶等场景中非常适用。但是,GPU作为最常见的深度学习平台,其较低的能效比导致它在功耗等方面有一定的局限性,因此不能满足这些嵌入式低功耗平台的使用条件,实际应用受到了限制。嵌入式的CNN需要资源需求更小、效率更高的实现方式,本文着重研究在FPGA平台上如何高效地实现深度卷积神经网络。随着网络深度的增加,普通网络会出现过拟合问题,而残差网络能够有效地解决这一问题并且在多项应用中均有着不错的效果。因此,本文在众多的神经网络架构中选择了残差网络。根据其捷径连接实现方式的不同,最终选择了一个以补零方式实现捷径连接的30层残差网络在FPGA上加以实现。针对FPGA硬件平台和残差网络的特点,本文进行了电路总体设计和各子模块的设计。所选网络每层的权重及输入/输出数据量较大,因此本文采用DDR对数据进行存储,并在读写DDR的过程中使用了Xilinx MIG IP核,避免了复杂的DDR直接操作。根据所选残差网络的结构及运行过程,本文对网络前向推理部分进行了设计,在所选网络中,全连接层和最大值池化层等仅出现一次,而残差块结构则多次出现,本文在设计中充分考虑了计算单元在各残差块之间的复用。此外,由于网络中全局池化操作与捷径连接中的池化操作类似,本文考虑了它们之间运算单元的复用,节省了硬件资源。在所选网络的前向推理过程中,3×3的卷积运算占了绝大部分,本文在处理单元模块中将该运算完全展开,以加快网络运行速度。由于所选网络的参数量较大,且运算过程中对各参数使用频繁,为了减少读取数据的时间开销,本文采取了片上缓存策略,每次从DDR中读取网络单层的权重和偏置参数,存储在片上的BRAM中,最大化片上数据复用,避免反复访问片外存储。本文对所设计的电路进行了仿真和验证,并与软件实现方案的运算结果进行了比对,结果表明,所设计的系统功能正确,且具有能耗低,消耗硬件资源较少等优点,能够满足一般嵌入式低功耗平台的应用条件。而且本文针对残差网络架构所做的FPGA电路设计具有一定的通用性,经过适当修改,可以推广到其他类似的卷积神经网络,具有实际意义。