caffe中的卷积实现

在caffeine中,作者并没有按照传统的卷积方式来实现卷积,而是按照matlab中的方法imcol来实现卷积的。具体实现方式如下:
caffe中的卷积实现_第1张图片
按照caffe中做一次前向传播时卷积层的计算量方法得出:
Calculation(MAC) = I*J*M*N*K*L
I*J表示卷积核的大小,M*N表示输出特征图的大小,K表示输入通道,L表示输出通道。所以,由以上参数得:对于输入和输出分别为K和L的卷积来说,相当于如下:
caffe中的卷积实现_第2张图片
说明对于一个输入通道为n_c的图片来说,其过滤器的通道也必须是n_c,每个过滤器有n_c个卷积核,共有n*n_c个卷积核,n恰好是过滤器的个数,也是输出特征图片的通道数。即:输入通道数位K、输出通道为L时,输卷积核的个数应该是K*L。由于每个卷积核在一个位置进行I*J次的乘法和累加运算,一个输出中共得计算了M*N次,则总的输出中共计算了M*N*I*J*K*L次。这就是calculation(MAC)公式的由来。

由im2col图中也可以看出,caffe中的卷积运算是先将一张图片的所有像素点组合成一个矩阵X,再将卷积核也相应的变换成对应的矩阵H,最后进行一次性的矩阵运算。

卷积核中的参数总量为:
param = I*J*K*L
通常一次送入一批(batch)样本,此时计算应该再乘上批量尺寸(对于计算量同样)。
计算量-参数量之比为CPR(CALCULATION TO PARAMETERS RATIO):
calculation/param = M*N
该计算说明,卷积层输出的特征图尺寸越大,CPR值越高,在同等计算量下的参数重复利用率越高,这也是卷积中权值共享的精髓。
参见:《21天实战caffe》 -作者 赵永科
Convolutional Neural Networ -吴恩达

你可能感兴趣的:(机器学习,算法)