卷積層的參數量與計算量方式
卷積層的參數量與計算量
最近這兩天翻了一下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
的卷積核
-
進行一次卷積操作:
kxkxc(乘法) + (kxk-1) x c + c-1(加法)
-
在特徵圖上進行一組操作的次數:
(c x 2 x k x k - 1) x h x w
-
輸出O個特徵圖:
o x (c x 2 x k x k - 1) x h x w
-
實際上總的操作數還有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
- 進行一次卷積操作:
kxkx1(乘法) + (kxk-1) x 1(加法)
- 在特徵圖上進行一組操作的次數:
1 x(2 x k x k - 1)x h x w
- 輸出c個特徵圖,總的計算量為:
c x 1 x(2 x k x k - 1)x h x w
- 實際上總的操作數還有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
的卷積核
-
進行一次卷積操作:
1x1xc + c - 1
-
在特徵圖上進行一組操作的次數:
h x w x (2 x c - 1)
-
輸出O個特徵圖:
o x h x w x (2 x c - 1)
-
實際上總的操作數還有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