首先有一个问题:Q:对于一个I*W*H输入图像,要求输出维度为W'*H'*256需要多少个卷积核?
A:第一种说法:由于输入channel是I且输出channel为256,如果将卷积核看做2纬的化,需要I*256个卷积核。
第二种解法:如果将一个卷积核看做一个三维矩阵的话,每个矩阵为I* K*K,那么就需要256个卷积核。
显然第一种说法是最易于理解的,但是对于计算机来说第二种是最易于实现的。具体实现步骤如下图所示:
首先将输入图像在相应卷积核的覆盖区域的像素点reshape为行向量,某一channel的输入图像W*H,可生成((W-kernelsize+2padding)/stride + 1)^2个行向量,如上图所示:(3-2)/1+1=2^2=4个行向量。然后再讲每一个行向量按其所在的channel排成一列,最后生成了如下的矩阵。
最后将每一个维度为 I* K*K的卷积核转化为列向量,将每一个列向量按输出channel排列成一行。如下图所示,就可以进行矩阵乘法了。
明白了以上计算步骤就可以理解Learning Structured Sparsity in Deep Neural Networks论文中关于GEMM计算的部分。
其中:
高亮句子说明:一个三维的卷积核被转换为了一个行向量权重矩阵,它的列是一组权重,如下图所示。因为经过稀疏化处理之后卷积核矩阵维度减小,计算量相应减小,训练过程以及预测过程相应加速。