從VGG到NASNet,一文概覽圖像分類網絡

 2018-04-02 17:01:18.0

關鍵概念

雖然計算機視覺研究者們採取的方法各不相同,但是大體而言,他們的實驗設置有着如下的趨勢。本文將討論如何進行圖像預處理,數據增強用於哪類數據,優化機制以及輸出層的實現方法。


預處理


通常而言,我們會計算訓練集圖像的平均像素值,將其從圖像中減去。請注意,在 keras 環境下使用這些模型時考慮預處理方法很重要。計算機視覺模型不同,Keras 的「預處理」也不同。


數據增強


圖像分類的數據集非常大。儘管如此,依然需要數據增強來提高模型泛化能力。數據增強一般包括重新縮放圖像的隨機裁剪、隨機水平翻轉、隨機 RGB 顏色與亮度變換等技術。此外,也存在不同的縮放、裁剪等技術(即單尺度訓練 vs 多尺度訓練)。在測試階段進行多裁剪評估也是經常使用的途徑,不過該方案的計算成本更昂貴且性能改進有限。請注意,隨機縮放和裁剪的目標是在不同尺寸和位置上學習對象的重要特徵。Keras 並未實現所有數據增強技術的開箱即用,但可以通過 ImageDataGenerator 模塊的預處理技術輕鬆實現。Andrew Howard 提出的數據增強技術更深入地解釋了這些關鍵性的方法,具體參見:

https://arxiv.org/ftp/arxiv/papers/1312/1312.5402.pdf

同一照片不同裁剪方式的實例(選自 Andrew Howard 論文)

訓練機制

在 keras 中可通過多 GPU 數據並行化訓練模型(一般批大小爲 256)。動量 SGD 或 RMSProp 是常用的優化技術。學習率的方案相對簡單,要麼在驗證集的損失或準確率開始穩定時調低學習率,要麼在固定間隔上調低學習率。通過 keras 中的「ReduceLROnPlateau」回調函數可以輕鬆模擬這種行爲。

這是一個訓練過程的實例,其中學習率降低然後損失函數變得平坦了。

最後一層

圖像分類網絡中最後一層傳統上來說是全連接層。這些層的參數量巨大,因爲你需要 N×M 個參數才能從 N 個隱藏節點過渡到 M 個節點。現在,這些全連接層已經被平均池化或最大池化層替代,它們要求的參數量和計算時間比較小。在對 keras 中預先訓練好的網絡進行微調時,這一點非常重要,這能限制所需要添加參數的數量。

VGGNet

VGGNet(https://arxiv.org/pdf/1409.1556.pdf)發佈於 2014 年,作者是 Karen Simonyan 和 Andrew Zisserman,該網絡表明堆疊多個層是提升計算機視覺性能的關鍵因素。VGGNet 包含 16 或 19 層,主要由小型的 3×3 卷積操作和 2×2 池化操作組成。

VGG 的優點在於,堆疊多個小的卷積核而不使用池化操作可以增加網絡的表徵深度,同時限制參數的數量。例如,通過堆疊 3 個 3×3 卷積層而不是使用單個的 7×7 層,可以克服一些限制。首先,這樣做組合了三個非線性函數,而不只是一個,使得決策函數更有判別力和表徵能力。第二,參數量減少了 81%,而感受野保持不變。另外,小卷積核的使用也扮演了正則化器的角色,並提高了不同卷積核的有效性。

VGG 的缺點在於,其評估的開銷比淺層網絡更加昂貴,內存和參數(140M)也更多。這些參數的大部分都可以歸因於第一個全連接層。結果表明,這些層可以在不降低性能的情況下移除,同時顯著減少了必要參數的數量。16 層和 19 層的參數預訓練 VGG 在 keras 上是可以使用的。

ResNet

ResNet 架構是由何凱明等人提出的,他們試圖通過這個架構訓練更深的網絡。作者指出,增加網絡深度會導致更高的訓練誤差,這表明梯度問題(梯度消失/爆炸)可能會導致訓練收斂性等潛在問題。

儘管 20 層網絡的潛在函數空間是封裝在 56 層網絡的空間內且運用了傳統的梯度下降,但無法實現同樣的效果(選自 ResNet 論文)

ResNet 的主要貢獻是增加了神經網絡架構的跳過連接(skip connection),使用批歸一化並移除了作爲最後一層的全連接層。

通過跳過連接,卷積層的輸入 x 被添加到輸出當中。因此,網絡只學習「殘留」特徵,並容易保存已學習的特徵。

跳過連接基於這樣一種想法:只要神經網絡模型能夠「適當地」將信息從前一層傳遞到下一層,它應該能變得「無限」深。如果在更深層沒有附加信息進行聚合,那麼帶有跳過連接的卷積層可以視爲一個恆等映射函數。

通過向網絡中添加跳過連接,卷積層的默認函數變成了恆等函數。卷積核學到的任何新信息都可以在基本表徵中添加或減去,因此這更容易優化殘差映射。跳過連接不會增加參數的數量,但可以獲得更穩定的訓練和顯著的性能提升,這是因爲可以達到更深的網絡(例如深度爲 34、50、101 和 152 的網絡)。請注意,1×1 的卷積用於減少輸出通道的個數。

除跳過連接之外,在每次卷積完成後、激活進行前都採取批歸一化。最後,網絡刪除了全連接層,並使用平均池化層減少參數的數量。由於網絡加深,卷積層的抽象能力更強,從而減少了對全連接層的需求。

GoogLeNet

GoogLeNet 與 ResNet 的論文幾乎同時發表,但它們引入了不同的改進方案。前面提到的兩篇論文着重於提高分類網絡的表徵深度。

然而,GoogLeNet 仍試圖擴大網絡(多達 22 層),但也希望減少參數量和計算量。最初的 Inception 架構由 Google 發佈,重點將 CNN 應用於大數據場景以及移動端。GoogLeNet 是包含 Inception 模塊的全卷積結構。這些模塊的目的是:通過構建由多個子模塊(比如嵌套網絡 - Inception)組成的複雜卷積核來提高卷積核的學習能力和抽象能力。

Inception 模塊的實例。1x1 卷積用來減小輸入/輸出的維度(選自 GoogLeNet 論文)。

除了加入 Inception 模塊,作者還使用了輔助分類器來提高穩定性和收斂速度。輔助分類器的想法是使用幾個不同層的圖像表徵來執行分類任務(黃色框)。因此,模型中的不同層都可以計算梯度,然後使用這些梯度來優化訓練。

GoogLeNet 架構圖示。黃色框表示輔助分類器(選自GoogLeNet論文)。

Inception v3

Inception v3 架構中結合了幾項創新點。在 Inception v3 中,主要的創新在於借鑑了 GoogLeNet 和 VGGNet 的部分原創思想,即使用 Inception 模塊並通過一系列較小的卷積核更高效地表示較大的卷積核。除了小卷積之外,作者還嘗試了非對稱卷積(例如用 n×1 和 1×n 代替 n×n,而非多個 2×2 和 3×3 濾波器)。

一個 3x3 卷積核後跟一個 1x1 卷積核的例子,它有效地取代了一個 5x5 卷積核(圖片來自 Inception v3 論文)。

作者通過執行批歸一化和標籤平滑化來改進正則化。標籤平滑就是爲每個類都分配一些權重,而不是將全權重分配給 ground truth 標籤。由於網絡對訓練標籤的過擬合程度較低,因此它應該能夠更好地泛化,這與使用 L2 正則化效果相仿。

爲了確保該模型在高分辨率圖像和低分辨率圖像上均表現良好,作者通過 Inception 模塊分析了不同尺寸下的圖像表徵。因此,當 Inception 網絡用於目標檢測框架時,它們在對小分辨率和低分辨率對象進行分類時表現良好。

NASNet

我要討論的最後一個圖像分類架構是 NASNet(https://arxiv.org/pdf/1707.07012.pdf),它是使用神經結構搜索(NAS)框架構建的。NASNet 的目標是運用數據驅動和智能方法,而非直覺和實驗來構建網絡架構。儘管我不會詳細討論這個框架,但是可以解釋一下它的總體思路。

Inception 論文表明「神經網絡單元」中複雜的卷積核組合單元可以顯著提升結果。NAS 框架將這種單元的構建過程定義爲優化過程,然後通過疊加最佳單元來構建大型網絡。

例如,搜索框架構建了兩種不同的單元,它們被用於訓練整個模型。


原文鏈接:https://towardsdatascience.com/an-overview-of-image-classification-networks-3fb4ff6fa61b

文章來源:機器之心