卷積神經網絡 part2

【任務一】代碼練習

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

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

● MobileNetV2 網絡:簡要閱讀谷歌在CVPR2018上的論文《MobileNetV2: Inverted Residuals and Linear Bottlenecks》,體會第二個版本的改進。閱讀代碼://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卷積的區別。閱讀代碼://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 等等。

相關鏈接如下:
論文地址://arxiv.org/abs/1709.01507
論文代碼地址://github.com/hujie-frank/SENet
PyTorch代碼地址://github.com/miraclewkf/SENet-PyTorch

 

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