超过70个DNN卷积算法的模板库

在机器学习中,卷积神经网络是一种深度前馈人工神经网络,已成功地应用于图像识别。

卷积神经网络是解决各种重要神经网络的机器算法之一。今天介绍的triNNity是在一个地方收集尽可能多的DNN卷积算法,并提供干净、简单和高性能的实现,它也是DNN卷积算法设计的试验平台。

该库实现了正常的密集卷积(包括直接和GEMM)、条纹卷积、扩张卷积、分组卷积、稀疏卷积、Winograd卷积、FFT卷积等,其中包括针对1x1卷积等情况的超高性能专用算法。

许多库和框架像im2col、fft和其他算法一样提供了单片操作,但实际上有几十种这些方法的算法变体,所有这些变体都更适合某种类型的卷积。

im2col

一个图像 input_num=1;

图像通道 input_channel=1;

图像高 input_h=4;

图像宽 input_w=4;

kernel高 kernel_h=3;

kernel宽 kernel_w=3;

stride=1;pad=0;

卷积后,输出图像的计算公式:

output_h=(input_h-kernel_h)/stride+1;

output_w=(input_w-kernel_w)/stride+1;

如下图,(注:图像中数据不代表图像的颜色数值)

超过70个DNN卷积算法的模板库

原图(图a)按照从左到右、从上到下的过程,将(a)中大小为3*3(因为kernel大小为3*3)的矩阵拉成右图(图b)中的一列。具体过程如下图所示:

超过70个DNN卷积算法的模板库

多通道的im2col

假设有三个通道(R、G、B)图像通道 input_channel=3;

图像在内存中的存储是:首先是连续存储第一通道的数据,然后再存储第二通道的数据,最后存储第三通道的数据。如下图:

超过70个DNN卷积算法的模板库

多通道的im2col的过程,是首先im2col第一通道,然后在im2col第二通道,最后im2col第三通道。各通道im2col的数据在内存中也是连续存储的。如下图:

超过70个DNN卷积算法的模板库

在底层,该库使用BLAS、OpenMP多线程、SIMD矢量化等等,而不需要任何程序员干预。它也可以完全独立运行,没有任何启用这些组件或仅启用这些组件的子集。我们目前支持x86_64和aarch64,但是计划支持更多的平台。由于该库是作为header -only c++发布的,因此启动一个新平台所需要的都是支持C ++ 14标准的工作编译器。

目前已经与英特尔MKL、OpenBLAS、ARM计算库、FFTW和libxsmm等集成在一起,作为提供特定功能(如优化的GEMM例程)的后端库。

该库是在BSD3许可证下发布的,并附有一个广泛的性能基准测试套件。

该基准测试套件包含基于PBQP公式的复杂的提前优化框架的原型实现,该框架使用来自性能基准测试的简档计时来构建成本模型,其可以从70多种卷积算法中静态地选择以产生一个完整的CNN的可证明的最佳实例。

相关推荐