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ì)對輸入數(shù)據(jù)的整體一起做卷積操作,即輸入數(shù)據(jù):H1×W1×C1缴啡;而卷積核大小為h1×w1,一共有C2個(gè)秒咐,然后卷積得到的輸出數(shù)據(jù)就是H2×W2×C2碘裕。這里我們假設(shè)輸出和輸出的分辨率是不變的。主要看這個(gè)過程是一氣呵成的雷滋,這對于存儲(chǔ)器的容量提出了更高的要求。?
但是分組卷積明顯就沒有那么多的參數(shù)燎孟。先用圖片直觀地感受一下分組卷積的過程尸昧。對于上面所說的同樣的一個(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了嫂用。然后用每組的卷積核同它們對應(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之間的對角相關(guān)性厢绝,而且能夠減少訓(xùn)練參數(shù),不容易過擬合懈万,這類似于正則的效果挤庇。