Deep Residual Learning for Image Recognition 笔记
下面轉自博客:http://blog.csdn.net/u014114990/article/details/50505331
今天跑了把googlenet1應用到自己的分類任務中,識別率有大約有0.8%的提高。 看來大網絡還是有用的, 只要你能很好的解決隨著網絡層數增多,容易引起過梯度消失或爆炸等問題。
https://github.com/ShaoqingRen/faster_rcnn/issues/47 這里有關于這個網絡實現的討論
https://github.com/beijbom/beijbom_python_lib/blob/master/beijbom_caffe_tools.py 這個是在caffe上的實現,可以參考一下。
https://github.com/KaimingHe/deep-residual-networks 這是caffe上的實現, 官方caffe已經實現該網絡,只需要利用這里面的配置文件即可。
同時基于keras,torch等庫,都有實現,可以進行嘗試。
http://mp7.watson.ibm.com/ICCV2015/ObjectDetectionICCV2015.html ICCV 2015 Tutorial on Tools for Efficient Object Detection# 全部六位講者的幻燈片已開放:1.導言,R.Feris 2.剛性模板,R.Benenson 3.區塊法,J.Hosang 4.人工特征+CNN特征,XY.Wang 5. CNN法,KM.He 6.R-CNN,R.Girshick
http://research.microsoft.com/en-us/um/people/kahe/ilsvrc15/ilsvrc2015_deep_residual_learning_kaiminghe.pdf 何凱明對這個網絡的PPT講解。
下面轉載于博客http://blog.csdn.net/cv_family_z/article/details/50328175
這是微軟方面的最新研究成果, 在第六屆ImageNet年度圖像識別測試中,微軟研究院的計算機圖像識別系統在幾個類別的測試中獲得第一名。
本文是解決超深度CNN網絡訓練問題,152層及嘗試了1000層。
隨著CNN網絡的發展,尤其的VGG網絡的提出,大家發現網絡的層數是一個關鍵因素,貌似越深的網絡效果越好。但是隨著網絡層數的增加,問題也隨之而來。
首先一個問題是 vanishing/exploding gradients,即梯度的消失或發散。這就導致訓練難以收斂。但是隨著 normalized initialization [23, 9, 37, 13] and intermediate normalization layers[16]的提出,解決了這個問題。
當收斂問題解決后,又一個問題暴露出來:隨著網絡深度的增加,系統精度得到飽和之后,迅速的下滑。讓人意外的是這個性能下降不是過擬合導致的。如文獻 [11, 42]指出,對一個合適深度的模型加入額外的層數導致訓練誤差變大。如下圖所示:
如果我們加入額外的 層只是一個 identity mapping,那么隨著深度的增加,訓練誤差并沒有隨之增加。所以我們認為可能存在另一種構建方法,隨著深度的增加,訓練誤差不會增加,只是我們沒有找到該方法而已。
這里我們提出一個 deep residual learning 框架來解決這種因為深度增加而導致性能下降問題。 假設我們期望的網絡層關系映射為 H(x), 我們讓 the stacked nonlinear layers 擬合另一個映射, F(x):= H(x)-x , 那么原先的映射就是 F(x)+x。 這里我們假設優化殘差映射F(x) 比優化原來的映射 H(x)容易。
F(x)+x 可以通過shortcut connections 來實現,如下圖所示:
2 Related Work
Residual Representations
以前關于殘差表示的文獻表明,問題的重新表示或預處理會簡化問題的優化。 These methods suggest that a good reformulation or preconditioning can simplify the optimization
Shortcut Connections
CNN網絡以前對shortcut connections 也有所應用。
3 Deep Residual Learning
3.1. Residual Learning
這里我們首先求取殘差映射 F(x):= H(x)-x,那么原先的映射就是 F(x)+x。盡管這兩個映射應該都可以近似理論真值映射 the desired functions (as hypothesized),但是它倆的學習難度是不一樣的。
這種改寫啟發于 圖1中性能退化問題違反直覺的現象。正如前言所說,如果增加的層數可以構建為一個 identity mappings,那么增加層數后的網絡訓練誤差應該不會增加,與沒增加之前相比較。性能退化問題暗示多個非線性網絡層用于近似identity mappings 可能有困難。使用殘差學習改寫問題之后,如果identity mappings 是最優的,那么優化問題變得很簡單,直接將多層非線性網絡參數趨0。
實際中,identity mappings 不太可能是最優的,但是上述改寫問題可能能幫助預處理問題。如果最優函數接近identity mappings,那么優化將會變得容易些。 實驗證明該思路是對的。
3.2. Identity Mapping by Shortcuts
圖2為一個模塊。A building block
公式定義如下:
這里假定輸入輸出維數一致,如果不一樣,可以通過 linear projection 轉成一樣的。
3.3. Network Architectures
Plain Network 主要是受 VGG 網絡啟發,主要采用3*3濾波器,遵循兩個設計原則:1)對于相同輸出特征圖尺寸,卷積層有相同個數的濾波器,2)如果特征圖尺寸縮小一半,濾波器個數加倍以保持每個層的計算復雜度。通過步長為2的卷積來進行降采樣。一共34個權重層。
需要指出,我們這個網絡與VGG相比,濾波器要少,復雜度要小。
Residual Network 主要是在 上述的 plain network上加入 shortcut connections
3.4. Implementation
針對 ImageNet網絡的實現,我們遵循【21,41】的實踐,圖像以較小的邊縮放至[256,480],這樣便于 scale augmentation,然后從中隨機裁出 224*224,采用【21,16】文獻的方法。
4 Experiments
下面是大神的筆記,直接轉載到這里方便以后查看:
本文介紹一下2015 ImageNet中分類任務的冠軍——MSRA何凱明團隊的Residual Networks。實際上,MSRA是今年Imagenet的大贏家,不單在分類任務,MSRA還用residual networks贏了 ImageNet的detection, localization, 以及COCO數據集上的detection和segmentation, 那本文就簡單分析下Residual Networks。
目錄
————————————
1. Motivation
2. 網絡結構
3. 實驗結果
4. 重要reference
作者首先拋出了這個問題, 深度神經網絡是不是越深越好。
照我們一般的經驗,只要網絡不訓飛(也就是最早在LSTM中提出的vanishing/exploding problem),而且不過擬合, 那應該是越深越好。
但是有這么個情況,網絡加深了, accuracy卻下降了,稱這種情況為degradation。如下圖所示(詳見[1]):
Cifar-10 上的training/testing error. 網絡從20層加到56層,error卻上升了。
按理說我們有一個shallow net,在不過擬合的情況下再往深加幾層怎么說也不會比shallow的結果差,所以degradation說明不是所有網絡都那么容易優化,這篇文章的motivation就是通過“deep residual network“解決degradation問題。
Shortcut Connections
其實本文想法和Highway networks(Jurgen Schmidhuber的文章)非常相似, 就連要解決的問題(degradation)都一樣。Highway networks一文借用LSTM中gate的概念,除了正常的非線性映射H(x, Wh)外,還設置了一條從x直接到y的通路,以T(x, Wt)作為gate來把握兩者之間的權重,如下公式所示:
y=H(x,WH)?T(x,WT)+x?(1?T(x,WT))
shortcut原意指捷徑,在這里就表示越層連接,就比如上面Highway networks里從x直接到y的連接。其實早在googleNet的inception層中就有這種表示:
Residual Networks一文中,作者將Highway network中的含參加權連接變為固定加權連接,即
y=H(x,WH)?WT+x
Residual Learning
至此,我們一直沒有提及residual networks中residual的含義。那這個“殘差“指什么呢?我們想:
如果能用幾層網絡去逼近一個復雜的非線性映射H(x),那么同樣可以用這幾層網絡去逼近它的residual function:F(x)=H(x)?x,但我們“猜想“優化residual mapping要比直接優化H(x)簡單。
推薦讀者們還是看一下本文最后列出的這篇reference paper,本文中作者說與Highway network相比的優勢在于:
所以說這個比較還是比較牽強。。anyway,人家講個故事也是不容易了。
34層 residual network
網絡構建思路:基本保持各層complexity不變,也就是哪層down-sampling了,就把filter數*2, 網絡太大,此處不貼了,大家看paper去吧, paper中畫了一個34層全卷積網絡, 沒有了后面的幾層fc,難怪說152層的網絡比16-19層VGG的計算量還低。
這里再講下文章中講實現部分的 tricks:
圖片resize:短邊長random.randint(256,480)
裁剪:224*224隨機采樣,含水平翻轉
減均值
標準顏色擴充[2]
conv和activation間加batch normalization[3]
幫助解決vanishing/exploding問題
minibatch-size:256
learning-rate: 初始0.1, error平了lr就除以10
weight decay:0.0001
momentum:0.9
沒用dropout[3]
其實看下來都是挺常規的方法。
34層與18層網絡比較:訓練過程中,
34層plain net(不帶residual function)比18層plain net的error大
34層residual net(不帶residual function)比18層residual net的error小,更比34層plain net小了3.5%(top1)
18層residual net比18層plain net收斂快
Residual function的設置:
A)在H(x)與x維度不同時, 用0充填補足
B) 在H(x)與x維度不同時, 帶WT
C)任何shortcut都帶WT
loss效果: A>B>C
[1]. Highway Networks
[2]. ImageNet Classification with Deep Convolutional Neural Networks
[3]. Batch Normalization
[4]. VGG
總結
以上是生活随笔為你收集整理的Deep Residual Learning for Image Recognition 笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下调试python
- 下一篇: VERY DEEP CONVOLUTIO