卷積相關計算
卷積層計算 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計算: