在这个项目中,我们三人一组,主要实现的功能是利用Vivado软件操作平台在ZedBoard-zynq-7000c484开发板平台上实现卷积神经网络算法优化的目标。
通过上述优化,在相同硬件资源条件下,最终实现的运算速度比传统计算快183倍,比硬件优化方法快20%。这个项目获得了全国集成电路创新创业大赛二等奖。
我们的总体设计方法是这样的,首先在 C++平台上实现卷积核算法和反卷积算法,然后通过 vivado HLS 仿真进行总线带宽、pipeline、内部缓存、计算单元等方面硬件的优化,仿真波形和实际相符后,生成相应的 IP 核,vivado 导入 IP 核和 zynq7000 进行实物仿真,经过验证正确后烧入 fpga。图像从电脑端通过串口输入开发板,由于片内缓存不足以一次性存储1024个channel的150*150的图像,所以采用动态缓存的办法,Zynq 边对图像进行卷积处理,边从特征 cache 读取图像数据,一个 channel 处理完成后立即输出至 SDSDRAM(输出数据量较小),并空出相应的缓存资源供后续 channel的图像使用。我们将开发板的 8 个 LED 设置为输出结果,板上运行时,可通过 LED判断输出波形。
Vivado HLS 开创了一种全新理念,那就是用户可以通过 C/C++代码即可直接生成硬件执行文件,这使得很多用户不需要掌握特别深入的硬件知识也可进行硬件开发,降低了硬件开发的瓶颈,同时使得开发者把精力集中在优化算法和数据结构上,节省了大量时间。同时 vivado HLS 可以智能地进行内部资源分配,实现硬件优化。
遇到的问题:
传统的卷积神经网络计算电路存在一系列问题。第一,传统方法未考虑大量的0,导致算法低效、硬件利用效率低;第二,硬件计算单元任务量各异,不同单元间存在“等待”,时间冗余;第三,反卷积网络稀疏率极高,未避免计算资源浪费。
针对上面这几点问题,我们进行了相应的优化。
第一,稀疏矩阵处理:对稀疏矩阵采用稀疏处理,跳过含0项的计算,可以大大减少程序的运行时间,且稀疏率越大,效果越显著。
第二,负载均衡:对稀疏不均矩阵采用负载均衡处理,在并行的前提下可以提高运行速度,且不均匀程度越大,提高程度越大。
第三,并行计算:构建卷积核内并行计算机制,大大提高计算速度。在算法级,采用unroll实现。
第四,数据复用:卷积的过程对输入数据的采集存在重复的情况,引入数据复用机制,可以节省读取输入数据的时间。
第五,反卷积运算:反卷积稀疏率更大,因此优化效果更好。