卷積神經網路 part2

TracyXu發表於2020-08-08

【任務一】程式碼練習

在谷歌 Colab 上完成程式碼練習,關鍵步驟截圖,並附一些自己的想法和解讀。

 ● MobileNetV1 網路:簡要閱讀谷歌2017年的論文《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》,同時,閱讀知乎文章https://zhuanlan.zhihu.com/p/80041030,體會 Depthwise 卷積 和 Pointwise 卷積。同時,閱讀程式碼:https://github.com/OUCTheoryGroup/colab_demo/blob/master/202003_models/MobileNetV1_CIFAR10.ipynb  把程式碼敲入 Colab 執行,觀察並體會效果。

● MobileNetV2 網路:簡要閱讀谷歌在CVPR2018上的論文《MobileNetV2: Inverted Residuals and Linear Bottlenecks》,體會第二個版本的改進。閱讀程式碼:https://github.com/OUCTheoryGroup/colab_demo/blob/master/202003_models/MobileNetV2_CIFAR10.ipynb  把程式碼敲入 Colab 執行,觀察並體會效果。

● HybridSN 高光譜分類網路:閱讀論文《HybridSN: Exploring 3-D–2-DCNN Feature Hierarchy for Hyperspectral Image Classification》,思考3D卷積和2D卷積的區別。閱讀程式碼:https://github.com/OUCTheoryGroup/colab_demo/blob/master/202003_models/HybridSN_GRSL2020.ipynb  把程式碼敲入 Colab 執行,網路部分需要自己完成。訓練網路,然後多測試幾次,會發現每次分類的結果都不一樣,請思考為什麼?同時,思考問題,如果想要進一步提升高光譜影像的分類效能,可以如何改進?

 

【任務二】論文閱讀

 ● 閱讀論文《Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising》,該論文提出了卷積神經網路結合殘差學習來進行影像降噪,直接學習影像噪聲,可以更好的降噪。

 ● 閱讀論文CVPR2018的論文《Squeeze-and-Excitation Networks》,國內自動駕駛創業公司 Momenta 在 ImageNet 2017 挑戰賽中奪冠,網路架構為 SENet,論文作者為 Momenta 高階研發工程師胡杰。該網路通過學習的方式獲取每個特徵通道的重要程度,然後依照這個重要程度去提升有用的特徵並抑制對當前任務用處不大的特徵。

Squeeze-and-Excitation Networks(SENet)詳解

一、SENet簡介

       Squeeze-and-Excitation Networks(SENet)是由自動駕駛公司Momenta在2017年公佈的一種全新的影像識別結構,它通過對特徵通道間的相關性進行建模,把重要的特徵進行強化來提升準確率。這個結構是2017 ILSVR競賽的冠軍,top5的錯誤率達到了2.251%,比2016年的第一名還要低25%,可謂提升巨大。
       Squeeze-and-Excitation(SE) block並不是一個完整的網路結構,而是一個子結構,可以嵌到其他分類或檢測模型中。
       SENet的核心思想在於通過網路根據loss去學習特徵權重,使得有效的feature map權重大,無效或效果小的feature map權重小的方式訓練模型達到更好的結果。

 

二、SENet的提出

1.從最基本的卷積操作開始說起:
在這裡插入圖片描述
       近些年來,卷積神經網路在很多領域上都取得了巨大的突破。而卷積核作為卷積神經網路的核心,通常被看做是在區域性感受野上,將空間上(spatial)的資訊和特徵維度上(channel-wise)的資訊進行聚合的資訊聚合體。卷積神經網路由一系列卷積層、非線性層和下采樣層構成,這樣它們能夠從全域性感受野上去捕獲影像的特徵來進行影像的描述。

2.在空間維度上提升網路效能的探索:
在這裡插入圖片描述
       然而去學到一個效能非常強勁的網路是相當困難的,其難點來自於很多方面。有很多工作被提出來從空間維度層面來提升網路的效能,如 Inception 結構中嵌入了多尺度資訊,聚合多種不同感受野上的特徵來獲得效能增益;在 Inside-Outside 網路中考慮了空間中的上下文資訊;還有將 Attention 機制引入到空間維度上,等等這些工作都獲得了相當不錯的成果。

3.提出SENet的動機:
       以上工作都是從空間維度上來提升網路的效能。那麼很自然想到,網路是否可以從其他層面來考慮去提升效能,比如考慮特徵通道之間的關係?所以基於這一點胡杰等人便提出了 Squeeze-and-Excitation Networks(簡稱 SENet)。他們的動機是希望顯式地建模特徵通道之間的相互依賴關係。另外,並不打算引入一個新的空間維度來進行特徵通道間的融合,而是採用了一種全新的「特徵重標定」策略。具體來說,就是通過學習的方式來自動獲取到每個特徵通道的重要程度,然後依照這個重要程度去提升有用的特徵並抑制對當前任務用處不大的特徵。

 

三、Squeeze-and-Excitation模組

在這裡插入圖片描述
       上圖是 SE 模組的示意圖。給定一個輸入 x,其特徵通道數為 c_1,通過一系列卷積等一般變換後得到一個特徵通道數為 c_2 的特徵。與傳統的 CNN 不一樣的是,接下來通過三個操作來重標定前面得到的特徵。

1.Squeeze 操作
       一般CNN中的每個通道學習到的濾波器都對區域性感受野進行操作,因此每個feature map都無法利用其它feature map的上下文資訊,而且網路較低的層次上其感受野尺寸都是很小的,這樣情況就會更嚴重。
       Squeeze 操作是首先順著空間維度來進行特徵壓縮,將每個二維的特徵通道變成一個實數,這個實數某種程度上具有全域性的感受野,並且輸出的維度和輸入的特徵通道數相匹配。它表徵著在特徵通道上響應的全域性分佈,而且使得靠近輸入的層也可以獲得全域性的感受野,這一點在很多工中都是非常有用的。

2.Excitation 操作
       它是一個類似於迴圈神經網路中門的機制。通過引數 w 來為每個特徵通道生成權重,其中引數 w 被學習用來顯式地建模特徵通道間的相關性。

3.Reweight 操作
       將 Excitation 的輸出的權重看作是經過特徵選擇後的每個特徵通道的重要性,然後通過乘法逐通道加權到先前的特徵上,完成在通道維度上的對原始特徵的重標定。

 

四、SE模組應用舉例

在這裡插入圖片描述
方框旁邊的維度資訊代表該層的輸出。

1. 將SE模組嵌入到 Inception 結構中:(上左圖)
       這裡使用 global average pooling 作為 Squeeze 操作。緊接著兩個 Fully Connected 層組成一個 Bottleneck 結構去建模通道間的相關性,並輸出和輸入特徵同樣數目的權重。首先將特徵維度降低到輸入的 1/16,然後經過 ReLu 啟用後再通過一個 Fully Connected 層升回到原來的維度。這樣做比直接用一個 Fully Connected 層的好處在於:

  • 具有更多的非線性,可以更好地擬合通道間複雜的相關性
  • 極大地減少了引數量和計算量。

       然後通過一個 Sigmoid 的門獲得 0~1 之間歸一化的權重,最後通過一個 Scale 的操作來將歸一化後的權重加權到每個通道的特徵上。
       多個feature map可以被解釋為區域性描述子的集合,這些描述子的統計資訊對於整個影像來說是有表現力的。這裡選擇最簡單的全域性平均池化操作,從而使其具有全域性的感受野,使得網路低層也能利用全域性資訊。

2.將SE模組嵌入到 ResNet 模組中:(上右圖)
       除了上面可以將SE模組嵌入到 Inception 結構中外,SE 模組還可以嵌入到含有 skip-connections 的模組中。操作過程基本和 SE-Inception 一樣,只不過是在 Addition 前對分支上 Residual 的特徵進行了特徵重標定。如果對 Addition 後主支上的特徵進行重標定,由於在主幹上存在 0~1 的 scale 操作,在網路較深 BP 優化時就會在靠近輸入層容易出現梯度消散的情況,導致模型難以優化。

       大多數的主流網路都是基於這兩種類似的單元通過 repeat 方式疊加來構造的。由此可見,SE 模組可以嵌入到現在幾乎所有的網路結構中。通過在原始網路結構的 building block 單元中嵌入 SE 模組,我們可以獲得不同種類的 SENet。如 SE-BN-Inception、SE-ResNet、SE-ReNeXt、SE-Inception-ResNet-v2 等等。

相關連結如下:
論文地址:https://arxiv.org/abs/1709.01507
論文程式碼地址:https://github.com/hujie-frank/SENet
PyTorch程式碼地址:https://github.com/miraclewkf/SENet-PyTorch

 

 ● 閱讀CVPR2019的論文《Deep Supervised Cross-modal Retrieval》,該論文設計了三個損失函式,用來提升深度跨模態檢索的準確率。

相關文章