随着计算机处理能力的提高,神经网络作为人工智能研究和发展的新方向,已成为机器学习领域的热点。而卷积神经网络(CNN)是一种源自人工神经网络的深度机器学习算法,在视频监控、机器视觉、模式识别等领域,已经得到了广泛的应用。其对图像的平移、比例缩放、倾斜等形式的变形,具有高度的适应性,能够灵敏的提取图形特征,避免了传统识别算法中复杂的特征提取和数据重建过程。目前,卷积神经网络的传统实现多为在通用处理器平台上,以软件方式运行,其运算性能、功耗、体积等 都急需改善。而 CNN 网络结构具有高度并行性,通用处理器为执行逻辑处理和事务处理而优化的特性并不适合用来挖掘卷积神经网络固有的并行特性。鉴于此,本文充分利用半定制集成电路 FPGA 拥有大量逻辑单元和布线资源,并具有并行处理、速度快、功耗低、小型化等优势,设计了一种基于 FPGA 的 CNN 加速器。
1 卷积神经网络
1.1)基本概念
卷积神经网络作是基于动物视觉感受野设计而成的,是神经网络领域一个重要的研究分支,是一种非常典型的前向传播神经网络,特别适合于二维数据处理的应用场景。其包含输入层、输出层和隐含层。其中,输入层神经元个数与输入数据维数相关;输出层神经元个数与需要识别的种类数相同,通常采用全连接方式;隐含层可以是单层也可以是多层,通常由交替出现的卷积层和池化层组成。卷积层是用一个卷积核与图像对应区域进行卷积,并通过激活函数进行非线性变换,得到一个值,然后不断的移动卷积核窗口,进行卷积、激活运算,完成对整个图像的卷积。卷积核大小通常选为 5×5 或者 3×3,其深度与输入图像的深度相同,步长是卷积核滑窗时移动像素的个数。池化层位于卷积层中间,或者卷积层与输出层中间,其主要作用是用来逐步压缩神经元和权值数量,将上一层卷积结果,通过滑动池化窗口,将窗口内数据取最大值或者取均值,压缩成一个值,其滑动窗口大小和步长决定了输出特征图的大小。CNN 每一层的特征都是由上一层的局部而非全局区域通过共享权值的卷积核激励而得到,如下面公式所示,减少权重数量,降低训练难度。这里,m, n 分别表示输入输出特征图个数,xlj 代表第 l 层的第 j 张特征图,f 为激活函数,kij,bj 分别表示对应层的 权重和偏置。
![3b90efec6649f54d01ea0b816487b85a.png](https://img-blog.csdnimg.cn/img_convert/3b90efec6649f54d01ea0b816487b85a.png)
1.2)CNN网络结构
本设计所采用的 CNN 基本结构如下图所示。