Pointwise Depthwise Groupwise Convolution


Pointwise/ Depthwise/ Groupwise

這三種方法都是在標准卷積的基礎上進行修改,以達到參數削減,同時保證准確率能夠滿足要求的目的
標准卷積示意圖:
image.png

這里假設卷積層的輸入通道數為 \(C_{in}\),輸出通道數為 \(C_{out}\),假設采用 k * k 大小的卷積核來進行卷積,那么最終需要 \(C_{out}\)個 尺寸為\(k * K * C_{in}\)的卷積核,即這一個卷積層所需要的參數量為 \(C_{out} * k * k * C_{in}\)

Pointwise convoltion

Pointwise convolution從名字上來看為“逐點卷積”,即采用卷積核大小為 1 x 1 來對feature map 逐個點來進行卷積

  • 最典型的應用是在何凱明提出的殘差網絡中的bottleneck中用來降維,現在以resnet-50的第2個block為例子,featuremap的channle數為256,最終輸出的channel數為512
    • 一般的building block形式:

      feature_map -> 3x3,512 -> 3x3,512

      其所需要的參數量為 \(3*3*C_{in}*C_{out}+3*3*C_{out}*C_{out}\),將\(C_in=256,C_{out}=256\)代入可得:‭3,538,944‬

    • bottleneck的形式為:

      featuremap -> 1x1,128 -> 3x3,128, -> 1x1, 512

      這里 1x1 的卷積核就是 pointwise convolution,其功能就是先將256通道降維成128通道,然后再升維到256,這樣的做法可以減少參數量
      其所需要的參數量為:\(1*1*C_{in}*C_m + 3*3*C_m*C_m+1*1*C_m*C_{out}\),將\(C_{in}=256,C_{out}=512,C_m=128\)代入可得:245760
      二者相除,可以得到其參數量約為原來的1/14

DepthWise Convolution

Depthwise 從字面上來看即逐深度(channel)卷積,即在每個channel進行卷積

image.png

如上圖所示:

  • 先在每個channel上以平面kernel(即深度為1)進行卷積,這樣原始有多少個channel,輸出就有多少個channel,即上圖的從藍色部分到紫色部分;
  • 但是這樣並沒有利用到通道之間的關系,因此后面再加一個pointwise convolution,即在每個位置上用 \(1*1*C_{in}\)的kernel來聚合每個通道之間的信息,即上圖的從紫色部分到黃色部分

因此最后需要的參數量為:\(k*k*1*C_{in}+1*1*C_{in}*C_{out}\),比原來的參數量也大大減少。因為它對每一個通道都進行了學習(每個通道對應一個不同的過濾器),而不是所有通道對應同一個過濾器,得到的特征質量更佳。

Groupwise Convolution

Groupwise 從字面上來看即逐群進行卷積,這里的意思是把channel分成多個群,每一個群采用一種卷積核,如下圖左所示:
image.png

假設將\(C_{in}\)個channel均分成 g 份,這樣得到了 g 個群,每個群采用的kernel為 \(k * k * (C_{in}/g)\),因為有 g 個,我們最終輸出為\(C_{out}\),這樣輸出也是由 g 個進行cat組合起來的
因此需要的參數為:

\[[k * k * (C_{in}/g) * (C_{out}/g)]*g=k * k * C_{in} * C_{out} / g \]

相當於參數量是原來的 1/g


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM