-
方法:将卷积转化为矩阵相乘
两步:
(1)调用im2col函数,将图像(feature map)转化为矩阵
(2)调用GEMM函数,做实际的运算 -
优点:逻辑简单,易于实现
- 缺点:耗费大量内存
- feature map每一个卷积位置(卷积核将要滑过的位置),展开成一个
C∗K∗K 维的行向量
- 继续展开……
- 按照这个方式展开完毕之后,得到一个矩阵:
H∗W 行(因为有H∗W 个卷积位置),C∗K∗K 列
- 卷积核方面呢,假设我们的卷积输出是
Cout 个通道(num_output数),那么我们一共有Cout∗C 个卷积核,每个卷积核的尺寸是K∗K . 也就是说一共有Cout 组卷积核,每一组包含C 个尺寸为K∗K 的卷积核。 - 在展开时,
Cout 组卷积核中的每一组展开成一个C∗K∗K 行向量,所以展开完毕后我们得到卷积核矩阵为Cout 行,C∗K∗K 列。 - 在得到上述两个矩阵之后,我们做矩阵乘法,用Feature Matrix的转置乘以Filter Matrix,得到一个
Cout×(H×W) 形状的矩阵。就可以解释为输出的3维Blob.
参考链接:
在 Caffe 中如何计算卷积? - 知乎
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Caffe中卷积的实现 - Python技术站