卷積層的參數量與計算量

2021-02-08 小哲AI

最近這兩天翻了一下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


相關焦點

  • 理解CNN卷積層與池化層計算
    概述深度學習中CNN網絡是核心,對CNN網絡來說卷積層與池化層的計算至關重要,不同的步長、填充方式、卷積核大小、池化層策略等都會對最終輸出模型與參數
  • 兩行代碼統計模型參數量與FLOPs,這個PyTorch小工具值得一試
    近日,GitHub 開源了一個小工具,它可以統計 PyTorch 模型的參數量與每秒浮點運算數(FLOPs)。有了這兩種信息,模型大小控制也就更合理了。其實模型的參數量好算,但浮點運算數並不好確定,我們一般也就根據參數量直接估計計算量了。但是像卷積之類的運算,它的參數量比較小,但是運算量非常大,它是一種計算密集型的操作。
  • 深入卷積神經網絡:高級卷積層原理和計算的可視化
    這些層中的每一層都有不同於原始卷積層的機制,這使得每種類型的層都有一個特別特殊的功能。在進入這些高級的卷積層之前,讓我們先快速回顧一下原始的卷積層是如何工作的。原始卷積層在原始的卷積層中,我們有一個形狀為WxHxC的輸入,其中W和H是每個feature map的寬度和高度,C是channel的數量,基本上就是feature map的總數。
  • 大貝貝,CNN/RNN/LSTM/BERT參數量計算
    這裡主要寫一下RNN中參數的計算:LSTM的參數計算公式:num(Embedding)+num(LSTM)=Word embedding dim * Vocab size  +(hidden size * (hidden size + x_dim ) + hidden size) *4關鍵點:權重的計算與time_step無關,LSTM權值共享.
  • 深2.5至4倍,參數和計算量更少,DeLighT怎麼做到的?
    但由於模型參數量過大,該模型訓練困難、部署不方便,研究人員一直在探究如何優化 Transformer。近日,來自華盛頓大學和 FAIR 的 Sachin Mehta 等人提出了一個網絡結構較深但輕量級的 Transformer——DeLighT。
  • 機器學習:二維卷積層及其參數的視覺和數學解釋
    換句話說,卷積層由4*3=12個卷積核組成。需要注意的是,參數的數量和計算時間與輸出通道的數量成比例地變化。這是因為每個輸出通道都連結到不同於其他通道的核。輸入通道的數量也是如此。計算時間和參數數量成比例增長。核大小到目前為止,所有示例都給出了3 x 3大小的核。實際上,其大小的選擇完全取決於您。可以創建核心大小為1 * 1或19 * 19的卷積層。
  • 深2.5至4倍,參數和計算量卻更少,DeLighT Transformer是怎麼做到的?
    總的來說,DeLighT 的網絡深度是標準 transformer 模型的 2.5 到 4 倍,但參數量和計算量都更少。DeLighT 的核心是 DExTra 變換(DExTra transformation),該變換使用組線性變換和擴展 - 縮小(expand-reduce)策略來有效地改變 DeLighT 塊的寬度和深度。
  • ...量顯著減少,紀榮嶸教授團隊提出基於高秩特徵圖的濾波器剪枝方法
    在不引入任何附加約束的情況下,與其他精度相似的現有算法相比,HRank 在浮點計算量和參數量上有了顯著減少。在第一階段,他們將部分圖像輸入模型,得到各個濾波器對應的特徵圖;接下來,根據得到的特徵圖,計算每個濾波器對應的秩,作為濾波器選擇的準則;最後,根據上一階段的選擇結果,剪去上圖中紅色部分的濾波器,並對修剪後的模型進行微調,得到最終的結果。
  • 【綜述】神經網絡中不同類型的卷積層
    ,特徵圖filter少了,參數量也會減少。第一步先使用3x1的filter,所需計算量為:15x3=45第二步使用1x3的filter,所需計算量為:9x3=27總共需要72次乘法就可以得到最終結果,要小於普通卷積的81次乘法。
  • 【綜述】神經網絡中不同種類的卷積層
    ,特徵圖filter少了,參數量也會減少。在n>>m的情況下,這個比值將變為2/m,所以可以極大降低計算量。下面再來比較一下所需計算量:兩步總計10275次乘法,只有普通卷積計算量的12%左右。
  • 一文讀懂CNN中卷積層與轉置卷積層的關係
    那麼,轉置卷積層和正卷積層的關係和區別是什麼呢,轉置卷積層實現過程又是什麼樣的呢,筆者根據最近的預研項目總結出本文。1.到這裡,有些初學者會認為全連接層也可以做到,只要讓權重矩陣某些權重賦值為0就可以實現了,例如假設在計算當前層第2個節點時認為上一層的第1個節點我不需要,那麼設置w01=0就可以了。其實沒錯,卷積層是可以看做全連接層的一種特例,卷積核矩陣是可以展開為一個稀疏的包含很多0的全連接層的權重矩陣,下圖就是一個由4*4圖片經過3*3卷積核生成一個大小為2*2output時,卷積核所展開的全連接層的權重矩陣。
  • ​卷積層和分類層,哪個更重要?
    壓榨分類性能的話依然是卷積層更重要。所以對於圖像分類來說當然是要花大精力去提取這些特徵啊,所以你看,大佬們把卷積層做的這麼深,分類層卻沒太大的變化,懂了吧~(當然,這裡說的眼睛,鼻子,嘴等強特徵不一定能被深度卷積層學習到,但是毫無疑問的是頂層卷積層的神經元一定學到了其他類似的強特徵[1])文本分類場景文本分類則恰好是對面的世界。
  • 一文看盡神經網絡中不同種類的卷積層
    2. 1x1/Pointwise Convolutions最初1x1卷積是在Network in Network中提出的,之後1x1convolution最初在GoogLeNet中大量使用,1x1卷積有以下幾個特點:用於降維或者升維,可以靈活控制特徵圖filter個數減少參數量,特徵圖filter少了,參數量也會減少。3.