ResNet在2015年被提出,在ImageNet比賽classification任務上獲得第一名,因為它“簡單與實用”并存,之后很多方法都建立在ResNet50或者ResNet101的基礎上完成的,檢測,分割,識別等領域都紛紛使用ResNet,Alpha zero也使用了ResNet,所以可見ResNet確實很好用。?
下面我們從實用的角度去看看ResNet。
1.ResNet意義
隨著網絡的加深,出現了訓練集準確率下降的現象,我們可以確定這不是由于Overfit過擬合造成的(過擬合的情況訓練集應該準確率很高);所以作者針對這個問題提出了一種全新的網絡,叫深度殘差網絡,它允許網絡盡可能的加深,其中引入了全新的結構如圖1;?
這里問大家一個問題?
殘差指的是什么??
其中ResNet提出了兩種mapping:一種是identity mapping,指的就是圖1中”彎彎的曲線”,另一種residual mapping,指的就是除了”彎彎的曲線“那部分,所以最后的輸出是 y=F(x)+xy=F(x)+x?
identity mapping顧名思義,就是指本身,也就是公式中的xx,而residual mapping指的是“差”,也就是y?xy?x,所以殘差指的就是F(x)F(x)部分。?
為什么ResNet可以解決“隨著網絡加深,準確率不下降”的問題??
除了實驗證明外:?
表1,Resnet在ImageNet上的結果?
理論上,對于“隨著網絡加深,準確率下降”的問題,Resnet提供了兩種選擇方式,也就是identity mapping和residual mapping,如果網絡已經到達最優,繼續加深網絡,residual mapping將被push為0,只剩下identity mapping,這樣理論上網絡一直處于最優狀態了,網絡的性能也就不會隨著深度增加而降低了。
2.ResNet結構
它使用了一種連接方式叫做“shortcut connection”,顧名思義,shortcut就是“抄近道”的意思,看下圖我們就能大致理解:?
圖1 Shortcut Connection?
這是文章里面的圖,我們可以看到一個“彎彎的弧線“這個就是所謂的”shortcut connection“,也是文中提到identity mapping,這張圖也詮釋了ResNet的真諦,當然大家可以放心,真正在使用的ResNet模塊并不是這么單一,文章中就提出了兩種方式:?
圖2 兩種ResNet設計 【ResNet34(左圖)和ResNet50/101/152(右圖)】
這兩種結構分別針對ResNet34(左圖)和ResNet50/101/152(右圖),一般稱整個結構為一個”building block“。其中右圖又稱為”bottleneck design”,目的一目了然,就是為了降低參數的數目,第一個1x1的卷積把256維channel降到64維,然后在最后通過1x1卷積恢復,整體上用的參數數目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的話就是兩個3x3x256的卷積,參數數目: 3x3x256x256x2 = 1179648,差了16.94倍。?
對于常規ResNet,可以用于34層或者更少的網絡中,對于Bottleneck Design的ResNet通常用于更深的如101這樣的網絡中,目的是減少計算和參數量(實用目的)。
問大家一個問題:?
如圖1所示,如果F(x)和x的channel個數不同怎么辦,因為F(x)和x是按照channel維度相加的,channel不同怎么相加呢??
針對channel個數是否相同,要分成兩種情況考慮,如下圖:?
?
圖3 兩種Shortcut Connection方式?
如圖3所示,我們可以清楚的”實線“和”虛線“兩種連接方式,?
實線的的Connection部分(”第一個粉色矩形和第三個粉色矩形“)都是執行3x3x64的卷積,他們的channel個數一致,所以采用計算方式:?
y=F(x)+xy=F(x)+x?
虛線的的Connection部分(”第一個綠色矩形和第三個綠色矩形“)分別是3x3x64和3x3x128的卷積操作,他們的channel個數不同(64和128),所以采用計算方式:?
y=F(x)+Wxy=F(x)+Wx?
其中W是卷積操作,用來調整x的channel維度的;?
下面我們看看兩個實例:?
?
圖4 兩種Shortcut Connection方式實例(左圖channel一致,右圖channel不一樣)
3.ResNet50和ResNet101
這里把ResNet50和ResNet101特別提出,主要因為它們的出鏡率很高,所以需要做特別的說明。給出了它們具體的結構:?
表2,Resnet不同的結構?
首先我們看一下表2,上面一共提出了5中深度的ResNet,分別是18,34,50,101和152,首先看表2最左側,我們發現所有的網絡都分成5部分,分別是:conv1,conv2_x,conv3_x,conv4_x,conv5_x,之后的其他論文也會專門用這個稱呼指代ResNet50或者101的每部分。?
拿101-layer那列,我們先看看101-layer是不是真的是101層網絡,首先有個輸入7x7x64的卷積,然后經過3 + 4 + 23 + 3 = 33個building block,每個block為3層,所以有33 x 3 = 99層,最后有個fc層(用于分類),所以1 + 99 + 1 = 101層,確實有101層網絡;?
注:101層網絡僅僅指卷積或者全連接層,而激活層或者Pooling層并沒有計算在內;?
這里我們關注50-layer和101-layer這兩列,可以發現,它們唯一的不同在于conv4_x,ResNet50有6個block,而ResNet101有23個block,查了17個block,也就是17 x 3 = 51層。
4.基于ResNet101的Faster RCNN
文章中把ResNet101應用在Faster RCNN上取得了更好的結果,結果如下:?
表3,Resnet101 Faster RCNN在Pascal VOC07/12 以及COCO上的結果?
這里有個問題:?
Faster RCNN中RPN和Fast RCNN的共享特征圖用的是conv5_x的輸出么??
針對這個問題我們看看實際的基于ResNet101的Faster RCNN的結構圖:?
圖5 基于ResNet101的Faster RCNN?
圖5展示了整個Faster RCNN的架構,其中藍色的部分為ResNet101,可以發現conv4_x的最后的輸出為RPN和RoI Pooling共享的部分,而conv5_x(共9層網絡)都作用于RoI Pooling之后的一堆特征圖(14 x 14 x 1024),特征圖的大小維度也剛好符合原本的ResNet101中conv5_x的輸入;?
最后大家一定要記得最后要接一個average pooling,得到2048維特征,分別用于分類和框回歸。
---------------------?
作者:懶人元?
來源:CSDN?
原文:https://blog.csdn.net/lanran2/article/details/79057994?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
==========================================================================================
ResNet介紹
1 簡要概括
????ResNet(Residual Neural Network)由微軟研究院的Kaiming He等四名華人提出,通過使用ResNet Unit成功訓練出了152層的神經網絡,并在ILSVRC2015比賽中取得冠軍,在top5上的錯誤率為3.57%,同時參數量比VGGNet低,效果非常突出。ResNet的結構可以極快的加速神經網絡的訓練,模型的準確率也有比較大的提升。同時ResNet的推廣性非常好,甚至可以直接用到InceptionNet網絡中。
????ResNet的主要思想是在網絡中增加了直連通道,即Highway Network的思想。此前的網絡結構是性能輸入做一個非線性變換,而Highway Network則允許保留之前網絡層的一定比例的輸出。ResNet的思想和Highway Network的思想也非常類似,允許原始輸入信息直接傳到后面的層中,如下圖所示。
????這樣的話這一層的神經網絡可以不用學習整個的輸出,而是學習上一個網絡輸出的殘差,因此ResNet又叫做殘差網絡。
2 創新點
????提出殘差學習的思想。傳統的卷積網絡或者全連接網絡在信息傳遞的時候或多或少會存在信息丟失,損耗等問題,同時還有導致梯度消失或者梯度爆炸,導致很深的網絡無法訓練。ResNet在一定程度上解決了這個問題,通過直接將輸入信息繞道傳到輸出,保護信息的完整性,整個網絡只需要學習輸入、輸出差別的那一部分,簡化學習目標和難度。VGGNet和ResNet的對比如下圖所示。ResNet最大的區別在于有很多的旁路將輸入直接連接到后面的層,這種結構也被稱為shortcut或者skip connections。
3 網絡結構
????在ResNet網絡結構中會用到兩種殘差模塊,一種是以兩個3*3的卷積網絡串接在一起作為一個殘差模塊,另外一種是1*1、3*3、1*1的3個卷積網絡串接在一起作為一個殘差模塊。他們如下圖所示。
????ResNet有不同的網絡層數,比較常用的是50-layer,101-layer,152-layer。他們都是由上述的殘差模塊堆疊在一起實現的。
---------------------?
作者:dayL_W?
來源:CSDN?
原文:https://blog.csdn.net/u013181595/article/details/80990930?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!