CNN卷積和通道


CNN卷積和通道?

1. CNN基本結構

  • 全連接, 局部連接

  • 權值共享

2. 卷積和通道的區別是什么

參考資料:

https://www.cnblogs.com/shine-lee/p/10243114.html

https://blog.yani.ai/filter-group-tutorial/

https://blog.csdn.net/zhangjunhit/article/details/90762578

2.1 分組卷積(Group Convolution)

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

動機:用分組卷積的操作,來緩解對單個處理器的壓力。例如,當前一些輕量級的SOTA(State Of The Art)網絡。

2.2 Convolution VS Group Convolution

如果輸入feature map尺寸為CHW,卷積核有N個,輸出feature map與卷積核的數量相同也是N,每個卷積核的尺寸為CKKN個卷積核的總參數量為NCKK,輸入map與輸出map的連接方式如下圖左所示:

對輸入feature map進行分組,然后每組分別卷積。假設輸入feature map的尺寸仍為CHW,輸出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卷積。

2.3 Group Convolution的用途

  1. 減少參數量,分成G組,則該層的參數量減少為原來的 \(\frac{1}{G}\)

  2. Group Convolution可以看成是structured sparse,每個卷積核的尺寸由CKK變為\(\frac{C}{G}∗K∗K\),可以將其余\((C-\frac{C}{G})∗K∗K\)的參數視為0,有時甚至可以在減少參數量的同時獲得更好的效果(相當於正則)。

  3. 當分組數量等於輸入map數量,輸出map數量也等於輸入map數量,即G=N=CN個卷積核每個尺寸為1∗KK時,Group Convolution就成了Depthwise Convolution,參見MobileNetXception等,參數量進一步縮減,如下圖所示:

  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(全局平均池化,GAP):當G=C=N且K=H=W.

    NIN(Network In Network)論文中提出的全局平均池化,主要是為了區別全連接層。CNN分類的全連接層的作用:將最后一層卷積得到的feature map stretch成向量,對這個向量做乘法,最終降低其維度,然后輸入到softmax層中得到對應的每個類別的得分。

    全連接存在的問題:參數量過大,降低了訓練的速度,且很容易過擬合。全連接層將卷積層展開成向量之后不還是要針對每個feature map進行分類,而GAP的思路就是將上述兩個過程合二為一,一起做了。如圖所示:

    論文:Network In Network

    論文下載:https://arxiv.org/abs/1312.4400

    論文解讀:https://www.cnblogs.com/makefile/p/nin.html

2.4 Depthwise Convolution && Pointwise Convolution && Depthwise Separable Convolution

  • 普通卷積:假設輸入層為一個大小為64×64像素、三通道彩色圖片。經過一個包含4個Filter的卷積層,最終輸出4個Feature Map,且尺寸與輸入層相同。整個過程可以用下圖來概括。

    此時,卷積層共4個Filter,每個Filter包含了3個Kernel,每個Kernel的大小為3×3。因此卷積層的參數數量可以用如下公式來計算:N_std = 4 × 3 × 3 × 3 = 108

  • Depthwise Convolution:同樣是上述例子,一個大小為64×64像素、三通道彩色圖片首先經過第一次卷積運算,不同之處在於此次的卷積完全是在二維平面內進行,且Filter的數量與上一層的Depth相同。所以一個三通道的圖像經過運算后生成了3個Feature map,如下圖所示。

    其中一個Filter只包含一個大小為3×3的Kernel,卷積部分的參數個數計算如下:

    N_depthwise = 3 × 3 × 3 = 27

    Depthwise Convolution完成后的Feature map數量與輸入層的depth相同,但是這種運算對輸入層的每個channel獨立進行卷積運算后就結束了,沒有有效的利用不同map在相同空間位置上的信息。因此需要增加另外一步操作來將這些map進行組合生成新的Feature map,即接下來的Pointwise Convolution。

  • Pointwise Convolution:Pointwise Convolution的運算與常規卷積運算非常相似,不同之處在於卷積核的尺寸為 1×1×M,M為上一層的depth。所以這里的卷積運算會將上一步的map在深度方向上進行加權組合,生成新的Feature map。有幾個Filter就有幾個Feature map。如下圖所示。

    由於采用的是1×1卷積的方式,此步中卷積涉及到的參數個數可以計算為:

    N_pointwise = 1 × 1 × 3 × 4 = 12

    經過Pointwise Convolution之后,同樣輸出了4張Feature map,與常規卷積的輸出維度相同。

  • Depthwise Separable Convolution:核心思想是將一個完整的卷積運算分解為兩步進行,分別為Depthwise Convolution與Pointwise Convolution。參數個數可以計算為:

    N_separable = N_depthwise + N_pointwise = 39

    相同的輸入,同樣是得到4張Feature map,Separable Convolution的參數個數是常規卷積的約1/3。因此,在參數量相同的前提下,采用Separable Convolution的神經網絡層數可以做的更深。

2.5 Group Convolution 和 Depthwise + Pointwise區別

Group conv是一種channel分組的方式,Depthwise +Pointwise是卷積的方式,只是ShuffleNet里面把兩者應用起來了。因此Group conv和Depthwise +Pointwise並不能划等號。

Depthwise +Pointwise卷積是提供一種把feature map的空間信息(height&width)和通道信息(channel)拆分分別處理的方法,而group卷積只是單純的通道分組處理,降低復雜度。

3. CNN總結

  1. CNN模型的發展趨勢:從巨型網絡到輕量化網絡。現在工業界追求的重點已經不是准確率的提升(因為都已經很高了),都聚焦於速度與准確率的trade off,都希望模型又快又准。因此從原來AlexNet、VGGnet,到體積小一點的Inception、Resnet系列,到目前能移植到移動端的MobileNet、ShuffleNet(體積能降低到0.5mb!)。

  2. 卷積核:

    1. 大卷積核用多個小卷積核代替;
    2. 單一尺寸卷積核用多尺寸卷積核代替;
    3. 固定形狀卷積核趨於使用可變形卷積核;
    4. 使用1×1卷積核(bottleneck結構)。
  3. 卷積層連接:

    1. 使用skip connection,讓模型更深;
    2. densely connection,使每一層都融合上其它層的特征輸出(DenseNet)
  4. 卷積層通道:

    1. 標准卷積用depthwise卷積代替;
    2. 使用分組卷積;
    3. 分組卷積前使用channel shuffle;
    4. 通道加權計算。
  5. 啟發

    類比到通道加權操作,卷積層跨層連接能否也進行加權處理?bottleneck + Group conv + channel shuffle + depthwise的結合會不會成為以后降低參數量的標准配置?


免責聲明!

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



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