卷积神经网络流程图_基于脉动阵列的卷积计算模块硬件设计

在过去的几年里,深度神经网络(Deep Neural Network,DNN)在图像分类、目标检测[1]及图像分割等领域起到十分重要的作用。这些使用的各种DNNs及其拓扑结构中,卷积神经网络(Convolutional Neural Network,CNN)是其中最为常见的实现方式。目前在硬件加速方案中,主要有基于CPU、GPU以及FPGA三种主流方案。考虑到 CPU性能限制和GPU功耗高的问题,采用FPGA来实现卷积神经网络成为了一种可行的实现方式,例如文献[2]在FPGA中实现神经网络目标检测系统,其检测速度与能效均优于CPU。采用传统的Verilog HDL或者VHDL硬件描述语言实现卷积神经网络较为困难[3],高层次综合(High Level Synthesis,HLS)将C/C++代码通过特定的编译器转化为相应的RTL级的代码,降低了卷积神经网络的开发难度,减少了卷积神经网络的开发周期。

使用FPGA实现卷积神经网络中模块的过程中,通常采用循环平铺和循环展开[4]的方式实现。这种方式以扩大并行度来达到网络的时间复杂度。但是当输入和输出特征图维度增加时,扩大并行度会带来硬件设计中长广播、多扇入/扇出的数据通路,导致卷积计算模块无法在较高的主频上运行。因此,很多神经网络加速器都使用来优化加速器架构设计,如谷歌TPU加速器[5]、ShiDianNao加速器[6]等。而在这些加速器架构设计中大多是采用im2col[7]的方式,即将参与卷积计算的输入特征图和权重展开为两个矩阵,然后进行矩阵乘法运算。这种实现方式因为卷积步长的存在而产生大量的数据重叠,不利于在FPGA的片上块存储器(Block RAM,BRAM)内进行存储。

为了解决上述存在的问题,本文提出一种基于脉动阵列的卷积计算模块设计,将由并行展开所带来的长数据通路变为每个处理单元的短数据通路;并按照存储矩阵的坐标向卷积计算模块中输入特征图数据,以解决im2col方式存在的数据重叠,不利于BRAM存储的问题。整体设计使用Vivado HLS开发环境进行实现与优化。

1 本文工作

1.1 脉动阵列实现卷积计算模块

脉动阵列(Systiloc Array)[8]是1970年KUNG H T[9]提出的一种应用在片上多处理器的体系结构,由多个相同的、结构简单的计算单元(Processing Element,PE)以网格状形式连接而成,具有并行性、规律性和局部通信的特征。信号处理算法如卡尔曼滤波[10]和数值线性代数算法都可以用脉动阵列来实现。本文卷积计算模块中采用的脉动阵列实现方式如图1所示。

1c289a8ea34628a76d98a8cfc9c803ea.gif

在图1中,I表示输入特征图,W表示权重参数,O表示输出特征图,r、c分别表示特征图的长和宽,m、n分别表示输入特征

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值