【論文閱讀】ResnetV1:Deep Residual Learning for Image Recognition

論文名稱:Deep Residual Learning for Image Recognition
作者:Kaiming He \ Xiangyu Zhang\ Shaoqing Ren\ Jian Sun
論文地址:http://openaccess.thecvf.com/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf
發表年份:CVPR 2016

Deep Residual Learning for Image Recognition發表在CVPR2016,當年的best paper,其殘差思想一度統治視覺識別領域,把神經網絡的有效深度擴展了一個數量級,基於Resnet的視覺模型一舉拿下當年幾乎所有的視覺識別類冠軍!

1 動機

對於傳統深度神經網絡來說,隨着網絡的加深,訓練難度會越來越大,性能也不會持續上升,而是呈現飽和狀態,並且再加深會出現性能下降的情況,也就是所謂的模型退化問題(degradation problem)。如下圖所示,在經歷同樣的訓練過程後,20層明顯優於56層的網絡性能。

在這裏插入圖片描述

2 貢獻

  • 本文作者提出一種新的學習框架,這種框架中,網絡每一個Block(可以包含多個層)學習的實際上是本層輸入與輸出的差值,所以稱爲殘差學習(Residual learning)。
  • 提出“瓶頸”塊(“bottleneck” )
  • 由Residual learning和“bottleneck”構建出__Resnet__
  • Resnet 能簡單有效的解決退化問題(degradation problem),實現 網絡性能與其深度滿足正相關關係 的目的。
  • Resnet 易於收斂,且推廣性極強,甚至可直接用於傳統深度神經網絡(如Inception等)

3 方法

3.1 Residual learning

在這裏插入圖片描述
通過在一個淺層網絡的基礎上疊加y=x (稱作identity mapping,恆等映射)的層,可以讓網絡隨深度增加而不退化,卻也永遠無法超越一開始的淺層網絡,這說明多層非線性網絡無法逼近恆等映射網絡或者說現有的訓練手段直接用在多層恆等映射上是有問題的。
然而我們增加了計算量,想要的是更好的性能。相比於原來的簡單堆疊網絡層以及剛纔的恆等映射,我們需要的是更好的映射,不僅可以保證模型不退化,而且可以提升性能。
在這裏插入圖片描述
作者提出了自己的見解,假設,我們期望的映射是H(x),但是網絡層能完成的映射是F(x),那麼就通過恆等映射y=x給網絡層加把勁,即H(x)=F(x)+x。作者把F(x)=H(x)-x稱爲殘差映射,認爲相比於直接讓網絡完成H(x),殘差映射F(x)更容易學習。比如,在一個極端情況下,H(x)趨近於x,那麼讓F(x)=0比讓傳統的F(x)=x要簡單的多,後者要做更精細的權重調節。

作者通過添加一個shortcut connection實現上述殘差映射,公式如下:
在這裏插入圖片描述
公式(1)的+是對應元素的相加,這就要求F和x的維度是完全相同的,然而在某些情況下,F和x的維度可能會有偏差,針對這種情況,作者又提出了公式(2),取名projection shortcuts
在這裏插入圖片描述

3.2 網絡架構

針對ImageNet
在這裏插入圖片描述

Figure 3.左圖VGG19,中圖堆疊式網絡,右圖Resnet34


在這裏插入圖片描述

Figure 4.Resnet針對ImageNet數據集的若干網絡結構

這裏注意,Fig3&Fig4中每一個conv都代表着conv+bn+relu

Bottleneck building block

在這裏插入圖片描述

Figure 5.左圖普通殘差塊,右圖bottleneck

作者巧妙地利用conv1x1隨意更改通道數的特點提出了`bottleneck building block`,替代原來的 `residual learning building block`。在提升速度的情況下,提升了網絡性能!!! 在“bottleneck”中先用conv1x1降低通道數,然後conv3x3正常卷積,然後利用conv1x1提升通道數。圖5中所示的左右結構的時間複雜度是接近的,並且右邊略小於左邊! 另外,如果使用“bottleneck”結構,那麼“shortcut”應該使用公式(1)實現,因爲公式(2)會導致模型體積翻倍。 Fig4中的Resnet50就是通過“bottleneck”替換的方式從Resnet34演變而來的。

3.3 實現細節

本文針對ImageNet的實現同AlexNet和VGG使用採取同樣的措施。

數據增強

  • 在保持圖片寬高比的前提下把圖片短的一個邊縮放到[256,480] ,稱爲尺度增強;
  • 在上一步基礎上水平翻轉圖像;
  • 在上一步生成的圖像上隨機裁剪出224x224的圖像塊;
  • 每個圖像減掉ImageNet中圖像的平均值,以減少訓練時的計算量,同時還有助於提升模型性能;
  • 使用標準顏色增強
    • 在整個ImageNet上做圖像RGB通道上的PCA
    • 對訓練集的每張RGB圖片都加上下面的一個值,其中pλ是PCA中3x3的協方差矩陣的特徵向量和特徵值,α是從一個均值爲0標準差爲0.1的高斯分佈中提取出的隨機向量。
    • Alexnet中提到,使用這種顏色增強後是最終分類誤差降低1%
      在這裏插入圖片描述

訓練參數

  • 權重初始化使用Delving Deep into Rectifiers中提出的初始化方法(其中的n代表輸入的數量,比如y=w’x,其中x是h-w-c那麼n=h*w*c),從0開始訓練
    在這裏插入圖片描述
  • 優化器:SGD(Stochastic Gradient Descent,隨機梯度下降)
    • 學習率 初始0.1,當train loss恆定時減小到原來的1/10
    • 權重衰減因子1e-4
    • 動量 0.9
  • 迭代次數60w次
  • 使用BN,不使用Dropout

測試方法

  • 標準10-crop testing
    • 截取原圖四個角和中心的224x224的圖像,得到5張子圖
    • 把原圖水平翻轉之後,做同樣的操作,又得到5張子圖
    • 一共裁剪得到5+5=10張子圖,這就是10-crop
    • 分別對10張子圖做預測,最終結果取平均值

4 實驗

4.1 驗證residual learning

使用同樣的訓練方法,分別對plain-18,plain-34,resnet-18,resnet34進行訓練。

在這裏插入圖片描述
Fig4的結果表明,在傳統網絡上引入殘差塊可以實現 網絡深度與性能正相關 的目的,在18和34層的這個數量級上解決了模型退化問題(degradation problem)。

Table2中,縱向看是直接證明了Fig4中的現象,橫向看,同樣深度情況下,Resnet的性能更優,並且層數越深,Resnet的優勢越明顯。

4.2 驗證projection shortcuts

在整個網絡上,對於residual mapping的實現有以下三種配置:

  • A:統統使用公式(1),F(x)與x維度有偏差的地方直接補0
  • B:維度相同情況下使用公式(1),有偏差的地方使用公式(2) projection shortcuts
  • C:統統使用公式(2)
    在這裏插入圖片描述
    結果表明,B配置要明顯優於A配置,C配置稍微優於B配置,但是B相對於A僅僅增加了極少量的參數和計算量,但是C相對B模型參數和計算量會增加太多,所以權衡性能與計算量,B是最佳實現方式!

4.3 驗證 Bottleneck

在這裏插入圖片描述
注:Resnet50使用配置B
結果證明,Bottleneck對網絡性能提升較大!而且前提是Bottleneck已經提升了網絡的計算速度!

4.4 resnet VS other-net

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
其中Table5是ImageNet官方公佈的測試效果,說服力更強。

上述網絡結構和實驗都是針對ImageNet數據集的!


4.5 針對CIFAR-10數據集的實驗細節

網絡結構

在這裏插入圖片描述

實現細節

  • 訓練參數
    -batch size 128
    -學習率初始0.1,迭代32k(epoch≈10)和48k(epoch≈15)後各自縮減10倍,64k(epoch≈20)後結束訓練。
    -其餘參數與ImageNet相同
  • 數據增強
    • 對32x32的原圖的每個邊補上4個像素,然後再裁剪出來32x32的子圖

結果

在這裏插入圖片描述
Fig6的左圖和中圖與Fig4所示現象相同。右圖裏的Resnet-1202的訓練方式與Resnet-101等一致,也很容易收斂,最終也達到了比較好的測試效果,更進一步說明了殘差塊可以有效解決模型退化問題(degradation problem)。
但是同時可以發現,Resnet-1202的測試效果並不如Resnet-101,作者猜是因爲過擬合(overfitting),可以使用Dropout/Maxout解決,先擱置,以後再研究(we will study in the future)。

在這裏插入圖片描述

在這裏插入圖片描述

4.6 Resnet用於目標檢測

使用Resnet-101替換掉Faster RCNN裏的VGG-16,網絡結構示意圖如下:
在這裏插入圖片描述
細節

  • Resnet是在ImageNet上預訓練過的
  • 使用conv5_x代替原來Faster中的fc層,它的結果直接輸入到“cls”/“bbox regression”分支。
  • 訓練檢測器時,Resnet中的BN層不再參與學習,使用預訓練時得到的平均值和方差。
  • 其他超參數的設置與原Faster中一致。
    在這裏插入圖片描述

5 思考

1.殘差塊推導時,我們想要的映射是H(x),而作者給出的一種實現方式是通過F(x)+x實現,並且推導時假定這樣是有效的,然後通過實驗驗證,這樣確實有效。既然可以通過F(x)+x逼近H(x),那麼是否存在其他方式更好的逼近H(x)呢?
2.文中Fig7從上圖到下圖是如何產生的,Fig7中這種比對意義是什麼?
3.文中Fig3中的FLOPs是如何計算的?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章