當前位置:
首頁 > 最新 > 懶人賞析ResNet

懶人賞析ResNet

懶人賞析系列

0.大綱

  • 引言

  • ResNet意義

  • ResNet結構

  • ResNet50和ResNet101

  • 基於ResNet101的Faster RCNN

  • 1.引言

    ResNet在2015年被提出,並在ImageNet比賽classification任務上獲得第一名,因為它「簡單與實用」並存,之後很多方法都建立在ResNet的基礎上完成的,識別,檢測,分割等領域都紛紛使用ResNet,在大名鼎鼎的Alpha zero中也使用了ResNet,所以可見ResNet確實很好用,值得大家去深入了解和學習。

    2.ResNet意義

    隨著網路的加深,會出現了訓練集上準確率下降的現象,我們可以確定這不是由於Overfit過擬合造成的(過擬合的情況,訓練集上應該準確率很高);所以作者針對這個問題提出了一種全新的網路,叫深度殘差網路,它允許網路更深,其中引入了全新的結構如圖1;

    圖1 Shortcut Connection

    這裡問大家一個問題:

    殘差指的是什麼?

    其中ResNet提出了兩種mapping:一種是identity mapping,x,指的就是圖1中」彎彎的曲線」,另一種residual mapping,F(x),指的就是除了」彎彎的曲線「之外的那部分,兩部分相加組成了最後的輸出:y=F(x)+x

    identity mapping:顧名思義,就是指本身,也就是公式中的x

    residual mapping:指的是「」,也就是y?x,所以殘差指的就是F(x)部分。

    為什麼ResNet可以解決「隨著網路加深,準確率不下降」的問題?

    實驗上,數據可以證明:

    表1,Resnet在ImageNet上的結果

    理論上,對於「隨著網路加深,準確率下降」的問題,Resnet提供了兩種選擇方式,也就是identity mapping和residual mapping,如果網路已經到達最優,繼續加深網路,residual mapping將被push為0,只剩下identity mapping,這樣理論上網路一直處於最優狀態了,網路的性能也就不會隨著深度增加而降低了。

    我們也可以把ResNet作為一種多個子網路Ensemble,取最優的一個子網路作為最後的模型,類似下圖:

    圖2:ResNet的Ensemble等價設計

    我們簡單解釋圖2,其中分成4個路線:

    路線1:F1和F2都經過,最後的結果是y = F2 ( F1 (x) + x ) + ( F1 (x) + x )

    路線2:只經過F2,F1被push為0,結果是y = F2 (x) + x

    路線3:只經過F1,F2被push為0,結果是y = F1 (x) + x

    路線4:F1和F2都被push為0,結果是y = x

    最後的網路會選擇路線1,2,3,4中最優的,某種程度上起到了決策投票的作用。

    因此,我們可以發現,最後最優的網路或許沒有那麼深

    3.ResNet結構

    它使用了一種連接方式叫做「shortcut connection」,顧名思義,shortcut就是「抄近道」的意思,看下圖1我們就能大致理解,我們可以看到一個「彎彎的弧線「這個就是所謂的」shortcut connection「,也是文中提到identity mapping,這張圖也詮釋了ResNet的真諦,當然大家可以放心,真正在使用過程中,ResNet模塊並不是這麼單一,文章中就提出了兩種方式:

    圖3兩種ResNet結構設計

    這兩種結構分別針對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通常用於更深的,如ResNet101這樣的網路中,目的是減少計算和參數量(實用目的)。

    問大家一個問題:

    如圖1所示,如果F(x)和x的channel個數不同怎麼辦,因為F(x)和x是按照channel維度相加的,channel不同怎麼相加呢?

    針對channel個數是否相同,要分成兩種情況考慮,如下圖:

    圖4 兩種Shortcut Connection方式

    如圖4所示,我們可以清楚的」實線「和」虛線「兩種連接方式,

    實線的的Connection部分(」第一個粉色矩形和第三個粉色矩形「)都是3x3x64的特徵圖,他們的channel個數一致,所以採用計算方式:

    y=F(x)+x

    虛線的的Connection部分(」第一個綠色矩形和第三個綠色矩形「)分別是3x3x64和3x3x128的特徵圖,他們的channel個數不同(64和128),所以採用計算方式:

    y=F(x)+Wx

    其中W是卷積操作,用來調整x的channel維度的;

    下面我們看看兩個實例:

    圖5種Shortcut Connection方式實例(左圖channel一致,右圖channel不一樣)

    4.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層。

    5.基於ResNet101的Faster RCNN

    文章中把ResNet101應用在Faster RCNN (對於不了解Faster RCNN的選手,請移步到「物體檢測」模塊,觀看「懶人學Faster RCNN」) 上取得了更好的結果,結果如下:

    表3,Resnet101 Faster RCNN在Pascal VOC07/12 以及COCO上的結果

    這裡有個問題:

    Faster RCNN中RPN和Fast RCNN的共享特徵圖用的是conv5_x的輸出么?

    針對這個問題我們看看實際的基於ResNet101的Faster RCNN的結構圖:

    圖6 基於ResNet101的Faster RCNN

    圖6展示了整個Faster RCNN的架構,其中藍色的部分為ResNet101,可以發現conv4_x的最後的輸出為RPN和RoI Pooling共享的部分,而conv5_x(共9層網路)都作用於RoI Pooling之後的一堆特徵圖(14 x 14 x 1024),特徵圖的大小維度也剛好符合原本的ResNet101中conv5_x的輸入;

    最後大家一定要記得最後要接一個average pooling,得到2048維特徵,分別用於分類和框回歸。

    喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

    本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


    請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

    豬場版維多利亞的秘密?

    TAG:全球大搜羅 |