论文部分内容阅读
手势识别作为一种更加自然、更加灵活的人机交互方式越来越受到人们的青睐。传统的手势识别方法主要依赖数学和图像处理技术,识别率底、鲁棒性差。目前,研究人员使用深度学习算法进行手势识别,该算法对图像具有平移和旋转不变性,并且对光照等影响较低,因此具有识别率高、鲁棒性好特征。但是算法的计算密集,实时性较差。在GPU(Graphics Processing Unit),ASIC(Application Specific Integrated Circuit)平台加速存在体积大、功耗高、成本高的问题,限制了其在嵌入式移动平台的使用。针对上述问题,本文在FPGA(Field Programmable Gate Array)端搭建手势识别系统,实现实时的手势识别。针对卷积神经网络计算密集型的特征,本文首先对卷积神经网络的时间复杂度和空间复杂度进行分析,通过上述分析,对已有网络模型进行修改,优化了一个能够在FPGA上实现的卷积神经网络模型。在该模型中,我们省略了卷积层中的池化操作。在分析了输出层与softmax层输出之间呈正相关关系后,省略网络的softmax层,通过比较输出层中值得大小,将输入归属为输出层中值最大所代表的类。然后在PC端使用GPU对网络进行训练,训练完成后将模型参数提取出来用于卷积神经网络在FPGA上的前项推理。针对卷积神经网络的实时性问题,本文通过对卷积神经网络算法的详细分析,充分挖掘卷积神经网络中潜在的并行性计算。其中包括图像局部感知域与卷积核进行卷积运算时的并行性;不同特征图与卷积核不同通道之间的并行性计算;网络结构中不同层之间的并行性计算。结合FPGA情况,提出对矩阵卷积运算采用全展开的方式进行加速;在不同卷积核之间提出使用流水线(PIPELINE)这种伪并行性计算的方式进行加速;对于网络中的层间并行性,采用多个层同时加速的方式加速。由于全连接层神经元数量一定,因此在FPGA上实现网络的前项推理过程中,必须对摄像头获取的1080p图像先进行缩放后才能作为网络的输入。为保证图像缩小过程中保留尽可能多的信息,本文采用双线性插值算法对图像进行缩放。最后在Xilinx Zynq-7000 SoC处理器上实现卷积神经网络模型,实验表明FPGA可以完成对卷积神经网络的加速,提高网络运行的实时性。