卷積層的參數量與計算量方式

卷積層的參數量與計算量

最近這兩天翻了一下shufflenet的論文,裡邊有一段介紹了ResNet的殘差模塊與shuffle block的計算量的對比介紹,這裡特意去查了一下資料,這裡整理記錄一下卷積層參數量與計算量的計算方式。

1. 參數量的計算

這裡分別以一下幾種卷積層的計算,來總結卷積層參數量的計算方式。

由於卷積層共享參數,那麼參數量僅於權重、偏置、BN層的alpha與beta有關

1.1 普通卷積

輸入特徵圖為cxhxw,輸出特徵圖為oxhxw, (由於padding導致輸入輸出特徵圖不變)

普通卷積而言,卷積核的尺寸為k x k x c x o, 一共有o個kxkxc的卷積核

權重:k x k x c x o

偏置: o

BN:2 x o

總的參數數目:k x k x c x o + 3 x o

1.2 depth wise卷積

depth wise卷積是指在輸入的每個feature map上使用一個卷積核

如果輸入特徵圖為cxhxw, 那麼輸出特徵圖為cxhxw,(假設由於padding導致輸入輸出特徵圖大小不變)

卷積核尺寸k x k x 1 x c,一共有c個kxkx1的卷積核。

權重:k x k x c

偏置: c

BN:2 x c

總的參數數目:k x k x c + 3 x c

1.3 point wise卷積

point wise卷積是指使用1x1的卷積核。

如果輸入特徵圖為cxhxw, 輸出特徵圖為oxhxw,(假設由於padding導致輸入輸出特徵圖大小不變)

卷積核尺寸1 x 1 x c x o,一共有o個1 x 1 x c的卷積核

權重:1 x 1 x c x o

偏置: o

BN:2 x o

總的參數數目:(c+3) x o

1.4 depth wise separable卷積

深度可分離卷積就是採用depth wise卷積加上point wise卷積得到的層,相比較普通卷積而言,可以很大程度上減小參數量

輸入特徵圖為cxhxw,輸出特徵圖為oxhxw, (由於padding導致輸入輸出特徵圖不變)

需要由兩部分組成,第一部分是kxkx1xc的depth wise卷積, 第二部分是1x1xcxo的point wise卷積

1.4.1 depth wise卷積

權重:k x k x c

偏置: c

BN:2 x c

總的參數數目:k x k x c + 3 x c

1.4.2 point wise卷積

權重:1 x 1 x c x o

偏置: o

BN:2 x o

總的參數數目:(c + 3) x o

那麼depth wise separable卷積的參數為:(k x k + 3 + o) x c + 3 x o

對應的普通卷積的參數量為:k x k x c x o + 3 x o

相比較而言,深度可分離卷積參數量大幅減小。

2. 計算量的計算

這裡計算考慮卷積層的加法與乘法操作,總的計算量為加法與乘法操作之和。

考慮一種簡單的情況:

輸入特徵圖為cxhxw,輸出特徵圖為oxhxw, (由於padding導致輸入輸出特徵圖不變)

2.1 普通卷積

卷積核的尺寸為k x k x c x o, 一共有o個kxkxc的卷積核

  1. 進行一次卷積操作:kxkxc(乘法) + (kxk-1) x c + c-1(加法)

  2. 在特徵圖上進行一組操作的次數: (c x 2 x k x k - 1) x h x w

  3. 輸出O個特徵圖:o x (c x 2 x k x k - 1) x h x w

  4. 實際上總的操作數還有o個卷積核的偏執的加法操作,總的計算量:o x (c x 2 x k x k - 1) x h x w + o

2.2 深度可分離卷積

針對上述示例的情況,深度可分離卷積對應的操作:第一部分是kxkx1xc的depth wise卷積, 第二部分是1x1xcxo的point wise卷積

2.2.1 depth wise卷積的操作

卷積核的尺寸為k x k x 1 x c, 一共有c個kxkx1的卷積核, 輸出特徵圖為hxwxc

  1. 進行一次卷積操作:kxkx1(乘法) + (kxk-1) x 1(加法)
  2. 在特徵圖上進行一組操作的次數: 1 x(2 x k x k - 1)x h x w
  3. 輸出c個特徵圖,總的計算量為:c x 1 x(2 x k x k - 1)x h x w
  4. 實際上總的操作數還有c個卷積核的偏執的加法操作,總的計算量:c x 1 x(2 x k x k - 1)x h x w + c

2.2.2 point wise 卷積操作

卷積核的尺寸為1 x 1 x c x o, 一共有o個1x1xc的卷積核

  1. 進行一次卷積操作:1x1xc + c - 1

  2. 在特徵圖上進行一組操作的次數: h x w x (2 x c - 1)

  3. 輸出O個特徵圖:o x h x w x (2 x c - 1)

  4. 實際上總的操作數還有o個卷積核的偏執的加法操作,總的計算量:o x h x w x (2 x c - 1) + o

深度可分離卷積總的操作h x w x [(2 x k x k-1) x c + (2 x c -1) x o)] + c + o