《Toward an Efficient Deep Pipelined Template-Based Architecture for Accelerating the Entire 2-D and 3-D CNNs on FPGA》
2020年IEEE TCAD&&ICAS的文章,标题很清晰的说明了这篇文章的工作的特点:1.同时在FPGA上实现了2D和3D卷积网络 2.模块化(Template-Based)设计模式 3.基于流水线(Pipelined)技术
这篇文章的内容是从FPGA2018的会议论文《Towards a uniform template-based architecture for accelerating 2D and 3D CNNs on FPGA》中扩展出来的。
本文解决的核心问题:
为具有密集计算量和存储量的3D卷积网络(以及2D卷积网络)设计了FPGA加速方式。
Contributions:
1.基于Winograd算法,设计了一种3D和2D卷积神经网络在FPGA上的统一计算架构。
2.基于混合复用的网络层融合技术、网络层聚类技术、工作负载平衡技术将CNN部署到FPGA中。
3.设计了有效的设计空间探索技术,提升网络层融合效率。
4.基于文中架构实现了VGG-16、VGG-19、C3D、Based3D等网络,速度提升明显。
背景知识:
1.介绍了3D卷积面向的视频分类问题
2.介绍了3D卷积网络与2D卷积网络相似的网络层特性。卷积层占据最多的计算量(Computation-intensive)、全连接层占据大多数存储量(Memory-intensive)。同时指出,网络中间值占据的空间(377.7MB)比网络权重(235.1MB)还多,这意味着卷积层也需要大带宽的存储。
3.Winograd算法
参考博客:https://www.cnblogs.com/shine-lee/p/10906535.html
总体来说,Winograd算法通过减少乘法次数(加法次数会相应增加),来提升卷积计算速度。文中提到,Winograd算法普遍被应用在FPGA的CNN实现中。
实现思路与计算架构
1.设计基于Winograd算法的3D和2D卷积神经网络分块计算方法。
2.Winograd算法的变换矩阵(Transformation matrices)由许多1和-1构成,可以将乘法化简为加法和减法;
一些特殊的乘法\除法(x2、1/4等)可以优化为移位操作。
下图是基本计算单元的逻辑。
3.整体计算架构
Layer Computation Engine(LCE)、Processing Units(PU)、Processing Engines(PE)分别构成三级计算架构
下图是PE计算的伪代码
未完待续。。。。。
该文章带来的启发:
1.要充分利用Vivado HLS的编译指令。
2.Xilinx Ultrascale架构的存储资源可以有效消除片外到片内的数据传输时间。(需要进一步调研)
3.可以利用Winograd算法做一些实验。