論文筆記:再看ResNet——ResNet典型網絡結構

前言

第一次看ResNet論文的時候,由於剛接觸深度學習不久,對ResNet的理解僅僅停留在論文中闡述的一些基本思想。加上當時實驗室的硬件條件很有限,用的模型基本上以AlexNet和VGG爲主,並沒有在學習中使用過ResNet。因此忽略了論文中提出的幾種典型ResNet網絡。一直到工作後,才發現ResNet的幾種典型結構在諸多計算機視覺任務中都充當着非常重要的角色,因此很有必要更細緻地瞭解一下ResNet的經典網絡。若是剛接觸ResNet,還是建議從最論文開始看起,我自己也寫過一遍對於ResNet原理的簡單介紹,見論文筆記:Deep Residual Network

ResNet的經典網絡結構有:ResNet-18、ResNet-34、ResNet-50、ResNet-101、ResNet-152幾種,其中,ResNet-18和ResNet-34的基本結構相同,屬於相對淺層的網絡,後面3種的基本結構不同於ResNet-18和ResNet-34,屬於更深層的網絡。本篇文章以ResNet-34和ResNet-50爲例進行介紹。

ResNet結構

不論是多少層的ResNet網絡,它們都有以下共同點:

  • 網絡一共包含5個卷積組,每個卷積組中包含1個或多個基本的卷積計算過程(Conv-> BN->ReLU)
  • 每個卷積組中包含1次下采樣操作,使特徵圖大小減半,下采樣通過以下兩種方式實現:
    • 最大池化,步長取2,只用於第2個卷積組(Conv2_x)
    • 卷積,步長取2,用於除第2個卷積組之外的4個卷積組
  • 第1個卷積組只包含1次卷積計算操作,5種典型ResNet結構的第1個卷積組完全相同,卷積核均爲7x7, 步長爲均2
  • 第2-5個卷積組都包含多個相同的殘差單元,在很多代碼實現上,通常把第2-5個卷積組分別叫做Stage1、Stage2、Stage3、Stage4

ResNet-34

由於論文中對於幾種典型的ResNet網絡結構畫的比較簡潔,跟多的是文字敘述,於是我自己根據論文的介紹和MMdetecrion中的ResNet主幹網絡源碼重畫了一下ResNet的結構圖,下圖是ResNet-34的結構圖:

ResNet-34

關於上圖有幾點需要解釋:

  • 每個綠色的矩形框表示ResNet的一個Stage,從上到下爲Stage1 (Conv2_x)、Stage2 (Conv3_x)、Stage3 (Conv4_x)、Stage4 (Conv5_x)
  • 綠色矩形框內的每個黃色的矩形框表示1個或多個標準的殘差單元,黃色矩形框左側的數值表示殘差單元級聯的數量,如5x表示5個級聯的殘差單元
  • 通道數變化:輸入通道爲3,4個Stage的通道數依次爲64、128、256、512,即每經過一個Stage通道數翻倍
  • 層數計算:每個Stage包含的殘差單元數量依次爲3、4、6、3,每個殘差單元包含2個卷積層,再算上第一個7x7卷積層和3x3最大池化層,總的層數=(3+4+6+3)*2+1+1 = 34
  • 下采樣:黃色矩形框中紫色的部分代表發生下采樣操作,即特徵圖大小減半,右側箭頭標識即爲下采樣後的特徵圖大小(輸入224x224爲例);第一個綠色矩形框內的橙色矩形框表示最大池化,此處發生第一次下采樣
  • 卷積層參數解釋:以Conv 3x3, c512, s2, p1爲例, 3x3表示卷積核大小,c512表示卷積核數量/輸出通道數量爲512,s2表示卷積步長爲2,p1表示卷積的padding取1。
  • 池化層參數解釋:Max_pool 3x3, c64, s2, p1,3x3表示池化的區域大小(類似於卷積核大小),c64表示輸入輸出通道爲64,s2表示池化的步長爲2,p1表示padding取1

對結構有一個大致的瞭解後,我們會發現:ResNet中的下采樣操作發生在每個Stage的第一個殘差單元或最大池化層,實現方式是操作都是通過在卷積或者池化中取步長爲2。

另外,對於另外1個網絡ResNet-18,和ResNet-34的區別在於每個Stage級聯的殘差單元數量不同,ResNet-184個Stage殘差單元數量均爲2,總層數=(2+2+2+2)*2+1+1 = 18

ResNet-50

ResNet-50的的整體結構於ResNet-18類型,具體如下:

ResNet-50

與ResNet-18/34的主要區別在於以下幾點:

  • 基本殘差單元
    • ResNet-18/34的殘差單元包含2個3x3卷積層
    • ResNet-50的殘差單元包含3個卷積層,依次爲1x1,3x3和1x1
  • 通道數變化
    • ResNet-18/34的通道數在每個Stage的第1個殘差單元的第1個卷積層輸出翻倍,後續通道數保持不變
    • ResNet-50的通道數在每個Stage的第1個殘差單元的輸出部分翻倍,而每個殘差單元內部也伴隨着通道數的變化(有減少也有增加,依靠1x1卷積層來調節),這主要是爲了在深層的網絡中減少參數數量。
  • 下采樣時刻
    • ResNet-18/34的下采樣操作發生在每個Stage(不包括Stage1)第1個殘差單元中的第1個卷積層(conv 3x3)
    • ResNet-50的下采樣操作發生在每個Stage(不包括Stage1)第1個殘差單元中的第2個卷積層(conv 3x3)

類似的,對於ResNet-101/152,與ResNet-50的區別也僅在於與每個Stage殘差單元數量的不同,ResNet-50爲(3,4,6,3),ResNet-101爲(3,4,23,3),ResNet-152爲(3,8,36,3),總層數的計算方式與ResNet-34類似,只是殘差單元中卷積層數量由變爲3。

ResNet變種

其實在許多計算機視覺任務的實現上,爲了適應不同任務的特性,ResNet的結構也會發生細微的調整,例如在Caffe的實現中,把ResNet-50/101-152的下采樣操作置於每個殘差單元的第1個卷積層(conv 1x1);還有的實現中(如MMdetection),把第一個7x7的卷積層用2個3x3的卷積層代替來代替,以此減少大卷積核的參數。

另外最近在學習目標跟蹤領域中的Siamese網絡中發現,ResNet-50在目標跟蹤領域中比較流行,但ResNet-50會帶來一個問題:多次的下采樣會降低目標跟蹤的精度,而直接取消下采樣操作又會降低網絡的感受野。因此,爲了在減少ResNet中下采樣次數的同時保持原有的感受野,在ResNet-50中往往會捨棄1-2個下采樣層(步長變回1),並使用膨脹卷積來保證原有的感受野不變(如Siamese RPN++和Siammask),有興趣的可以去了解一下,這裏不再過多介紹。

結語

本篇文章着重介紹ResNet的幾種典型網絡,對於基本的原理和思想沒有過多提及,文中的內容主要根據論文原文和MMdetection中的源碼來寫的,有不恰當或錯誤的地方還請指正。

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