文章目錄
- 前言
- 一、ResNet
- 二、ResNeXt
- 三、Res2Net
- 四、SeNet
- 五、ResNeSt
- 六、DenseNet
- 七、CSPNet
- Pytorch Model Code
- 總結
前言
Backbone作為一切深度學習任務的基礎,不論是理論還是實際應用都有重要的意義,本文針對經典Backbone進行總結,這些Backbone也是面試常見的問題,卷積網絡主要以ResNet和其各種變體為主。
一、ResNet
paper:Deep Residual Learning for Image Recognition
網絡結構:
Tips:
- 針對問題:殘差神經網絡針對網絡退化現象(隨著網絡加深,準確率降低,引入的激活越來越多,到后來學習恒等變換都很難)提出解決方法,在線性和非線性尋找平衡。
2)殘差的作用:緩解梯度消失。梯度能無損的回傳到網絡的各個層,有效抑制梯度消失的現象
梯度不衰減的傳遞回去,避免梯度消失(常規網絡是梯度累乘)
二、ResNeXt
paper:Aggregated Residual Transformations for Deep Neural Networks
相比ResNet對殘差塊進行了改進,將中間卷積改成了分組卷積,通道數改變了,基本結構和Inceptionv4類似,不過Inceptionv4的并行分支是通道連接然后進行1x1conv。ResNetXt是每個分支末尾進行1x1卷積通道相同,然后相加,在殘差相加。另外ResNeXt使用了一種等效合并的方式(將多分支合并為一個分組卷積)
網絡結構:
Tips:典型的并行卷積獲取多角度特征,網絡也更輕量了一些
三、Res2Net
paper:Res2Net: A New Multi-scale Backbone Architecture
網絡結構:
將殘差塊1x1輸出特征拆分4個部分(其實也是分組),分4個分支,1分支直連,2分支經過3x3卷積然后一個直連,一個給融合下一條分支,達到一個多尺度融合的目的。
Tips:在單個殘差塊內構造具有等級制的類似殘差連接。Res2Net在粒度級別表示多尺度特征,并增加了每個網絡層的感受野。
四、SeNet
paper:Squeeze-and-Excitation Networks
網絡結構:
SENet雖然不算是一個經典的backbone,但是其思想影響了后續很多backbone的設計。SENet首次**將通道注意力概念引入深度網絡,讓卷積網絡有了全局信息的感知能力。通過擠壓操作提取網絡中的空間信息,激勵操作則根據這些信息調整網絡中的通道權重。**這種網絡結構能夠有效地提高網絡的表現,尤其是在處理圖像分類等任務時。擠壓和激勵網絡可以與現有的最先進的CNN結合使用,以實現更高的性能提升。
目前先進的卷積網絡中的模塊都基于這個思想,如經典的CBAM模塊。
Tips:在transformer使用之前讓CNN免除了局部感受野的限制,能夠捕獲一定全局信息,并根據這些信息對特征作出調整。
五、ResNeSt
paper:ResNeSt : Split-Attention Networks
網絡結構:
將輸入分成K個cardinal,每個cardinal分成R個組,故特征共被分成了K*R個組。每個cardinal執行split attention。split attention是分開的SE模塊,每小組(split)特征會根據大組(cardinal)特征生成一個對應的向量,乘上原來的特征,然后再相加。
實際情況,網絡同樣采樣類似ResNeSt的情況進行模塊合并(分組卷積+SE+殘差)。
其設計類似ResNeXt,只不過加了一個SE模塊
六、DenseNet
paper: Densely Connected Convolutional Networks
網絡結構:
DenseNet是在ResNet后的又一個基礎backbone,其連接架構類似ResNet,但把殘差結構的相加換成了cat,繼續傳播。并且它的連接是前面所有層的連接,第3層的輸入是原特征和第1層 第2層的輸出。
上圖是一個DenseBlock,另外還有一個Transition模塊,用于降維。
簡單說下DenseNet的反向傳播——
Tips:DenseNet的出發點在于通過不斷的連接前面的層來恢復崩潰信息。
七、CSPNet
paper:CSPNet: A New Backbone that can Enhance Learning Capability of CNN
網絡結構:
了解yolo的同學們相信對CSPNet都不陌生,CSP的設計主要針對DenseNet。其圍繞的中心思想是網絡優化中的重復梯度信息,以此來優化之前網絡中所需要的大量推理計算問題。
傳統的DenseNet如上圖(a)所示,CSPDenseNet如上圖(b)所示。簡單來看,CSPDenseNet就是將輸入的feature map按照channel分成了兩個部分,其中一個部分正常進行Dense Block的操作,另一個部分直接進行Concat操作。由于每個Dense Block操作的輸入通道都變少了(第一個直接減少,后面Concat的通道數變少),所以能減少計算量。
進行Concat的方式,有上圖幾種。圖(c)的方式,會讓大量的梯度信息被重復利用,有利于學習;下圖(d)的方式,梯度流被阻斷,不能復用梯度信息。但由于Transition層的輸入通道比 (c)要少,因此能大大減少計算復雜度。本文采用的( b )就是結合了(c)和(d)的優點。
Tips:
1)避免梯度信息復用,更豐富的梯度組合強化了CNN的學習能力;
2)降低計算成本,減少內存占用;
Pytorch Model Code
目前我將這些模型的基本架構整理了一下,大部分是從原作者的架構中拆出和從其它作者中找到的(感謝各路大神),經過測試均沒有問題,后續將會整理更多模型架構,一起進步!!!
github:https://github.com/sirius541/pytorch_model_collection
總結
本文主要介紹這些年比較經典的backbone的一些優勢和特點,目前主流的backbone都以transformer為框架進行迭代,不過CNN的backbone是基礎中的基礎,能很好的幫助初學者理解相關理論和設計理念,也是必須要掌握的技術。