Group Convolution分組卷積,以及Depthwise Convolution和Global Depthwise Convolution

博客:blog.shinelee.me | 博客園 | CSDN網絡

寫在前面

Group Convolution分組卷積,最先見於AlexNet——2012年Imagenet的冠軍方法,Group Convolution被用來切分網絡,使其在2個GPU上並行運行,AlexNet網絡結構以下:學習

AlexNet

Convolution VS Group Convolution

在介紹Group Convolution前,先回顧下常規卷積是怎麼作的,具體能夠參見博文《卷積神經網絡之卷積計算、做用與思想》。若是輸入feature map尺寸爲\(C*H*W\),卷積核有\(N\)個,輸出feature map與卷積核的數量相同也是\(N\),每一個卷積核的尺寸爲\(C*K*K\)\(N\)個卷積核的總參數量爲\(N*C*K*K\),輸入map與輸出map的鏈接方式以下圖左所示,圖片來自連接spa

Convolution VS Group Convolution

Group Convolution顧名思義,則是對輸入feature map進行分組,而後每組分別卷積。假設輸入feature map的尺寸仍爲\(C*H*W\),輸出feature map的數量爲\(N\)個,若是設定要分紅\(G\)個groups,則每組的輸入feature map數量爲\(\frac{C}{G}\),每組的輸出feature map數量爲\(\frac{N}{G}\),每一個卷積核的尺寸爲\(\frac{C}{G} * K * K\),卷積核的總數仍爲\(N\)個,每組的卷積核數量爲\(\frac{N}{G}\),卷積核只與其同組的輸入map進行卷積,卷積核的總參數量爲\(N * \frac{C}{G} *K*K\),可見,總參數量減小爲原來的 \(\frac{1}{G}\),其鏈接方式如上圖右所示,group1輸出map數爲2,有2個卷積核,每一個卷積核的channel數爲4,與group1的輸入map的channel數相同,卷積核只與同組的輸入map卷積,而不與其餘組的輸入map卷積。.net

Group Convolution的用途

  1. 減小參數量,分紅\(G\)組,則該層的參數量減小爲原來的\(\frac{1}{G}\)
  2. Group Convolution能夠當作是structured sparse,每一個卷積核的尺寸由\(C*K*K\)變爲\(\frac{C}{G}*K*K\),能夠將其他\((C- \frac{C}{G})*K*K\)的參數視爲0,有時甚至能夠在減小參數量的同時得到更好的效果(至關於正則)。
  3. 當分組數量等於輸入map數量,輸出map數量也等於輸入map數量,即\(G=N=C\)\(N\)個卷積核每一個尺寸爲\(1*K*K\)時,Group Convolution就成了Depthwise Convolution,參見MobileNetXception等,參數量進一步縮減,以下圖所示
    Depthwise Separable Convolution
  4. 更進一步,若是分組數\(G=N=C\),同時卷積核的尺寸與輸入map的尺寸相同,即\(K=H=W\),則輸出map爲\(C*1*1\)即長度爲\(C\)的向量,此時稱之爲Global Depthwise Convolution(GDC),見MobileFaceNet,能夠當作是全局加權池化,與 Global Average Pooling(GAP) 的不一樣之處在於,GDC 給每一個位置賦予了可學習的權重(對於已對齊的圖像這頗有效,好比人臉,中心位置和邊界位置的權重天然應該不一樣),而GAP每一個位置的權重相同,全局取個平均,以下圖所示:

global average pooling

以上。3d

參考

相關文章
相關標籤/搜索