博主评论:深鉴科技是国内做FPGA实现CNN的高端玩家,2018年被Xilinx收购,现在专做移动端的深度学习加速,开发了端到端的深度学习加速框架DNNDK,博主实测加速效果(ZCU102开发板;计算能力>1.2Tops/s,引入ARM多线程可进一步达到>2Tops/s)。这篇2016年的文章是深鉴科技早期实现卷积神经网络加速的一篇硬核论文,文章写得很深入,这里只做个简要解读~
论文地址:https://nicsefc.ee.tsinghua.edu.cn/media/publications/2016/FPGA2016_None_6tAJnDW.pdf
目录
摘要:
指出FPGA用作CNN加速器有很好的前景,但是有限的带宽和片上内存大小限制了FPGA的表现。我们对当前最先进的CNN进行深度分析,发现卷积层占用大量计算资源,全连接层占用大量内存资源。我们使用动态精度数据量化方法,并且提出一个对CNN中所有层有效的通用卷积器。我们采用4位或8位动态量化精度在深层VGG16网络上只下降了0.4%的精度。为了更好地利用外部储存带宽,我们提出了一个data-arrange method。最终我们使用16位精度在ZCU706上推断VGG-SVD网络获得了4.45fps,top-5 accuracy为86.66%;卷积层和全部层的算力表现分别为:187.8Gop/s和137Gop/s,使用150MHz工作频率。
1,介绍
当前先进的CNN模型都极其复杂,模型大多都只能放在外部储存中,因此,在嵌入式系统上加速CNN,外部储存与片上存储间的带宽变成了一个严重的问题。并且以前的研究只专注于卷积层,在全连接层仍有很多可以改进的地方。
我们的工作包括:
1. 对VGG16进行深入分析,发现其有1.38亿个权重,需要超过30G运算量,卷积层占用大量计算资源,全连接层占用大量内存资源。
2. 我们第一次提出动态精度数据量化的自动流程,并考察不同的数据量化配置。我们对VGG16模型使用8/4位动态定点量化只带来了0.4%的精度损失。对于动态精度量化,我们使用了特别的硬件设计。
3. 我们对第一层全连接层权重使用奇异值分解(SVD),降低了85.8%的存储资源消耗,设计可以用于计算全连接层的卷积器,减少资源消耗,提出了一种数据管理策略来加速全连接层。
2,CNN背景
3,已有的相关工作
软件方面在尽量少得损失精度下压缩网络;硬件方面设计特有模块和结构提供数据重用,增强数据“本地性”,加速卷积计算。
3.1 模型压缩
剪枝可以减少模型复杂度,可以避免过拟合。
3.2 数据量化
使用更少位数的定点数表示权重可以减少内存占用与计算资源占用,在【7】的工作中,将32位数用16位数代替,在mnist数据集上只引入了0.26%的精度损失。
在FPGA上,数据量化策非常重要。
3.3 CNN加速器
设计CNN加速器主要关注两个方面,一是优化计算引擎,二是优化内存系统。
4,CNN复杂性分析
在CNN推断过程中,我们使用计算一个卷积层所需要的乘法次数来评估时间复杂度。
假设一个具体的卷积层,卷积核大小,输入/出特征图大小R*C,输入通道数
,,输出通道数
,则时间复杂度:
,
池化层的时间复杂度:
,
全连接层的时间复杂度:
;
空间复杂度代表权重参数所占用内存大小,具体的:
卷积层空间复杂度:;
全连接层空间复杂度: