ARM NEON卷积神经网络加速简介-技术创作101训练营

2020-09-23 11:08:01 浏览数 (1)

一、编写目的

该文档用作提供使用ARM-NENO技术在卷积神经网络上应用。

二、ARM-NEON与卷积神经网络

2.1 卷积神经网络

参考相关网站: http://cs231n.github.io/convolutional-networks/

卷积神经网络的计算主要包括大量的卷积核的乘法运算。为了加速乘法运算,可以使用ARM-NEON技术,比如ncnn就依据此类技术实现,除了ncnn外,ARM还提供了官方的基于NEON技术的计算库ARM Compute Library以及专为深度学习设计的ARM NN。根据实现方式分为以下两种:

  • ncnn:针对不同平台实现高效的几种卷积核(1x1/3x3/5x5/7x7)运算,以点乘为主(特别地,1x1的可以看做是gemm)。优点在于效率高,缺点在于通用性不强,专门面向深度学习。
  • GEMM(General Matrix Multiplication):实现通用的矩阵乘法运算,可参考类似openblas的实现过程。优点在于通用性好,缺点在于将卷积运算转换成矩阵乘法运算耗内存资源。

2.2 矩阵乘法计算

矩阵乘法通用易理解的表达如上图1所示,其中矩阵乘法在目前的基于CPU的架构中无法达到实时性的主要原因有:

  • 软件编写无法发挥硬件的计算能力
  • 硬件本身计算能力存在瓶颈
  • 算法对乘法计算要求较大

针对上述3个原因,可以思考的方法有三点:

  • 修改软件编程模型,使用汇编或者硬件原生支持的加速方法,比如ARM NEON提供的指令以及库
  • 更换硬件平台,提升硬件平台能力,比如FPGA、GPU等
  • 对计算进行优化,减少计算量(主要是减少乘法数量),比如Winograd变换(增加计算的复杂度),如图2所示
Figure 1. 矩阵乘法示意Figure 1. 矩阵乘法示意
Figure 2. Winogard变换Figure 2. Winogard变换

在不更换硬件平台的情况下,可以使用ARM NEON技术更好地发挥硬件性能。基于ARM NEON技术的矩阵乘法加速可以理解为利用矩阵乘法并行性,如图3所示。

Figure 3. 矩阵乘法并行性Figure 3. 矩阵乘法并行性

2.3 卷积神经网络转换矩阵乘法

如果为了使用GEMM方法进行卷积神经网络加速,需要将卷积神经网络中的卷积层计算转换成矩阵乘法,然后利用GEMM进行加速,卷换过程如图4所示。

Figure 4. [卷积计算转换矩阵乘法](https://hal.inria.fr/inria-00112631/document)Figure 4. [卷积计算转换矩阵乘法](https://hal.inria.fr/inria-00112631/document)

三、总结

通过ARM NEON技术进行卷积神经网络加速,可以采用的路径有:

1.参考2.3将卷积神经网络转换成矩阵乘法,然后参考openblas的实现过程,使用ARM提供的ACL库(ARM Compute Library)或者ARM NN实现。

2.如果是ncnn支持的网络模型,可以使用ncnn进行加速。如果不支持的网络模型,可以参考ncnn对于相关卷积计算的实现做个性化的应用开发。

0 人点赞