簡介:

Squeeze-and-Excitation Networks(以下簡稱 SENet)是一種類似於 plugin 的概念,

獲得對於 C 個特徵(frature)間的關係,進而提升整體模型的準確率。


方法概要:


Step1

先拿一組 H’ x W’ x C’ 的 feature ,經過 Ftr 後 得到標準輸入 U 。


Step2

想像一下把 U 這顆像生吐司的東西整個壓縮,經過 Fsq 後 變成 1 x 1 x C 的濃縮生吐司資料。

然後這裡做了 channel-wise 的運算,也就是分組 base on C 的概念。

做了以後會得到 C 組的 1 x 1 資料


channel-wise 的概念請點這篇


Step3

因為濃縮生吐司資料的尺寸是 1 x 1 x C ,所以可以想像成有 C 片小土司。

為了減少計算量 + 得到每片吐司 裡面模型的互相關係,所以做 Fex。

得到權重序列 (1 x 1 x C)


其中 W1,W2 的維度變換是因為 Activation Function 的緣故。


Step4

把權重序列 乘上生吐司 U (標準輸入 feature),

讓你的生吐司成為威力加強版!


想像一下,如果拿去做二維邊緣偵測,經過這個 SENet 之後的輪廓理論上會加深。



解釋計算方程式:


Ftr():

Ftr 就是在做捲積運算,算到想要到生吐司尺寸。


Faq():



Zc 就是上文所提到的濃縮生吐司資料,這邊在幹的事情很簡單。

把 H x W 這個二維平面上的每一個點做平均得到一個純量,總共有 C 個純量。

正經且學術上的講法是 Global Average Pooling


Fex():


Fex() 是本文核心重點,利用 Fex() 獲得 Channel feature map 間的關係。

首先要說明 σ  δ 的特殊性關係(#

σ = sigmoid ; δ = ReLU

z 則是等效上面的 Zc


從右邊看起 維度 C 的 濃縮生吐司資料 左乘 W1 出來的資料維度是 1 x 1 x C/r ,

這筆資料做 Sigmoid 後 左乘 W2 又變回 1 x 1 x C 的資料。



最後 ReLU 運算後,得到權重序列 S


Fscale():



核心概念概念就是把這串權重序列 S 分配給傻傻的並聯生吐司 U,

這樣你的 生吐司 U 就會變成擁有 Channel feature 間關係 的威力加強版 tilde X。



文章的 Reference 來自於這兩篇:

(深度學習)SENet(Squeeze-and-Excitation Networks)

SENet(Squeeze-and-Excitation Networks)算法笔记


如果小弟我有寫錯,或是有更好的想法歡迎來信討論~

信箱地址:wuyiulin@gmail.com






By wuyiulin

喜歡騎單車的影像算法工程師

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *