caffe中卷积计算是如何使用通用矩阵乘法(GEMM)实现的?

首先有一个问题:Q:对于一个I*W*H输入图像,要求输出维度为W'*H'*256需要多少个卷积核?

A:第一种说法:由于输入channel是I且输出channel为256,如果将卷积核看做2纬的化,需要I*256个卷积核。

第二种解法:如果将一个卷积核看做一个三维矩阵的话,每个矩阵为I* K*K,那么就需要256个卷积核。

       caffe中卷积计算是如何使用通用矩阵乘法(GEMM)实现的?_第1张图片

显然第一种说法是最易于理解的,但是对于计算机来说第二种是最易于实现的。具体实现步骤如下图所示:

caffe中卷积计算是如何使用通用矩阵乘法(GEMM)实现的?_第2张图片

首先将输入图像在相应卷积核的覆盖区域的像素点reshape为行向量,某一channel的输入图像W*H,可生成((W-kernelsize+2padding)/stride + 1)^2个行向量,如上图所示:(3-2)/1+1=2^2=4个行向量。然后再讲每一个行向量按其所在的channel排成一列,最后生成了如下的矩阵。

caffe中卷积计算是如何使用通用矩阵乘法(GEMM)实现的?_第3张图片

最后将每一个维度为 I* K*K的卷积核转化为列向量,将每一个列向量按输出channel排列成一行。如下图所示,就可以进行矩阵乘法了。

 caffe中卷积计算是如何使用通用矩阵乘法(GEMM)实现的?_第4张图片

明白了以上计算步骤就可以理解Learning Structured Sparsity in Deep Neural Networks论文中关于GEMM计算的部分。

caffe中卷积计算是如何使用通用矩阵乘法(GEMM)实现的?_第5张图片

 其中:

高亮句子说明:一个三维的卷积核被转换为了一个行向量权重矩阵,它的列是一组权重,如下图所示。因为经过稀疏化处理之后卷积核矩阵维度减小,计算量相应减小,训练过程以及预测过程相应加速。 

 caffe中卷积计算是如何使用通用矩阵乘法(GEMM)实现的?_第6张图片

 

你可能感兴趣的:(caffe中卷积计算是如何使用通用矩阵乘法(GEMM)实现的?)