ResNet 系列論文


0. 前言

  • 目標:總結殘差網絡系列論文,老忘記,就記錄一下每篇論文的創新點。
  • 論文列表:
    • ResNet v1: Deep Residual Learning for Image Recognition
      • 第一次提出ResNet結構。
    • ResNet v2: Identity Mappings in Deep Residual Networks
      • 對原始ResNet結構進行一些測試,找到更合適的結構,主要就是 conv-bn-relu的順序以及relu的位置
    • Wide ResNet: Wide Residual Networks
      • 之前的ResNet太“瘦”了,並實驗證明“胖”一點的結構也能用
    • ResNext: Aggregated Residual Transformations for Deep Neural Networks
      • 將Inception的思路引入ResNet,主要就是分組卷積
    • Res2Net: A New Multi-scale Backbone Architecture
      • 設計用於處理多尺度問題,不僅是分組卷積,前面幾組的結果還會作爲後續組別的輸入。
    • iResNet: Improved Residual Networks for Image and Video Recognition
      • 改進ResNet的基本結構,即bottleneck結構、shortcut結構。

1. ResNet V1

  • arxiv: Deep Residual Learning for Image Recognition
  • 要解決什麼問題?
    • ResNet 剛被提出來的時候,主要要解決的就是“深層神經網絡訓練困難”的問題。
      • 從理論上看,深層網絡模型效果不會低於淺層網絡。例如,假設深層網絡前面的結構與淺層網絡完全相同,深層網絡後面的結果使用Identity Mapping,則可以保證深層網絡效果等價於淺層網絡。
      • 但實際訓練中,如果直接使用一些普通的深層網絡,效果卻比淺層網絡差,這就意味着不是模型本身有問題,而是深層模型訓練比淺層困難。
    • 所謂“訓練困難”,主要就是梯度消散。
      • 沒有ResNet結構的深層網絡效果較差的原因不是過擬合(因爲訓練誤差也隨着深度增加而增加了)。
  • 用了什麼方法解決?
    • 提出了ResNet,即殘差網絡結構。其基本結構如下圖image_1e5bs7fb3epu1mvs1h81rr015v19.png-62.1kB
    • ResNet有效的一種解釋是:由於梯度消散導致訓練困難,則通過殘差結構保留梯度。
    • BotteleNet 結構,即上圖中右邊的結構。
      • BottleNet應該可以翻譯爲“瓶頸”結構。
      • 所謂瓶頸,主要指的是channel的數量的變化(先大後小再增大)。以上面右圖爲例,輸入與輸出的channel都是256,但前兩層的channel是64,這就會減少參數數量。
      • 該結構的目標是減少參數與運算量。
    • 如果輸入與輸出需要變化channel數量,那就需要對shotcut通道也進行處理。
    • 設計的網絡結構如下:image_1e7vfic7p1gmts1o1fdb19m6htf9.png-125.7kB
  • 效果如何?
    • 好得一筆。
    • ResNet50應該是現在最基本的backbone,用在幾乎所有CV相關的任務中。
    • 後來設計網絡有很多很多都借鑑了這個結構。
  • 還存在什麼問題?
    • 而且這種結構一般都比較玄學,一般靠各種完備的實驗來證明信結構的優越性,但不能完整解釋爲什麼work。
    • Wide ResNet論文中提到
      • ResNet比Inception的泛化能力差一點。
      • shortcut結構雖然能夠保留梯度,但也存在一些問題:
        • 由於使用了shortcut結構,所以block的非shortcut子路其實可以不傳遞梯度,也就是說,換句話說,每個block能夠學習到的東西很少。
        • 從上面可以看出,可能只有一些block能夠學到有用的內容,其他很多block其實對最終結果沒有什麼作用。
        • 上面所說的這個問題在論文 Highway networks 被稱爲 diminishing feature resue。

2. ResNet V2

  • arxiv: Identity Mappings in Deep Residual Networks
  • 要解決什麼問題?
    • 本質是在 ResNet V1 的基礎上進行一些修改,主要思想還是 ResNetV1。
    • 個人感覺是在ResNetV1的基礎上又做了一系列實驗,尋找更合適的結構。
  • 用了什麼方法解決?
    • 改進殘差單元,如下圖
      • 主要改進方案有兩個:將激活層放到旁路,將旁路結構從conv-bn-relu改爲bn-relu-conv。
      • image_1e5cehb1quv84571suo8eidqim.png-412.3kB
    • 還試驗了很多其他結構,最終選擇的反正就是最後一個,沒花頭。
      • image_1e7vjg5tnvoqce479f1e2go6km.png-165.8kB
    • 對於上面那張圖,在這篇文章中有一些解釋:image_1e7vlsn0b5gj1fvm31k1ap8vka13.png-89kB
  • 效果如何?
    • 做了很多實驗,證明新的結構比舊的好。
  • 還存在什麼問題?
    • 這篇論文感覺比較水,就是一系列實驗找了個更好的模型結構。
    • 不可解釋,都是實驗的結果,但又不知道爲什麼這樣修改比較好。
    • 但我看了PyTorch的ResNet實現,好像都沒用這裏的東西……

3. Wide ResNet

  • arxiv: Wide Residual Networks
  • 要解決什麼問題?
    • 之前的ResNet可以通過增加深度來提高模型精度。但隨着深度的增加,提高的精度越來越少,且訓練難度越來越大。
    • 當時的ResNet相關研究主要聚焦於增加網絡的“深度”,而不怎麼關注“寬度”。
      • 所謂“寬度”,指的是特徵圖的深度;所謂“深度”,指的是疊加的卷基層/BN層等的數量。
      • 基本上用到的網絡都是很“瘦長”的。
    • 與Inception系列比,ResNet系列的泛化性(generalization)較差,即特徵用於遷移學習時效率更低。
      • 由於使用了shortcut結構,所以block的非shortcut子路其實可以不傳遞梯度,也就是說,換句話說,每個block能夠學習到的東西很少。
      • 從上面可以看出,可能只有一些block能夠學到有用的內容,其他很多block其實對最終結果沒有什麼作用。
      • 上面所說的這個問題在論文 Highway networks 被稱爲 diminishing feature resue。
    • 從上面這些問題就引出了本文的目標:如何使用wide deep residual networks來處理深度網絡存在的訓練問題。
  • 用了什麼方法解決?
    • 提出了一個新的block結構:
      • 如圖所示,新提出的結構的寬度增加(即前兩張圖片的卷基層寬度較小,後兩張較大)。
      • image_1e89mj1bf1cqt1mvub3sgee19m09.png-131.7kB
    • 基於新的block結構提出了Wide ResNetimage_1e89mll8d1dnr19c51brs1gpujqom.png-118.9kB
    • 在每個block的卷基層之間使用了Dropout。.
    • 在設置窟寬度、深度的時候,一般是考慮參數數量。
  • 效果如何?
    • 僅使用16層網絡,在多個數據集(CIFAR/SVHN/COCO/ImageNet)上達到最優。
  • 還存在什麼問題?
    • Wide ResNet 現在好像不太常用。
    • 在卷基層中間加上Dropout好像也不常用。
    • PyTorch的Torchvision中有Wide ResNet的實現,不過也與論文中不完全相同,僅僅是修改了每個block中特徵圖的深度。

4. ResNext

  • arxiv: Aggregated Residual Transformations for Deep Neural Networks
  • github
  • 要解決什麼問題?
    • 提到當時視覺識別問題(visual recognition)已經從特徵工程(feature engineering)轉換爲網絡設計(network engineering)。
    • 當時的研究還集中在網絡結構的設計上,想要同時結合VGG和ResNet的特點。
      • VGG網絡的設計提出了一種新的設計方案:
        • 疊加同樣的block從而得到結果。
        • 作者認爲這種設計比較好,不會導致在某個數據集上性能好,放到其他數據集上性能不好。
      • Inception系列模型提出了 split-transformation-merge 策略,注重性能。
    • 當時的網絡設計,在增加計算量/參數量的基礎上提高性能比較多,很少有參數量/計算量不變但性能提高的。
  • 用了什麼方法解決?
    • 設計了一種新的block結構,其中心思想是引入了 cardinality 的概念,我的理解其實就是做分組卷積。
      • 普通ResNet是做三次卷積,channel變化分別是256 -> 64 -> 64 -> 256。
      • ResNext的做法是將做32組操作(即cardinality參數),每組channel變化是 256 -> 4 -> 4 -> 256,最後將32組的所有結果累加。
      • image_1ea4nac8910af10201c11hlnrh59.png-113.7kB
    • 在具體實現時,有一些可以修改的地方(從而提高性能)
      • 下圖中,b/c就與a完全相同,但性能更好。
      • image_1ea4nuphlfs21pn2m812j151b13.png-97kB
    • 提出的ResNext網絡結構如下圖:
      • image_1ea4nnkfm1b8vba31t3al3dm0jm.png-149.3kB
  • 效果如何?
    • image_1ea4qlr8m1tgjq681ud21sms3d31g.png-59.8kB
    • image_1ea4qm3ht10lr11p89p718fg11ij1t.png-54kB
  • 還存在什麼問題?
    • 感覺整體idea也沒啥,就是加了個分組卷積,效果還不錯。

5. Res2Net

  • arxiv: Res2Net: A New Multi-scale Backbone Architecture
  • github
  • 要解決什麼問題?
    • 主要解決多尺度(multi-scales)的問題。
    • multi-scale 問題是什麼?
      • 在一張圖片中,可能出現不同尺寸的多個物體。
      • 一個物體周邊的其他物體可能比物體本身蘊含更多信息。
      • 獲取不同尺度物體的信息對於一些任務(如語義分隔、顆粒度分類)有很大作用。
    • 之前處理 multi-scale 主要通過 layer-wise representation 來表示。還有通過處理不同尺度的特徵圖來處理。
  • 用了什麼方法解決?
    • 提出了Res2Net Module,結構如下圖所示。
      • 該結構爲模型超參數多了一個選項,scale dimension,下圖爲4,即將卷基層分爲多少個組。
      • image_1ea4vdhhv289r981mdb1bffkkk2a.png-59.2kB
    • 這種方法 at a more granular level(不知道怎麼翻譯,更細微的層面)上處理multi-scale問題。
      • 如何理解 res2net module 能夠處理 multi-scale 問題?可以從receptive field上理解,上圖中分組從左到右的receptive field依次增加。
    • 與其他模型整合,如整合ResNext與SE。整體結構如下圖image_1ea54snj7v231ta7dour6d1n9v3u.png-67.3kB
      • SE模塊如下圖image_1ea54917g16041oh813bg192o1l5p3h.png-81.2kB
      • 與ResNext整合的意思就是其中的group=1的普通卷積轉換爲group=c的分組卷積。
  • 效果如何?
    • 替代ResNet後普遍漲點,下面這結果還是帶了運行時間的,可以有
      • image_1ea4voraiovshu81qev1kfudf92n.png-69.5kB
    • Grad-Cam效果都更好了image_1ea4vrplv1bet19a81p64m0tjuj34.png-652.3kB
    • 在關鍵點識別、目標檢測、語義分割中都得到了較好的結果,已經作爲mmdetection的backbone。
  • 還存在什麼問題?
    • 這種分組卷積都有一個問題,雖然GFLOPs差不多,但實際運行速度肯定有一定下降。

6. iResNet

  • arxiv: Improved Residual Networks for Image and Video Recognition

  • github

  • 要解決什麼問題?

    • ResNet是現在常用的backbone,主要就是用於抑制退化問題(隨着神經網絡層數增加,訓練結果變差了)。
    • ResNet雖然抑制了退化問題,但也存在上升空間。
  • 用了什麼方法解決?

    • iResNet,是 improved residual network 的縮寫。
    • 改進ResNet Block的基本結構,如下圖:
      • (a) 是ResNet v1的結構,注意relu的位置,這種結構不利於將信息保留下來。
      • (b) 是ResNet V2的結構,爲了解決上面所說的relu不利於保留信息,所以改變了conv-bn-relu的順序,且改變了relu的結構,但這樣做保留信息的方式太直接了,相當於從一個極端走向另一個極端。
      • 文章總結了之前結構存在的兩個問題:
        • 在stage後的數據都沒有經過relu,所以隨着block數量增加,總體信號變得越來越 unnormalized,這導致訓練難度增加。
        • 由於會降低特徵圖尺寸,每次降低時都會用到 11 卷積來做 projection,四個11連接,但沒有任何非線性處理,這會導致訓練難度增加。
      • 爲了改進上面所說的問題,提出了下圖©結構。
      • image_1ea6p7q97gmr19eo1at1e9sbo09.png-119.2kB
    • 改進shortcut結構
      • shortcut就是在block的輸入與輸出尺寸有變化時使用。
      • 文章認爲 1*1 stride 2 卷積操作會損失75%的特徵圖信息,而且選擇的25%並沒有什麼依據。
      • 新結構設計的依據有三個:減少信息損失、增加了translation invariance、看作是soft/hard downsampling 的結合
      • image_1ea6tqea11743s54qc6o7u114pm.png-31kB
    • 改進 block 的結構
      • 以前用的 bottleneck 結構,是爲了減少計算量。
      • 本文引入了分組卷積,在增加channel的保持FLOPs基本上不增加。
      • image_1ea6ufuumd3614bh1eb61dem7r313.png-48.6kB
      • image_1ea6umvfatk34g2qbm1o0lqjn1g.png-126.9kB
  • 效果如何?

    • 有一些與resnet v1比較的結果就不看了……怎麼可能比resnet v1差。
    • 下圖比較了 resnext,看起來並沒有什麼優勢(參數雖然少了,但FLOPs多了)
      • image_1ea6uq53hnofmia8fj8a16a51t.png-95.3kB
  • 還存在什麼問題?

    • FLOPs不增加不代表inference time不增加。
    • 其實我感覺這篇論文結果選擇的baseline有點弱了……要比也是跟Res2Net、ResNeXt比吧……比了好像也沒有太大優勢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章