论文部分内容阅读
卷积神经网络算法近年来得到快速发展,使目标检测、图像分类等技术得到广泛应用。随着卷积神经网络层数不断加深,在提高准确率的同时极大增加了网络参数量和计算量,严重影响图像分类等技术在嵌入式平台的使用。为解决上述问题,本文采用轻量化XNOR网络的设计思想,对网络中的输入特征图和权重进行二值化处理,压缩了网络模型存储空间,便于神经网络在嵌入式硬件平台上部署实现。由于FPGA具备低功耗、低延时等特点,适合二值卷积运算。本文采用高级综合(HLS)工具,针对优化后的XNOR网络设计专用FPGA加速器,并在不损失网络分类准确率的前提下,使该网络在FPGA上高效运行。本文的主要工作和贡献如下:(1)通过对XNOR网络结构分析,进行了优化设计。首先根据卷积与归一化层的相关性,去除卷积层中的偏置项,节省了数据存储空间和计算资源。其次对数据填充策略进行分析,若采用二值中的+1或者-1进行填充,在一定情况下会发生特征消失。为避免该情况发生,本文探索了两种填充模式,分别为奇偶填充和边缘扩充的方式,经过实验测试和分析最终采用边缘扩充。为了提高XNOR网络精度,减少特征信息损失,在卷积层之间引入残差结构。针对原始激活方式,引入二次项,在一定程度上解决了梯度消失问题。融合上述方法,最终构建了一个轻量级网络,并使用Tensor Flow平台对网络进行训练,在CIFAR-10数据集上达到85%的分类准确率,证明了网络设计的有效性。(2)通过对优化后的XNOR网络结构分析,将硬件整体结构分为三个模块,分别是数据缓存模块、控制器模块和计算模块,并在FPGA平台上完成整体部署实现。在模块设计中本文主要围绕数据访问优化和计算优化两条主线展开。在数据存储方面,对数据分块和数据复用的方式进行分析,根据网络参数量选择了合适的数据缓存模块。在提高计算吞吐率方面,分别进行了粗粒度和细粒度流水的探索。在卷积层中,对部分二值卷积和全二值卷积分别进行设计,将计算单元排列为二维矩阵的形式,并使用流式输入和专用寄存器设计,减少在计算过程中的数据等待,同时最大化复用卷积核移动过程中产生的数据重叠。在归一化层中使用移位代替乘法运算。在池化层中,通过池化树的形式,完成一个池化块的结果输出。在网络层之间,加入层间缓存模块,通过乒乓操作,实现层间流水。最终设计架构通过HLS实现,相比于CPU,有近30倍的速度提升。