https://blog.csdn.net/u012426298/article/details/80853553
Group convolution 分組卷積,最早在AlexNet中出現(xiàn),由于當(dāng)時(shí)的硬件資源有限,訓(xùn)練AlexNet時(shí)卷積操作不能全部放在同一個(gè)GPU處理,因此作者把feature maps分給多個(gè)GPU分別進(jìn)行處理,最后把多個(gè)GPU的結(jié)果進(jìn)行融合。
在說明分組卷積之前我們用一張圖來體會(huì)一下一般的卷積操作。?
從上圖可以看出,一般的卷積會(huì)對(duì)輸入數(shù)據(jù)的整體一起做卷積操作,即輸入數(shù)據(jù):H1×W1×C1;而卷積核大小為h1×w1,一共有C2個(gè),然后卷積得到的輸出數(shù)據(jù)就是H2×W2×C2。這里我們假設(shè)輸出和輸出的分辨率是不變的。主要看這個(gè)過程是一氣呵成的,這對(duì)于存儲(chǔ)器的容量提出了更高的要求。?
但是分組卷積明顯就沒有那么多的參數(shù)。先用圖片直觀地感受一下分組卷積的過程。對(duì)于上面所說的同樣的一個(gè)問題,分組卷積就如下圖所示。?
可以看到,圖中將輸入數(shù)據(jù)分成了2組(組數(shù)為g),需要注意的是,這種分組只是在深度上進(jìn)行劃分,即某幾個(gè)通道編為一組,這個(gè)具體的數(shù)量由(C1/g)決定。因?yàn)檩敵鰯?shù)據(jù)的改變,相應(yīng)的,卷積核也需要做出同樣的改變。即每組中卷積核的深度也就變成了(C1/g),而卷積核的大小是不需要改變的,此時(shí)每組的卷積核的個(gè)數(shù)就變成了(C2/g)個(gè),而不是原來的C2了。然后用每組的卷積核同它們對(duì)應(yīng)組內(nèi)的輸入數(shù)據(jù)卷積,得到了輸出數(shù)據(jù)以后,再用concatenate的方式組合起來,最終的輸出數(shù)據(jù)的通道仍舊是C2。也就是說,分組數(shù)g決定以后,那么我們將并行的運(yùn)算g個(gè)相同的卷積過程,每個(gè)過程里(每組),輸入數(shù)據(jù)為H1×W1×C1/g,卷積核大小為h1×w1×C1/g,一共有C2/g個(gè),輸出數(shù)據(jù)為H2×W2×C2/g。
從一個(gè)具體的例子來看,Group conv本身就極大地減少了參數(shù)。比如當(dāng)輸入通道為256,輸出通道也為256,kernel size為3×3,不做Group conv參數(shù)為256×3×3×256。實(shí)施分組卷積時(shí),若group為8,每個(gè)group的input channel和output channel均為32,參數(shù)為8×32×3×3×32,是原來的八分之一。而Group conv最后每一組輸出的feature maps應(yīng)該是以concatenate的方式組合。?
Alex認(rèn)為group conv的方式能夠增加 filter之間的對(duì)角相關(guān)性,而且能夠減少訓(xùn)練參數(shù),不容易過擬合,這類似于正則的效果。