ResNet50網絡結構圖及結構詳解


引言

之前我讀了ResNet的論文Deep Residual Learning for Image Recognition,也做了論文筆記,筆記里記錄了ResNet的理論基礎(核心思想、基本Block結構、Bottleneck結構、ResNet多個版本的大致結構等等),看本文之間可以先看看打打理論基礎。

一個下午的時間,我用PPT純手工做了一張圖片詳細說明ResNet50的具體結構,本文將結合該圖片詳細介紹ResNet50。

這張圖和這篇文章估計全網最詳細了(狗頭)。

廢話不多說,先放圖片(文末有圖片和PPT源文件的下載鏈接)。

img

上圖(稱為本圖)可划分為左、中、右3個部分,三者內容分別如下

  1. ResNet50整體結構
  2. ResNet50各個Stage具體結構
  3. Bottleneck具體結構

接下來為正文內容,本文先后介紹了本圖從左到右的3個部分,並對Bottleneck進行了簡要分析

ResNet50整體結構

首先需要聲明,這張圖的內容是ResNet的Backbone部分(即圖中沒有ResNet中的全局平均池化層和全連接層)。

如本圖所示,輸入INPUT經過ResNet50的5個階段(Stage 0Stage 1、……)得到輸出OUTPUT

下面附上ResNet原文展示的ResNet結構,大家可以結合着看,看不懂也沒關系,只看本文也可以無痛理解的。

img

上圖描述了ResNet多個版本的具體結構,本文描述的“ResNet50”中的50指有50個層。和上圖一樣,本圖描述的ResNet也分為5個階段。

ResNet各個Stage具體結構

如本圖所示,ResNet分為5個stage(階段),其中Stage 0的結構比較簡單,可以視其為對INPUT的預處理,后4個Stage都由Bottleneck組成,結構較為相似。Stage 1包含3個Bottleneck,剩下的3個stage分別包括4、6、3個Bottleneck

現在對Stage 0Stage 1進行詳細描述,同理就可以理解后3個Stage。

Stage 0

  • (3,224,224)指輸入INPUT的通道數(channel)、高(height)和寬(width),即(C,H,W)。現假設輸入的高度和寬度相等,所以用(C,W,W)表示。

  • 該stage中第1層包括3個先后操作

    1. CONV

      CONV是卷積(Convolution)的縮寫,7×7指卷積核大小,64指卷積核的數量(即該卷積層輸出的通道數),/2指卷積核的步長為2。

    2. BN

      BN是Batch Normalization的縮寫,即常說的BN層。

    3. RELU

      RELU指ReLU激活函數。

  • 該stage中第2層為MAXPOOL,即最大池化層,其kernel大小為3×3、步長為2

  • (64,56,56)是該stage輸出的通道數(channel)、高(height)和寬(width),其中64等於該stage第1層卷積層中卷積核的數量,56等於224/2/2(步長為2會使輸入尺寸減半)。

總體來講,在Stage 0中,形狀為(3,224,224)的輸入先后經過卷積層、BN層、ReLU激活函數、MaxPooling層得到了形狀為(64,56,56)的輸出。

Stage 1

在理解了Stage 0以及熟悉圖中各種符號的含義之后,可以很容易地理解Stage 1。理解了Stage 1之后,剩下的3個stage就不用我講啦,你自己就能看懂。

Stage 1的輸入的形狀為(64,56,56),輸出的形狀為(64,56,56)

下面介紹Bottleneck的具體結構(難點),把Bottleneck搞懂后,你就懂Stage 1了。

Bottleneck具體結構

現在讓我們把目光放在本圖最右側,最右側介紹了2種Bottleneck的結構。

“BTNK”是BottleNeck的縮寫(本文自創,請謹慎使用)。

2種Bottleneck分別對應了2種情況:輸入與輸出通道數相同(BTNK2)、輸入與輸出通道數不同(BTNK1),這一點可以結合ResNet原文去看喔。

BTNK2

我們首先來講BTNK2

BTNK2有2個可變的參數CW,即輸入的形狀(C,W,W)中的cW

令形狀為(C,W,W)的輸入為\(x\),令BTNK2左側的3個卷積塊(以及相關BN和RELU)為函數\(F(x)\),兩者相加(\(F(x)+x\))后再經過1個ReLU激活函數,就得到了BTNK2的輸出,該輸出的形狀仍為(C,W,W),即上文所說的BTNK2對應輸入\(x\)與輸出\(F(x)\)通道數相同的情況。

BTNK1

BTNK1有4個可變的參數CWC1S

BTNK2相比,BTNK1多了1個右側的卷積層,令其為函數\(G(x)\)BTNK1對應了輸入\(x\)與輸出\(F(x)\)通道數不同的情況,也正是這個添加的卷積層將\(x\)變為\(G(x)\),起到匹配輸入與輸出維度差異的作用(使得\(G(x)\)\(F(x)\)通道數相同),進而可以進行求和\(F(x)+G(x)\)

簡要分析

可知,ResNet后4個stage中都有BTNK1BTNK2

  • 4個stage中BTNK2參數規律相同

    4個stage中BTNK2的參數全都是1個模式和規律,只是輸入的形狀(C,W,W)不同。

  • Stage 1BTNK1參數的規律與后3個stage不同

    然而,4個stage中BTNK1的參數的模式並非全都一樣。具體來講,后3個stage中BTNK1的參數模式一致,Stage 1BTNK1的模式與后3個stage的不一樣,這表現在以下2個方面:

    1. 參數SBTNK1左右兩個1×1卷積層是否下采樣

      Stage 1中的BTNK1:步長S為1,沒有進行下采樣,輸入尺寸和輸出尺寸相等。

      后3個stage的BTNK1:步長S為2,進行了下采樣,輸入尺寸是輸出尺寸的2倍。

    2. 參數CC1BTNK1左側第一個1×1卷積層是否減少通道數

      Stage 1中的BTNK1:輸入通道數C和左側1×1卷積層通道數C1相等(C=C1=64),即左側1×1卷積層沒有減少通道數。

      后3個stage的BTNK1:輸入通道數C和左側1×1卷積層通道數C1不相等(C=2*C1),左側1×1卷積層有減少通道數。

  • 為什么Stage 1BTNK1參數的規律與后3個stage不同?(個人觀點)

    • 關於BTNK1左右兩個1×1卷積層是否下采樣

      因為Stage 0中剛剛對網絡輸入進行了卷積和最大池化,還沒有進行殘差學習,此時直接下采樣會損失大量信息;而后3個stage直接進行下采樣時,前面的網絡已經進行過殘差學習了,所以可以直接進行下采樣。

    • 關於BTNK1左側第一個1×1卷積層是否減少通道數

      根據ResNet原文可知,Bottleneck左側兩個1×1卷積層的主要作用分別是減少通道數和恢復通道數,這樣就可以使它們中間的3×3卷積層的輸入和輸出的通道數都較小,因此效率更高。

      Stage 1BTNK1的輸入通道數C為64,它本來就比較小,因此沒有必要通過左側第一個1×1卷積層減少通道數。

福利

img

掃碼關注微信公眾號后回復resnet即可直接獲取圖片和PPT源文件的下載鏈接。

參考鏈接

https://www.bilibili.com/read/cv2051292

https://arxiv.org/abs/1512.03385


Github(github.com):@chouxianyu

Github Pages(github.io):@臭咸魚

知乎(zhihu.com):@臭咸魚

博客園(cnblogs.com):@臭咸魚

B站(bilibili.com):@絕版臭咸魚

微信公眾號:@臭咸魚

轉載請注明出處,歡迎討論和交流!



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM