Caffe中卷积的实现

  • 方法:将卷积转化为矩阵相乘
    两步:
    (1)调用im2col函数,将图像(feature map)转化为矩阵
    (2)调用GEMM函数,做实际的运算

  • 优点:逻辑简单,易于实现

  • 缺点:耗费大量内存

Caffe中卷积的实现

  • feature map每一个卷积位置(卷积核将要滑过的位置),展开成一个CKK维的行向量

Caffe中卷积的实现

  • 继续展开……

Caffe中卷积的实现

  • 按照这个方式展开完毕之后,得到一个矩阵:HW行(因为有HW个卷积位置),CKK

Caffe中卷积的实现

  • 卷积核方面呢,假设我们的卷积输出是Cout个通道(num_output数),那么我们一共有CoutC个卷积核,每个卷积核的尺寸是KK. 也就是说一共有Cout组卷积核,每一组包含C个尺寸为KK的卷积核。
  • 在展开时,Cout组卷积核中的每一组展开成一个CKK行向量,所以展开完毕后我们得到卷积核矩阵为Cout行,CKK列。
  • 在得到上述两个矩阵之后,我们做矩阵乘法,用Feature Matrix的转置乘以Filter Matrix,得到一个Cout×(H×W)形状的矩阵。就可以解释为输出的3维Blob.

参考链接:
在 Caffe 中如何计算卷积? - 知乎