【Deep Learning】SKNet : Selective Kernel Networks 學習

1. SKNet 論文思維導圖

  該思維導圖使用 MindMaster 軟件做出,源文件可以點擊鏈接進行下載。

在這裏插入圖片描述

2. Selective kernel 結構介紹

  本節主要介紹這篇論文的核心部分,即 Selective kernel 的相關內容

在這裏插入圖片描述
上圖給出的是 Selective Kernel Convolution 的示意圖,可以看出,此結構主要由三個部分組成,即:

  • Split:

    • 這部分的主要作用的將原特徵分爲幾個不同的形狀大小完全相同的特徵,在本文中分爲了兩部分,分別是 333*3555*5 的卷積。且文中說明,所使用的卷積都是 分組/可分離 卷積的形式。對於 555*5 的卷積,可以採用膨脹因子是 2 的 333*3 的膨脹卷積;

    • 假設在 Split 部分前的特徵爲 XRH×W×CX\in\mathbb R^{H'\times W'\times C'},在本文中經過兩個操作生成形狀相同的兩部分特徵,即

      F~:XU~RH×W×C\tilde{\mathcal F}:\bold X\to\tilde{\bold U}\in\mathbb R^{H\times W\times C}F^:XU^RH×W×C\hat{\mathcal F}:\bold X\to\hat{\bold U}\in\mathbb R^{H\times W\times C},其中 F~\tilde{\mathcal F}F^\hat{\mathcal F} 都是由順序連接的 分組/可分離卷積構成的。

  • Fuse:

    • 這部分的基本思想使用門來控制從不同分支流入的多尺度的信息流然後送入到下一層神經元。爲了實現這個目標,需要進行如下操作:

      1. 各個分支的特徵進行元素間的相加:
        U=U~+U^ \bold U = \tilde{\bold U}+\hat{\bold U}

      2. 然後使用全局平均池化來獲得提特徵的全局信息,具體操作如下所示:
        sc=Fgp(Uc)=1H×Wi=1Hj=1WUc(i,j) s_c=\mathcal F_{gp}(\bold U_c)=\frac 1 {H\times W}\sum_{i=1}^H\sum_{j=1}^W\bold U_c(i,j)

      3. 然後,生成一個壓縮後的特徵向量 zRd×1\bold z\in\mathbb R^{d\times1},這部分是通過一個縮減維度的全連接操作完成的,具體如下:
        z=Ffc(s)=δ(B(Ws)) \bold z=\mathcal F_{fc}(\bold s)=\delta(\mathbb{\mathcal B}(\bold W\bold s))
        其中,δ\delta 指的是 ReLU 激活函數,B\mathbb{\mathcal B} 指的是 BN 操作,WRd×C\bold W\in\mathbb R^{d\times C},爲了研究縮減後的維度 dd 對最後網絡性能的影響,文中使用縮減比例係數 rr 來進行控制:
        d=max(C/r,L) d=max(C/r,L)
        上式中 LL 指的是網絡中 dd 能夠達到的最小值,通常默認取 32。

  • Select:

    • 經過上述兩步後,得到了一個壓縮的單維度的向量,接下來 select 模塊的作用就是將這個向量重新分爲兩個(本文情況)或多個(更多的情況)特徵向量,然後分別與相應的 split 之後的特徵向量進行相應通道的相乘操作,然後再通過這種加權共同構成輸入到下一個神經元的特徵向量。

    • 具體的實現方法是利用一個 soft attention across channels 的思想,即平滑後的通道間的注意力思想,以此能夠讓網絡有自適應的選擇特徵的不同尺度信息,它由特徵 z\bold z 生成。

    • 具體的,是將 softmax 操作應用於通道方向上,公式如下:
      ac=eAczeAcz+eBcz,  bc=eBczeAcz+eBcz a_c=\frac{e^{\bold A_c\bold z}}{e^{\bold A_c\bold z}+e^{\bold B_c\bold z}},\ \ b_c=\frac{e^{\bold B_c\bold z}}{e^{\bold A_c\bold z}+e^{\bold B_c\bold z}}
      其中 A,BRC×d\bold A,\bold B\in\mathbb R^{C\times d}a,b\bold a,\bold b 分別表示 U~,U^\tilde{\bold U},\hat{\bold U} 的平滑注意力向量。其中 AcR1×d\bold A_c\in \mathbb R^{1\times d} 表示 A\bold A 的第 cc 行,aca_c 表示 a\bold a 的第 cc 個元素值。對於向量 B\bold B 同理。

    • 當僅存在兩個分支的時候,可以看到,矩陣 B\bold B 是多餘的,因爲有 ac+bc=1a_c+b_c=1,網絡最終的特徵圖 V\bold V 可以由不同的注意力權重對相應特徵進行加權後得到。公式如下所示:
      Vc=acU~c+bcU^c  ac+bc=1 \bold V_c=a_c\cdot\tilde{\bold U}_c+b_c\cdot\hat{\bold U}_c,\ \ a_c+b_c=1
      其中,V=[V1,V2,...,VC],VcRH×W\bold V=[\bold V_1,\bold V_2,...,\bold V_C],\bold V_c\in\mathbb R^{H\times W}

  • 思考:

    • 這部分的 fuse 和 select 部分與 SENet 網絡中的 SE block 結構都存在着相似之處,只是 SENet 中僅使用一個分支。
    • 在 select 模塊中,我個人目前的理解是通過兩個矩陣(A,BRC×d\bold A,\bold B\in\mathbb R^{C\times d}),使用類似於 softmax 的操作,也就是公式 5,但是與平時所使用的 softmax 操作不同的是,這個操作是在 通道方向進行的,也就是對於每個類別,都進行以此 softmax 操作,softmax 輸出的個數與類別無關,而與最開始 split 爲幾個不同尺寸的卷積核相關。在本文中使用的是2,則每個類別出都輸出的是2維。同理,如果使用 3 種不同的卷積核,則每個類別輸出的均爲 3 維。只有這樣才能解釋爲什麼使用兩種不同的卷積核時會有 ac+bc=1a_c+b_c=1。在使用 3 中卷積核時,同理應該有 ac+bc+cc=1a_c+b_c+c_c=1

3. SKNet 網絡結構

  本文中使用的 SKNet 網絡的主要結構如下所示:

在這裏插入圖片描述

4. 實驗部分

  本文的實驗部分主要在 ImageNet 2012 數據集和 cifar 數據集上完成,關於這部分內容的分析可以查看作者在知乎上的分析,這裏就不再贅述。知乎鏈接爲:SKNet——SENet孿生兄弟篇

5. 本文參考文章

  1. Selective Kernel Networks
  2. SKNet——SENet孿生兄弟篇
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章