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結構。
- ResNet v1: Deep Residual Learning for Image Recognition
1. ResNet V1
- arxiv: Deep Residual Learning for Image Recognition
- 要解決什麼問題?
- ResNet 剛被提出來的時候,主要要解決的就是“深層神經網絡訓練困難”的問題。
- 從理論上看,深層網絡模型效果不會低於淺層網絡。例如,假設深層網絡前面的結構與淺層網絡完全相同,深層網絡後面的結果使用Identity Mapping,則可以保證深層網絡效果等價於淺層網絡。
- 但實際訓練中,如果直接使用一些普通的深層網絡,效果卻比淺層網絡差,這就意味着不是模型本身有問題,而是深層模型訓練比淺層困難。
- 所謂“訓練困難”,主要就是梯度消散。
- 沒有ResNet結構的深層網絡效果較差的原因不是過擬合(因爲訓練誤差也隨着深度增加而增加了)。
- ResNet 剛被提出來的時候,主要要解決的就是“深層神經網絡訓練困難”的問題。
- 用了什麼方法解決?
- 提出了ResNet,即殘差網絡結構。其基本結構如下圖
- ResNet有效的一種解釋是:由於梯度消散導致訓練困難,則通過殘差結構保留梯度。
- BotteleNet 結構,即上圖中右邊的結構。
- BottleNet應該可以翻譯爲“瓶頸”結構。
- 所謂瓶頸,主要指的是channel的數量的變化(先大後小再增大)。以上面右圖爲例,輸入與輸出的channel都是256,但前兩層的channel是64,這就會減少參數數量。
- 該結構的目標是減少參數與運算量。
- 如果輸入與輸出需要變化channel數量,那就需要對shotcut通道也進行處理。
- 設計的網絡結構如下:
- 效果如何?
- 好得一筆。
- 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。
- 還試驗了很多其他結構,最終選擇的反正就是最後一個,沒花頭。
- 對於上面那張圖,在這篇文章中有一些解釋:
- 改進殘差單元,如下圖
- 效果如何?
- 做了很多實驗,證明新的結構比舊的好。
- 還存在什麼問題?
- 這篇論文感覺比較水,就是一系列實驗找了個更好的模型結構。
- 不可解釋,都是實驗的結果,但又不知道爲什麼這樣修改比較好。
- 但我看了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結構:
- 如圖所示,新提出的結構的寬度增加(即前兩張圖片的卷基層寬度較小,後兩張較大)。
- 基於新的block結構提出了Wide ResNet
- 在每個block的卷基層之間使用了Dropout。.
- 在設置窟寬度、深度的時候,一般是考慮參數數量。
- 提出了一個新的block結構:
- 效果如何?
- 僅使用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
策略,注重性能。
- VGG網絡的設計提出了一種新的設計方案:
- 當時的網絡設計,在增加計算量/參數量的基礎上提高性能比較多,很少有參數量/計算量不變但性能提高的。
- 用了什麼方法解決?
- 設計了一種新的block結構,其中心思想是引入了 cardinality 的概念,我的理解其實就是做分組卷積。
- 普通ResNet是做三次卷積,channel變化分別是256 -> 64 -> 64 -> 256。
- ResNext的做法是將做32組操作(即cardinality參數),每組channel變化是 256 -> 4 -> 4 -> 256,最後將32組的所有結果累加。
- 在具體實現時,有一些可以修改的地方(從而提高性能)
- 下圖中,b/c就與a完全相同,但性能更好。
- 提出的ResNext網絡結構如下圖:
- 設計了一種新的block結構,其中心思想是引入了 cardinality 的概念,我的理解其實就是做分組卷積。
- 效果如何?
- 還存在什麼問題?
- 感覺整體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,即將卷基層分爲多少個組。
- 這種方法 at a more granular level(不知道怎麼翻譯,更細微的層面)上處理multi-scale問題。
- 如何理解 res2net module 能夠處理 multi-scale 問題?可以從receptive field上理解,上圖中分組從左到右的receptive field依次增加。
- 與其他模型整合,如整合ResNext與SE。整體結構如下圖
- SE模塊如下圖
- 與ResNext整合的意思就是其中的group=1的普通卷積轉換爲group=c的分組卷積。
- 提出了Res2Net Module,結構如下圖所示。
- 效果如何?
- 替代ResNet後普遍漲點,下面這結果還是帶了運行時間的,可以有
- Grad-Cam效果都更好了
- 在關鍵點識別、目標檢測、語義分割中都得到了較好的結果,已經作爲mmdetection的backbone。
- 替代ResNet後普遍漲點,下面這結果還是帶了運行時間的,可以有
- 還存在什麼問題?
- 這種分組卷積都有一個問題,雖然GFLOPs差不多,但實際運行速度肯定有一定下降。
6. iResNet
-
arxiv: Improved Residual Networks for Image and Video Recognition
-
要解決什麼問題?
- 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連接,但沒有任何非線性處理,這會導致訓練難度增加。
- 爲了改進上面所說的問題,提出了下圖©結構。
- 改進shortcut結構
- shortcut就是在block的輸入與輸出尺寸有變化時使用。
- 文章認爲 1*1 stride 2 卷積操作會損失75%的特徵圖信息,而且選擇的25%並沒有什麼依據。
- 新結構設計的依據有三個:減少信息損失、增加了translation invariance、看作是soft/hard downsampling 的結合
- 改進 block 的結構
- 以前用的 bottleneck 結構,是爲了減少計算量。
- 本文引入了分組卷積,在增加channel的保持FLOPs基本上不增加。
-
效果如何?
- 有一些與resnet v1比較的結果就不看了……怎麼可能比resnet v1差。
- 下圖比較了 resnext,看起來並沒有什麼優勢(參數雖然少了,但FLOPs多了)
-
還存在什麼問題?
- FLOPs不增加不代表inference time不增加。
- 其實我感覺這篇論文結果選擇的baseline有點弱了……要比也是跟Res2Net、ResNeXt比吧……比了好像也沒有太大優勢。