Pytorch CIFAR-10分類(ResNet18)

4.定義網絡(ResNet-18/34/50/101/152)

ResNet網絡是在2015年由微軟實驗室提出,斬獲當年ImageNet競賽中分類任務第一名,目標檢測第一名。獲得COCO數據集中目標檢測第一名,圖像分割第一名。下圖是ResNet18層模型的結構簡圖。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QATETvUx-1587022622695)(attachment:image.png)]

在ResNet網絡中有如下幾個亮點:

(1)提出residual結構(殘差結構),並搭建超深的網絡結構(突破1000層)

(2)使用Batch Normalization加速訓練(丟棄dropout)

在ResNet網絡提出之前,傳統的卷積神經網絡都是通過將一系列卷積層與下采樣層進行堆疊得到的。但是當堆疊到一定網絡深度時,就會出現兩個問題。

(1)梯度消失或梯度爆炸。 

(2)退化問題(degradation problem)。

在ResNet論文中說通過數據的預處理以及在網絡中使用BN(Batch Normalization)層能夠解決梯度消失或者梯度爆炸問題,residual結構(殘差結構)來減輕退化問題。此時擬合目標就變爲F(x),F(x)就是殘差:

殘差模塊

我們先對ResNet18/34的殘差結構進行一個分析。如下圖所示,該殘差結構的主分支是由兩層3x3的卷積層組成,而殘差結構右側的連接線是shortcut分支也稱捷徑分支(注意爲了讓主分支上的輸出矩陣能夠與我們捷徑分支上的輸出矩陣進行相加,必須保證這兩個輸出特徵矩陣有相同的shape)。如果剛剛仔細觀察了ResNet34網絡結構圖的同學,應該能夠發現圖中會有一些虛線的殘差結構。在原論文中作者只是簡單說了這些虛線殘差結構有降維的作用,並在捷徑分支上通過1x1的卷積核進行降維處理。而下圖右側給出了詳細的虛線殘差結構,注意下每個卷積層的步距stride,以及捷徑分支上的卷積核的個數(與主分支上的卷積核個數相同)。

ResNet18/34殘差

接着我們再來分析下針對ResNet50/101/152的殘差結構,如下圖所示。在該殘差結構當中,主分支使用了三個卷積層,第一個是1x1的卷積層用來壓縮channel維度,第二個是3x3的卷積層,第三個是1x1的卷積層用來還原channel維度(注意主分支上第一層卷積層和第二次卷積層所使用的卷積核個數是相同的,第三次是第一層的4倍)。該殘差結構所對應的虛線殘差結構如下圖右側所示,同樣在捷徑分支上有一層1x1的卷積層,它的卷積核個數與主分支上的第三層卷積層卷積核個數相同,注意每個卷積層的步距。

ResNet50/101/152殘差

下面這幅圖是原論文給出的不同深度的ResNet網絡結構配置,注意表中的殘差結構給出了主分支上卷積核的大小與卷積核個數,表中的xN表示將該殘差結構重複N次。

網絡結構

對於我們ResNet18/34/50/101/152,表中conv3_x, conv4_x, conv5_x所對應的一系列殘差結構的第一層殘差結構都是虛線殘差結構。因爲這一系列殘差結構的第一層都有調整輸入特徵矩陣shape的使命(將特徵矩陣的高和寬縮減爲原來的一半,將深度channel調整成下一層殘差結構所需要的channel)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章