在FPGA平台上为卷积神经网络更深

Going Deeper with Embedded FPGA Platform for Convolutional Neural Network

ABSTRACT

最近几年,基于卷积神经网络(CNN)的方法在众多运用中取得了巨大的成功,并且,一直在计算机视觉领域中功能最强大、运用最广泛的技术之一。但是,基于CNN的方法计算量大并且耗费资源,因此,很难集成到像智能手机、智能眼镜和机器人等嵌入式系统中。FPGA是加速CNN最有前景的平台之一,但是,有限的带宽和片上存储大小限制了FPGA对CNN加速的性能。

本文中,我们深入研究加速CNN的嵌入式FPGA平台,并且提出了一个对ImageNet大规模图像分类的嵌入式FPGA的CNN加速设计。我们首先对最优秀的CNN模型进行分析,并证明(show)卷积层是计算中心,全连接层是内存中心。然后提出动态精确度数据量化方法,并在CNN中对所有层类型有效的卷积核设计,以便提高带宽和资源利用率。结果表明,当使用8/4为量化时,对于非常深的VGG16模型,我们的数据量化流程仅增加0.4的精确度损失。提出了一种数据排列方法,以进一步确保外部存储器带宽的高利用率。最后,在嵌入式FPGA平台上实现最优秀的CNN(VGG16-SVD)作为案列研究。VGG16-SVD是迄今为止在FPGA端到端实现的最大、最具影响力的网络。在Xilinx Zynq ZC706电路板上的系统可实现4.45帧的帧速率,16位量化的top-5精确度86.66%。在150MHz工作频率下,卷积层和全连接层的平均性能分别为187.8GOP/s和137.0GOP/s,明显优于以前的方法。

1. INTRODUCTION

图像分类是计算机视觉(CV)中一个基本的问题。近几年,卷积神经网络(CNN)已经在图像分类精度方面取得了很大的进步。在2012年ImageNet大型视觉识别挑战赛(ILSVRC)中,Krizhevsky等人表明,CNN在分类任务中获得了top-5精度84.7%,这显示优于其他传统图像分类方法。在接下来几年中,ILSVR 2013/2014/2015年的准确度提高到88.8%、93.3%、96.4%。

当实现最优性能的同时,与传统方法相比,基于CNN的方法需要更多的计算和内存资源。以这种方法,大多数基于CNN的方法必须依赖于大型服务器。然而,对于需要高精度和实时物体识别的嵌入式系统(例如,自动驾驶和机器人),存在不可忽视的市场。但是,对于嵌入式系统来说,有限的电池和资源是严重的问题。

为解决这个问题,许多研究人员已经提出各种计算或内存途径方面的CNN加速技术。然而,大多数以前的技术只考虑小型CNN模型,例如单任务MNIST手写体识别的5层LeNet。用于大规模图像分类的优秀CNN模型具有极高的复杂度,因此只能存储在外部存储器中。这种方法的话,对于CNN加速,尤其是嵌入式系统,存储带宽变成一个严重的问题。此外,此前的研究集中在加速卷积层(CONV),而全连接层(FC)没有得到很好的研究。因此,我们需要深入研究嵌入式FPGA平台来解决这些问题。

本文中,我们深入研究如何在嵌入式FPGA平台上部署全CNN加速器。提出了一种用于ImageNet大规模分类的CNN加速器,可以以4.45帧的速度执行非常深的VGG16-SVD模型。具体来说,本文做出以下贡献:

  • 我们对大规模图像分类的最优CNN模型进行了深入分析。我们展示了最优的CNN模型是非常复杂(例如,VGG16模型有1.38亿个权重,需要超过30 GOPs),卷积层是计算核心,全连接层是存储核心。

  • 我们首先提出了一种用于动态精度数据量化的自动流程,并探索了各种数据量化配置。结果表明,在在8/4位动态精度量化下,VGG16模型仅增加了0.4精度损失。特定的硬件也被设计为动态精度数据量化。

  • 我们发现,全连接层的性能主要受限于嵌入式FPGA平台上的内存带宽,这与卷积层不同。以这种方法,我们对第一个全连接层的权重矩阵运用SVD,这减少了该层85.8%的内存占有量,设计可以计算全连接层以降低资源消耗的卷积器,并提出一种数据排列方案来加速全连接层。

  • 我们提出了一个针对ImageNet大规模分类的嵌入式FPGA平台上的CNN加速设计。在Xilinx Zynq平台上,我们系统在150MHz频率下,卷积层和全连接层分别达到187.8GOP/s和137.0GOP/s的性能。通过VGG16-SVD网络,我们实现4.45帧的速度和86.66%的top-5精度。

其余论文组织如下:在第2节中,介绍CNN的背景;第3节中,介绍和讨论相关工作;我们在第4节中分析了最先进的CNN模型的复杂性分布;在第5节中,提出了动态精度数据量化流程;第6节中提出了图片分类系统设计和实现细节;第7节中介绍了对全连接层的存储系统和数据排列方法;第8节中评估和讨论了所提出系统的性能;最后在第9节中总结本文。

2. BACKGROUND

深度卷积神经网络在广泛的视觉相关任务中实现了最先进的性能。在本节中,为了帮助理解本文分析的基于CNN的图像分类算法,我们将介绍CNN的基础知识。还介绍了ImageNet数据集和最先进的CNN模型。

2.1 Primer on CNN

image

一个典型的CNN由多层顺序处理组成。CNN模型的参数称为“权重”。CNN的第一层读取输入图像并输出一系列特征图。下一个图层读取先前图层生成的特征图,并输出新的特征图。最后,分类器输出输入图像可以属于的每个类别的概率。卷积层和全连接层是CNN中两种基本的层。卷积层之后,通常存在池化层。典型的CNN实例如图1所示。
在本文中,对于CNN层,这里写图片描述表示第 j 输入 feature map ,这里写图片描述表示第 i 输出 feature map,这里写图片描述表示第 i 输出 map 的权重。对于卷积层,这里写图片描述这里写图片描述表示输入和输出 feature maps 的数量。对于全连接层,这里写图片描述这里写图片描述是输入和输出 feature vector的长度。

卷积层采用一系列特征图作为输入,并用卷积核卷积来获取输出特征图。一个非线性层,将非线性激活函数运用输出特征面的元素的非线性层通常附加到卷积层。卷积层可以用公式1表示:
这里写图片描述
其中,这里写图片描述是卷积核运用在第 j 输入 feature map和第 i 输出 feature map。
全连接层对输入特征向量运用线性转换:
这里写图片描述
其中, W这里写图片描述转换矩阵, b是偏置。 应该注意的是,对于FC层,输入不是多个2-D feature map的组合,而是一个feature vector。因此,在等式2中,参数这里写图片描述这里写图片描述实际上对应于输入和输出 feature vector 的长度。
池化层,其输出每个特征图中每个子区域的最大值或平均值,通常附加到卷积层。最大池化可以表示为公式3:
这里写图片描述
其中,p 是池化核的大小。这种非线性的“下采样”不仅减少了 feature map 大小和后续层的计算,而且还提供了一种 translation invariance 的形式。

CNN可以用于在前向推导过程中图像进行分类。但在将CNN用于任何任务之前,首先应该在数据集上训练CNN。最近的研究表明,对特定任务大型数据集进行预训练的CNN模型可用于其他任务,并通过微小调整网络权重实现高精度。这种微小调整称为“微调(fine-tune)”。CNN的训练主要在大型服务器上实施。对于嵌入式FPGA平台,我们只关注加速CNN的推理过程。

2.2 ImageNet Dataset

ImageNet数据集被视为评估图像分类和目标检测算法性能的标准基准。到目前为止,ImageNet数据集已经在超过2.1万类别中收集了超过1400万张图片。ImageNet为ILSVRC分类任务发布了1000个类别的120万张图片子集,这极大促进了计算机视觉的进展。在本文中,所有CNN模型都使用ILSVRC2014训练数据集进行培训,并使用ILSVRC2014验证集进行评估。

2.3 State-of-the-Art CNN Models

在ILSVRC2012中,SuperVision团队使用AlexNet赢得了图像分类任务的第一名,top-5精确度达到了84.7%。CaffeNet是复制AlexNet的基础上进行了很小的改动。AlexNet和CaffeNet都包含5个卷积层和3个全连接层。
Zeiler-and-Fergus(ZF)网络top-5精度达到了88.8%,并在ILSVRC2013的图像分类任务中获得第一名。ZF网络也包含5个卷积层和3个全连接层。

VGG模型top-5精度达到了92.6%,并在ILSVRC2014图像分类任务中获得第二名。VGG模型由5个卷积层和3个全连接层组成。根据确切的层数,有几种版本的VGG模型,包括VGG11、VGG16、VGG19,如表1所示。
这里写图片描述

为了加速CNN,已经研究了从软件和硬件角度来看的一组技术。从软件角度来看,目标是压缩CNN模型,以减少内存占有和操作次数,同时最大限度降低精度损失。从硬件角度来看,特定的体系结构和模块被设计为了重用数据,增加数据的“局部性”,并加速卷积操作。为了在嵌入式系统部署CNN模型,与CPU和GPU平台相比,运算和权重的bit带宽通常会下降。

3.1 Model Compression

网络修剪和分解被广泛用于压缩CNN模型。在早起工作中,网络修剪被证明是降低网络复杂性和过拟合的有效方法。在论文【20】中,修剪了神经网络中影响较小的连接,并实现9x和13x压缩CaffeNet和VGG16模型,并且没有精度损失。奇异值分解(singular value decomposition,SVD)经常用于减少内存占用。在论文【22】中,使用SVD和过滤器聚类来加速CNN的前两个全连接层。在论文【23】中,提出了一种在更深层模型上测试的方法,在网络参数上使用低秩分解(low rank decomposition), 并考虑非线性单元。论文【24】中,使用 rank-1 过滤器来近似原始过滤器。

3.2 Data Quantization

与浮点数相比,在ASIC和FPGA上实现定点运算单元要高效的多。因此,大多数以前的CNN加速器使用定点数而不是浮点数[7, 25, 26, 6]。权重和数据的较短定点表示可以明显减少内存占用和计算资源。例如,论文【7】中结果表明,16位乘法器的面积和功率为0.164×,与32位乘法器相比0.136×,在65nm制造工艺。

大多数以前的工作采用了16位量化策略[27, 25, 7,8 ]。在论文【7】中,陈等人,结果表明,使用16位数字而不是32位数字,在MNIST数据集上仅引入0.26%的错误率。在论文【8】中,16位数字用于推理过程中,而32位数字用于训练过程,MNIST数据集的结果表明只有0.01%的精度降低。

为了在嵌入式FPGA平台上加速大型CNN模型,数据量化是相当重要的,引入可忽略精度损失的更短表示。然而,虽然以前的工作使用数据量化,但没有全面的分析不同的量化策略。

3.3 CNN Accelerator

以前的CNN加速器设计一般可分为两组:第一组侧重于计算 engine,第二组旨在优化存储系统。

CNN是计算极其密集型的,因此需要强大的计算引擎来加速它们。Chakaradhar等人,在论文【11】中提出了一种动态可配置的CNN体系结构。他们在计算模块之间添加专用开关,以便在不同的CNN层上进行动态配置的设计空间探索。还提出了一种关联编译器,以充分利用CNN工作负载之间的并行性。

3.4 Motivation

4. COMPLEXITY ANALYSIS OF CNN

猜你喜欢

转载自blog.csdn.net/XingpengLu/article/details/80896774