卷积层计算 feature maps 和中间结果内存访问次数

卷积层的输入是 224x224x3 ,把所有这些值读出来需要访问 150,528 次内存。

如果卷积核是 KxKxCout ,还要乘上这个系数(因为每次卷积都要访问一遍)。

以 stride=2, 卷积核个数为32为例,输出的 feature map 尺寸为 112x112x32,共计 401,408 次内存访问。

所以,每层的内存访问总数如下:

简单理解为卷积的总计算量需要访问内存,输出的结果需要存储,权重需要存储。

input = Hin x Win x Cin x K x K x Cout

output = Hout x Wout x Cout

weights = K x K x Cin x Cout + Cout ,

例:

input = 224 x 224 x 3 x 3 x 3 x 32 = 43,352,064
output = 112 x 112 x 32 = 401,408
weights = 3 x 3 x 3 x 32 + 32 = 896
total = 43,754,368

 

 mac(memory access cost-内存使用量)

输入特征图宽*高*维度 + 输出特征图宽*高**维度 + 权重

input = Hin x Win x Cin

output = Hout x Wout x Cout

weights = K x K x Cin x Cout + Cout 

 例:shufflenet v2里的1*1mac计算:

卷积层计算 feature maps 和中间结果内存访问次数, mac(memory access cost-内存使用量)计算方法