【轉】cs231n學習筆記-CNN-目標檢測、定位、分割

原文連接:http://blog.csdn.net/myarrow/article/details/51878004git

1. 基本概念

    1)CNN:Convolutional Neural Networks github

    2)FC:Fully Connected算法

    3)IoU:Intersection over Union (IoU的值定義:Region Proposal與Ground Truth的窗口的交集比並集的比值,若是IoU低於0.5,那麼至關於目標仍是沒有檢測到)網絡

    4)ICCV:International Conference on Computer Vision架構

    5)R-CNN:Region-based Convolutional Neural Networksapp

    6)AR:Average Recall框架

    7)mAP:mean Average Precisionide

    8)RPN:Region Proposal Networks函數

    9)FAIR:Facebook AI Researchpost

    10)w.r.t.:with respect to

    11)Image Classification(what?):圖像分類

    12)Object Detection(what+where?)、Localization、Segmentation:對角檢測、定位、分割

     

 

2. CNN基本知識

2.1 CNN的卷積流程

   卷積計算過程以下圖所示:

 

 

 

咱們剛纔描述的便是卷積。能夠把卷積想象爲信號處理中的一種奇特乘法。也可將兩個矩陣生成點積想象爲兩個函數。圖像就是底層函數,而過濾器就是在其上「捲過」的函數。

圖像的主要問題在於其高維度,緣由是對高維度的處理時間和運算能力成本很高。卷積網絡就是爲了經過各類方式下降圖像的維度而設計的。過濾器步幅便是減小維度的一種方法,另外一種方法是降採樣。

 

 

2.2 Activations maps的個數與Filter的個數一致

2.3 輸入層與Filter、Padding、Stride、參數和輸出層的關係

1) 參數個數由Filter定義及Filter個數決定,其公式爲:

      The number of parameters = (FxFxD + 1) * K

2)一個Activation Map共享一個Filter及其權重和誤差

3)Activation Map個數與Filter個數相同

2.4 Pooling(池化/降採樣)過程

    1)  Pooling在每一個Activation Map上單獨作,在Pooling以後,Activation Map數量不變

   Pooling層通常用於降維,將一個kxk的區域內取平均或取最大值,做爲這一個小區域內的特徵,傳遞到下一層。傳統的Pooling層是不重疊的,使Pooling層重疊能夠下降錯誤率,並且對防止過擬合有必定的效果。

     

    

    2)Pooling過程描述(Pooling過程不須要參數)

    

2.5 深度革命2015

     

     1)深度革命中遇到的問題:

          隨着CNN網絡的發展,尤爲的VGG網絡的提出,你們發現網絡的層數是一個關鍵因素,貌似越深的網絡效果越好。可是隨着網絡層數的增長,問題也隨之而來。

         (1)第一個問題: vanishing/exploding gradients(即梯度消失或爆炸):這就致使訓練難以收斂。可是隨着 normalized initialization and BN(Batch Normalization)的提出,解決了梯度消失或爆炸問題。
         (2)第二個問題:網絡越深,訓練偏差和測試偏差越大。在收斂問題解決後,又一個問題暴露出來:隨着網絡深度的增長,系統精度獲得飽和以後,迅速的下滑。讓人意外的是這個性能降低不是過擬合致使的。對一個合適深度的模型加入額外的層數致使訓練偏差變大。以下圖所示,可經過Deep Residual Learning 框架來解決這種由於深度增長而致使準確性降低問題。
           

3. 空間定位與檢測

3.1 計算機視覺任務

        

3.2 傳統目標檢測方法

     傳統目標檢測流程:

     1)區域選擇(窮舉策略:採用滑動窗口,且設置不一樣的大小,不一樣的長寬比對圖像進行遍歷,時間複雜度高)

     2)特徵提取(SIFT、HOG等;形態多樣性、光照變化多樣性、背景多樣性使得特徵魯棒性差)

     3)分類器(主要有SVM、Adaboost等)

    傳統目標檢測的主要問題:

     1)基於滑動窗口的區域選擇策略沒有針對性,時間複雜度高,窗口冗餘

     2)手工設計的特徵對於多樣性的變化沒有很好的魯棒性

3.3 基於侯選區域(Region Proposal)的深度學習目標檢測法

3.3.1 R-CNN (CVPR2014, TPAMI2015)

    1)Region Proposal:能夠解決滑動窗口的問題

         候選區域(Region Proposal):是預先找出圖中目標可能出現的位置。它利用了圖像中的紋理、邊緣、顏色等信息,能夠保證在選取較少窗口(幾千甚至幾百)的狀況下保持較高的召回率(Recall)。

         經常使用的Region Proposal有(詳見"What makes for effective detection proposals?"):

           - Selective Search

           - Edge Boxes 

    2)R-CNN:能夠解決特徵魯棒性的問題

   

      參考信息

     (1) 輸入測試圖像
     (2) 利用selective search算法在圖像中從下到上提取2000個左右的Region Proposal
     (3) 將每一個Region Proposal縮放(warp)成227x227的大小並輸入到CNN,將CNN的fc7層的輸出做爲特徵
     (4) 將每一個Region Proposal提取到的CNN特徵輸入到SVM進行分類

     注:1)對每一個Region Proposal縮放到同一尺度是由於CNN全鏈接層輸入須要保證維度固定。

            2)上圖少畫了一個過程——對於SVM分好類的Region Proposal作邊框迴歸(bounding-box regression),邊框迴歸是對region proposal進行糾正的線性迴歸算法,爲了讓region proposal提取到的窗口跟目標真實窗口更吻合。由於region proposal提取到的窗口不可能跟人手工標記那麼準,若是region proposal跟目標位置偏移較大,即使是分類正確了,可是因爲IoU(region proposal與Ground Truth的窗口的交集比並集的比值)低於0.5,那麼至關於目標仍是沒有檢測到。

     3)R-CNN缺點:

         (1) 訓練分爲多個階段,步驟繁瑣: 微調網絡+訓練SVM+訓練邊框迴歸器
         (2) 訓練耗時,佔用磁盤空間大:5000張圖像產生幾百G的特徵文件
         (3) 速度慢: 使用GPU, VGG16模型處理一張圖像須要47s。

         (4) 測試速度慢:每一個候選區域須要運行整個前向CNN計算
         (5) SVM和迴歸是過後操做:在SVM和迴歸過程當中CNN特徵沒有被學習更新
         針對速度慢的這個問題,SPP-NET給出了很好的解決方案。

 3.3.2 SPP-NET (ECCV2014, TPAMI2015)

     SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

     先看一下R-CNN爲何檢測速度這麼慢,一張圖都須要47s!仔細看下R-CNN框架發現,對圖像提完Region Proposal(2000個左右)以後將每一個Proposal當成一張圖像進行後續處理(CNN提特徵+SVM分類),實際上對一張圖像進行了2000次提特徵和分類的過程!這2000個Region Proposal不都是圖像的一部分嗎,那麼咱們徹底能夠對圖像提一次卷積層特徵,而後只須要將Region Proposal在原圖的位置映射到卷積層特徵圖上,這樣對於一張圖像咱們只須要提一次卷積層特徵,而後將每一個Region Proposal的卷積層特徵輸入到全鏈接層作後續操做。(對於CNN來講,大部分運算都耗在卷積操做上,這樣作能夠節省大量時間)。

     如今的問題是每一個Region Proposal的尺度不同,直接這樣輸入全鏈接層確定是不行的,由於全鏈接層輸入必須是固定的長度。SPP-NET剛好能夠解決這個問題。

     

    因爲傳統的CNN限制了輸入必須固定大小(好比AlexNet是224x224),因此在實際使用中每每須要對原圖片進行crop或者warp的操做:
    - crop:截取原圖片的一個固定大小的patch
    - warp:將原圖片的ROI縮放到一個固定大小的patch

   不管是crop仍是warp,都沒法保證在不失真的狀況下將圖片傳入到CNN當中:
   - crop:物體可能會產生截斷,尤爲是長寬比大的圖片。
   - warp:物體被拉伸,失去「原形」,尤爲是長寬比大的圖片

   SPP爲的就是解決上述的問題,作到的效果爲:無論輸入的圖片是什麼尺度,都可以正確的傳入網絡。
   具體思路爲:CNN的卷積層是能夠處理任意尺度的輸入的,只是在全鏈接層處有限制尺度——換句話說,若是找到一個方法,在全鏈接層以前將其輸入限制到等長,那麼就解決了這個問題。

   具體方案以下圖所示:

   

    若是原圖輸入是224x224,對於conv5出來後的輸出,是13x13x256的,能夠理解成有256個這樣的filter,每一個filter對應一張13x13的activation map。若是像上圖那樣將activation map pooling成4x4 2x2 1x1三張子圖,作max pooling後,出來的特徵就是固定長度的(16+4+1)x256那麼多的維度了。若是原圖的輸入不是224x224,出來的特徵依然是(16+4+1)x256;直覺地說,能夠理解成將原來固定大小爲(3x3)窗口的pool5改爲了自適應窗口大小,窗口的大小和activation map成比例,保證了通過pooling後出來的feature的長度是一致的。

    使用SPP-NET相比於R-CNN能夠大大加快目標檢測的速度,可是依然存在着不少問題:
    (1) 訓練分爲多個階段,步驟繁瑣: 微調網絡+訓練SVM+訓練訓練邊框迴歸器
    (2) SPP-NET在微調網絡的時候固定了卷積層,只對全鏈接層進行微調,而對於一個新的任務,有必要對卷積層也進行微調。(分類的模型提取的特徵更注重高層語義,而目標檢測任務除了語義信息還須要目標的位置信息)
    針對這兩個問題,RBG又提出Fast R-CNN, 一個精簡而快速的目標檢測框架。 

3.3.3 Fast R-CNN(ICCV2015)

    有了前邊R-CNN和SPP-NET的介紹,咱們直接看Fast R-CNN的框架圖:

    

    與R-CNN框架圖對比,能夠發現主要有兩處不一樣:一是最後一個卷積層後加了一個ROI pooling layer,二是損失函數使用了多任務損失函數(multi-task loss),將邊框迴歸直接加入到CNN網絡中訓練。

     (1) ROI pooling layer其實是SPP-NET的一個精簡版,SPP-NET對每一個proposal使用了不一樣大小的金字塔映射,而ROI pooling layer只須要下采樣到一個7x7的特徵圖。對於VGG16網絡conv5_3有512個特徵圖,這樣全部region proposal對應了一個7*7*512維度的特徵向量做爲全鏈接層的輸入。

     (2) R-CNN訓練過程分爲了三個階段,而Fast R-CNN直接使用softmax替代SVM分類,同時利用多任務損失函數邊框迴歸也加入到了網絡中,這樣整個的訓練過程是端到端的(除去region proposal提取階段)。

     (3) Fast R-CNN在網絡微調的過程當中,將部分卷積層也進行了微調,取得了更好的檢測效果。

   性能對比數據:

     

   

   1)Fast R-CNN優勢:

         Fast R-CNN融合了R-CNN和SPP-NET的精髓,而且引入多任務損失函數,使整個網絡的訓練和測試變得十分方便。在Pascal VOC2007訓練集上訓練,在VOC2007測試的結果爲66.9%(mAP),若是使用VOC2007+2012訓練集訓練,在VOC2007上測試結果爲70%(數據集的擴充能大幅提升目標檢測性能)。使用VGG16每張圖像總共須要3s左右。
   2)Fast R-CNN 缺點:

        Region Proposal的提取使用selective search,目標檢測時間大多消耗在這上面(提Region Proposal2~3s,而提特徵分類只需0.32s),沒法知足實時應用,並且並無實現真正意義上的端到端訓練測試(region proposal使用selective search先提取處來)。那麼有沒有可能直接使用CNN直接產生Region Proposal並對其分類?Faster R-CNN框架就是符合這樣須要的目標檢測框架。

3.3.4  Faster R-CNN(NIPS2015)

     Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

     在Region Proposal + CNN分類的這種目標檢測框架中,Region Proposal質量好壞直接影響到目標檢測任務的精度。若是找到一種方法只提取幾百個或者更少的高質量的假選窗口,並且召回率很高,這不但能加快目標檢測速度,還能提升目標檢測的性能(假陽例少)。RPN(Region Proposal Networks)網絡應運而生。

    1)RPN的核心思想

    是使用卷積神經網絡直接產生Region Proposal,使用的方法本質上就是滑動窗口。RPN的設計比較巧妙,RPN只需在最後的卷積層上滑動一遍,由於Anchor機制和邊框迴歸能夠獲得多尺度多長寬比的Region Proposal。

    2)Faster R-CNN架構

          

    3)RPN架構

          RPN採用任意大小的的圖像做爲輸入,並輸出一組候選的矩形,每一個矩形都有一個對象分數。

          RPN被用於訓練直接產生候選區域,不須要外部的候選區域。

             

       

       

      

      Anchor是滑動窗口的中心,它與尺度和長寬比相關,默認採3種尺度(128,256,512),3種長寬比(1:1,1:2,2:1),則在每個滑動位置k=9 anchors。

      咱們直接看上邊的RPN網絡結構圖(使用了ZF<Zeiler and Fergus model>模型),給定輸入圖像(假設分辨率爲600*1000),通過卷積操做獲得最後一層的卷積特徵圖(大小約爲40*60)。在這個特徵圖上使用3*3的卷積核(滑動窗口)與特徵圖進行卷積,最後一層卷積層共有256個feature map,那麼這個3*3的區域卷積後能夠得到一個256維的特徵向量,後邊接cls layer(box-classification layer)和reg layer(box-regression layer)分別用於分類和邊框迴歸(跟Fast R-CNN相似,只不過這裏的類別只有目標和背景兩個類別)。3*3滑窗對應的每一個特徵區域同時預測輸入圖像3種尺度(128,256,512),3種長寬比(1:1,1:2,2:1)的region proposal,這種映射的機制稱爲anchor。因此對於這個40*60的feature map,總共有約20000(40*60*9)個anchor,也就是預測20000個region proposal。

      這樣設計的好處是什麼呢?雖然如今也是用的滑動窗口策略,可是:滑動窗口操做是在卷積層特徵圖上進行的,維度較原始圖像下降了16*16倍(中間通過了4次2*2的pooling操做);多尺度採用了9種anchor,對應了三種尺度和三種長寬比,加上後邊接了邊框迴歸,因此即使是這9種anchor外的窗口也能獲得一個跟目標比較接近的region proposal。

      4)總結     
            Faster R-CNN將一直以來分離的region proposal和CNN分類融合到了一塊兒,使用端到端的網絡進行目標檢測,不管在速度上仍是精度上都獲得了不錯的提升。然而Faster R-CNN仍是達不到實時的目標檢測,預先獲取Region Proposal,而後在對每一個Proposal分類計算量仍是比較大。比較幸運的是YOLO這類目標檢測方法的出現讓實時性也變的成爲可能。
           總的來講,從R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走來,基於深度學習目標檢測的流程變得愈來愈精簡,精度愈來愈高,速度也愈來愈快。能夠說基於Region Proposal的R-CNN系列目標檢測方法是當前目標最主要的一個分支。       

3.3.5 R-FCN(2016.5)

     《R-FCN: Object Detection via Region-based Fully Convolutional Networks

      顧名思議:全卷積網絡,就是所有是卷積層,而沒有全鏈接層(fc)。

      R-FCN(基於區域的檢測器)的方法是:在整個圖像上共享計算,經過移除最後的fc層實現(即刪除了全部的子網絡)。使用「位置敏感的得分圖」來解決了圖像分類平移不變性與對象檢測平移變化之間的矛盾。

      此矛盾爲:物體分類要求平移不變性越大越好 (圖像中物體的移動不用區分),而物體檢測要求有平移變化。因此,ImageNet 分類領先的結果證實儘量有平移不變性的全卷積結構更受親睞。另外一方面,物體檢測任務須要一些平移變化的定位表示。好比,物體的平移應該使網絡產生響應,這些響應對描述候選框覆蓋真實物體的好壞是有意義的。咱們假設圖像分類網絡的卷積層越深,則該網絡對平移越不敏感。

      CNN隨着網絡深度的增長,網絡對於位置(Position)的敏感度愈來愈低,也就是所謂的translation-invariance,可是在Detection的時候,須要對位置信息有很強的的敏感度。

      那麼ResNet-101的detection是怎麼作的?

      在R-FCN以前,很簡單,把ROI-pooling層放到了前面的卷積層,而後後面的卷積層不共享計算,這樣一能夠避免過多的信息損失,二能夠用後來的卷積層學習位置信息。

      R-FCN:採用全卷積網絡結構做爲 FCN,爲給 FCN 引入平移變化,用專門的卷積層構建位置敏感分數地圖 (position-sensitive score maps)。每一個空間敏感地圖編碼感興趣區域的相對空間位置信息。 在FCN上面增長1個位置敏感 RoI 池化層來監管這些分數地圖。

      R-FCN思路就是利用最後一層網絡經過FCN構成一個position-sensitive的feature map。具體而言,每個proposal的位置信息都須要編碼,那麼先把proposal分紅k*k個grid,而後對每個grid進行編碼。在最後一層map以後,再使用卷積計算產生一個k*k*(C+1)的map(k*k表明總共的grid數目,C表明class num,+1表明加入一個背景類)。

      

      

       RPN 給出感興趣區域,R-FCN 對該感興趣區域分類。R-FCN 在與 RPN 共享的卷積層後多加1個卷積層。因此,R-FCN 與 RPN 同樣,輸入爲整幅圖像。但 R-FCN 最後1個卷積層的輸出從整幅圖像的卷積響應圖像中分割出感興趣區域的卷積響應圖像。

      R-FCN 最後1個卷積層在整幅圖像上爲每類生成k*k個位置敏感分數圖,有C類物體外加1個背景,所以有k*k(C+1)個通道的輸出層。k*k個分數圖對應描述位置的空間網格。好比,k×k=3×3,則9個分數圖編碼單個物體類的 {top−left,top−center,top−right,...,bottom−right}。

     R-FCN 最後用位置敏感 RoI 池化層,給每一個 RoI 1個分數。選擇性池化圖解:看上圖的橙色響應圖像 (top−left),摳出橙色方塊 RoI,池化橙色方塊 RoI 獲得橙色小方塊 (分數);其它顏色的響應圖像同理。對全部顏色的小方塊投票 (或池化) 獲得1類的響應結果。

     

      產生完了這張map以後,再根據proposal產生一個長寬各爲k,channel數目爲C+1的score map。具體產生score map的方法是,假如k=3,C=20,那麼score map的20個類每一個類都有3*3的feature,一共9個格子,每個格子都記錄了空間信息。而這每個類的每個格子都對應前面那個channel數爲3*3*21的大map的其中一個channel的map。如今把score map中的格子對應的區域的map中的信息取平均,而後這個平均值就是score map格子中的值。最後把score map的值進行vote(avg pooling)來造成一個21維的向量來作分類便可。

       

      當分類正確時,該類通道的位置敏感分數圖 (中間) 的大多數橙色實線網格內的響應在整個 RoI 位置範圍內最強。

      對應的bbox regression只須要把C+1設成4就能夠了。
      R-FCN採用的一些方法比Faster R-CNN的baseline提升了3個點,而且比原來Faster R-CNN更快(由於所有計算都共享了)。可是和改進過的Faster R-CNN相比(ROI Pooling提早那種)提升了0.2個點,速度快了2.5倍。因此目前爲止這個方法的結果應該是全部方法中速度和Performance結合的最好的。

3.4 基於迴歸方法的深度學習目標檢測算法

      Faster R-CNN的方法目前是主流的目標檢測方法,可是速度上並不能知足實時的要求。YOLO一類的方法慢慢顯現出其重要性,這類方法使用了迴歸的思想,即給定輸入圖像,直接在圖像的多個位置上回歸出這個位置的目標邊框以及目標類別。

3.4.1 YOLO (CVPR2016, oral)

      YOLO:You Only Look Once: Unified, Real-Time Object Detection
                
    咱們直接看上面YOLO的目標檢測的流程圖:
    (1) 給個一個輸入圖像,首先將圖像劃分紅7*7(設S=7)的網格
    (2) 對於每一個網格,咱們都預測2個邊框(包括每一個邊框是目標的置信度以及每一個邊框區域在多個類別上的機率)
    (3) 根據上一步能夠預測出7*7*2個目標窗口,而後根據閾值去除可能性比較低的目標窗口,最後NMS去除冗餘窗口便可。
    能夠看到整個過程很是簡單,不須要中間的Region Proposal在找目標,直接回歸便完成了位置和類別的斷定。
    
     那麼如何才能作到直接在不一樣位置的網格上回歸出目標的位置和類別信息呢?上面是YOLO的網絡結構圖,前邊的網絡結構跟GoogLeNet的模型比較相似,主要的是最後兩層的結構,卷積層以後接了一個4096維的全鏈接層,而後後邊又全鏈接到一個7*7*30維的張量上。實際上這7*7就是劃分的網格數,如今要在每一個網格上預測目標兩個可能的位置以及這個位置的目標置信度和類別,也就是每一個網格預測兩個目標,每一個目標的信息有4維座標信息(中心點座標+長寬),1個是目標的置信度,還有類別數20(VOC上20個類別),總共就是(4+1)*2+20 = 30維的向量。這樣能夠利用前邊4096維的全圖特徵直接在每一個網格上回歸出目標檢測須要的信息(邊框信息加類別)。
   
    總結:
    YOLO將目標檢測任務轉換成一個迴歸問題,大大加快了檢測的速度,使得YOLO能夠每秒處理45張圖像。並且因爲每一個網絡預測目標窗口時使用的是全圖信息,使得false positive比例大幅下降(充分的上下文信息)。可是YOLO也存在問題:沒有了Region Proposal機制,只使用7*7的網格迴歸會使得目標不能很是精準的定位,這也致使了YOLO的檢測精度並非很高。
    

3.4.2 SSD(單次檢測)

     SSD: Single Shot MultiBox Detector
     上面分析了YOLO存在的問題,使用整圖特徵在7*7的粗糙網格內迴歸對目標的定位並非很精準。那是否是能夠結合Region Proposal的思想實現精準一些的定位?SSD結合YOLO的迴歸思想以及Faster R-CNN的anchor機制作到了這點。
     
     上圖是SSD的一個框架圖,首先SSD獲取目標位置和類別的方法跟YOLO同樣,都是使用迴歸,可是YOLO預測某個位置使用的是全圖的特徵,SSD預測某個位置使用的是這個位置周圍的特徵(感受更合理一些)。那麼如何創建某個位置和其特徵的對應關係呢?可能你已經想到了,使用Faster R-CNN的anchor機制。如SSD的框架圖所示,假如某一層特徵圖(圖b)大小是8*8,那麼就使用3*3的滑窗提取每一個位置的特徵,而後這個特徵迴歸獲得目標的座標信息和類別信息(圖c)。
    不一樣於Faster R-CNN,這個anchor是在多個feature map上,這樣能夠利用多層的特徵而且天然的達到多尺度(不一樣層的feature map 3*3滑窗感覺野不一樣)。
 
    小結:
          SSD結合了YOLO中的迴歸思想和Faster R-CNN中的anchor機制,使用全圖各個位置的多尺度區域特徵進行迴歸,既保持了YOLO速度快的特性,也保證了窗口預測的跟Faster R-CNN同樣比較精準。SSD在VOC2007上mAP能夠達到72.1%,速度在GPU上達到58幀每秒。
    

    總結:YOLO的提出給目標檢測一個新的思路,SSD的性能則讓咱們看到了目標檢測在實際應用中真正的可能性。
 

3.5 基於殘差(Residual)方法的深度學習目標檢測算法

3.5.1 深度殘差網絡(Deep Residual Networks)

        Deep Residual Networks  
 
      它使用 殘差學習的這一思想使得學習更深的網絡成爲可能,從而學習到更好的表達。
 
      層數越多的神經網絡越難以訓練。當層數超過必定數量後,傳統的深度網絡就會因優化問題而出現欠擬合(underfitting)的狀況。殘差學習框架大幅下降訓練更深層網絡的難度,也使準確率獲得顯著提高。在 ImageNet 和 COCO 2015 競賽中,共有 152 層的深度殘差網絡 ResNet 在圖像分類、目標檢測和語義分割各個分項都取得最好成績,相關論文更是連續兩次得到 CVPR 最佳論文。
     最新研究發現,當殘差網絡將身份映射做爲 skip connection 並實現 inter-block activation,正向和反向信號可以直接從一個區塊傳播到另外一個區塊,這樣就達到了 1001 層的殘差網絡。因而可知,神經網絡的深度這一很是重要的因素,還有很大的提高空間。
     
      1)深度譜
          
    2)爲使用網絡層數更多,一般採用的方法有:初始化算法,BN方法
    3)是否簡單堆疊的網絡層數越多,訓練偏差和測試偏差就越小?答案正好相反
    4)目前流行的深度神經網絡結構大體能夠分爲三類:
           - 直線型(如AlexNet, VGGNet)
           - 局部雙分支型(ResNet)
           - 局部多分支型(GoogleNet)    
          好久之前人們就已經認識到更深的網絡可以產生更好的數據表達,可是如何訓練一個很深的網絡卻一直是一個困擾人們的問題,這主要是因爲梯度消失或爆炸以及尺度不均勻的初始化形成的。圍繞這一問題,人們提出了ReLU、Xavier、pReLU、batch normalization和path-SGD等一系列方法,可是本文做者卻發現即便有這些方法,神經網絡的訓練仍然呈現了degradation的現象。所謂degradation現象,就是隨着網絡深度的增長,網絡的性能反而降低,並且這種性能的降低並非由前面所說的問題形成的。
         
    4)深度殘差學習(Deep Residual Learning)的思想
         假如目前有一個能夠工做的很好的網絡A,這時來了一個比它更深的網絡B,只須要讓B的前一部分與A徹底相同,後一部分只實現一個恆等映射(identity mapping),這樣B最起碼能得到與A相同的性能,而不至於更差。深度殘差學習的思想也由此而產生,既然B後面的部分完成的是恆等映射,何不在訓練網絡的時候加上這一先驗(在網絡訓練過程當中,加入先驗信息指導很是重要,合理的先驗每每會取得很是好的效果),因而構造網絡的時候加入了捷徑(shortcut)鏈接,即每層的輸出不是傳統神經網絡中的輸入的映射,而是輸入的映射和輸入的疊加,以下圖中的"Residual net"所示。
         
         在Residual net中:
          (1)identity:爲恆等映射,此條路徑一直存在
          (2)F(x):爲須要學習的殘差函數(residual function):H(x)-x = F(x)  
                   問題的從新表示或預處理會簡化問題的優化!
         假設咱們指望的網絡層關係映射爲 H(x), 咱們讓 the stacked nonlinear layers 擬合另外一個映射, F(x):= H(x)-x , 那麼原先的映射就是 F(x)+x。 這裏咱們假設優化殘差映射F(x) 比優化原來的映射 H(x)容易。
 
        這裏咱們首先求取殘差映射 F(x):= H(x)-x,那麼原先的映射就是 F(x)+x。儘管這兩個映射應該均可以近似理論真值映射 the desired functions (as hypothesized),可是它倆的學習難度是不同的。
        
        這種改寫啓發於"網絡層數越多,訓練和測試偏差越大"性能退化問題違反直覺的現象。若是增長的層數能夠構建爲一個恆等映射(identity mappings),那麼增長層數後的網絡訓練偏差應該不會增長,與沒增長以前相比較。性能退化問題暗示多個非線性網絡層用於近似identity mappings 可能有困難。使用殘差學習改寫問題以後,若是identity mappings 是最優的,那麼優化問題變得很簡單,直接將多層非線性網絡參數趨0。
       
       實際中,identity mappings 不太多是最優的,可是上述改寫問題可能幫助預處理問題。若是最優函數接近identity mappings,那麼優化將會變得容易些。 實驗證實該思路是對的。

       F(x)+x 能夠經過shortcut connections 來實現,以下圖所示: 
       
       上圖中的shortcut connections執行一個簡單的恆等映射;既沒有參數,也沒有計算複雜度。
        公式分析以下:
         (1)須要學習的殘差映射
                
          (2)x和F的維數必須相同
                 若是x和F的維數不相同,則對x進行線性投影(linear projection)使用其與F的維數一致,公式以下:
                           
       5)網絡架構
       5.1)普通網絡(Plain Network)
                設計原則:
                 (1)對於輸出特徵圖大小相同的層,它們的卷積擁有相同的filter個數
                 (2)若是輸出的特徵圖大小減半,則filter個數乘以2,以確保每層的時間複雜度相同
                          
       5.2)殘併網絡(Residual Network)      
               在遵循普通網絡設計原則的基礎上,增長了shortcut connections。
               
        6)恆等映射的重要性
       6.1)平滑的正向傳播
               
             任意xl被直接正向傳播到xL,xL是xl與殘差相加的結果。
            
        6.2)平滑的反向傳播      
             
        7)保持最短路徑儘可能平滑
       
       - 若是h(x)不是identity mapping,它將阻塞正向、反向傳播,從而致使偏差增長
         
      - BN可能阻塞傳播
        
     - ReLU可能阻塞傳播
       
               
        
 
 

3.5 提升目標檢測方法

    R-CNN系列目標檢測框架和YOLO目標檢測框架給了咱們進行目標檢測的兩個基本框架。除此以外,研究人員基於這些框架從其餘方面入手提出了一系列提升目標檢測性能的方法。
 
     (1) 難分樣本挖掘(hard negative mining)
    R-CNN在訓練SVM分類器時使用了難分樣本挖掘的思想,但Fast R-CNN和Faster R-CNN因爲使用端到端的訓練策略並無使用難分樣本挖掘(只是設置了正負樣本的比例並隨機抽取)。CVPR2016的Training Region-based Object Detectors with Online Hard Example Mining(oral)將難分樣本挖掘(hard example mining)機制嵌入到SGD算法中,使得Fast R-CNN在訓練的過程當中根據region proposal的損失自動選取合適的Region Proposal做爲正負例訓練。實驗結果代表使用OHEM(Online Hard Example Mining)機制可使得Fast R-CNN算法在VOC2007和VOC2012上mAP提升 4%左右。

     (2) 多層特徵融合
    Fast R-CNN和Faster R-CNN都是利用了最後卷積層的特徵進行目標檢測,而因爲高層的卷積層特徵已經損失了不少細節信息(pooling操做),因此在定位時不是很精準。HyperNet等一些方法則利用了CNN的多層特徵融合進行目標檢測,這不只利用了高層特徵的語義信息,還考慮了低層特徵的細節紋理信息,使得目標檢測定位更精準。

     (3) 使用上下文信息
    在提取Region Proposal特徵進行目標檢測時,結合Region Proposal上下文信息,檢測效果每每會更好一些。(Object detection via a multi-region & semantic segmentation-aware CNN model以及Inside-Outside Net等論文中都使用了上下文信息)

3.6 總結

      Localization:
      - Find a fixed number of objects (one or many)
      - L2 regression from CNN features to box coordinates
      - Much simpler than detection; consider it for your projects!
      - Overfeat: Regression + efficient sliding window with FC -> conv conversion
      - Deeper networks do better


      Object Detection:
      - Find a variable number of objects by classifying image regions
      - Before CNNs: dense multiscale sliding window (HoG, DPM)
      - Avoid dense sliding window with region proposals
      - R-CNN: Selective Search + CNN classification / regression
      - Fast R-CNN: Swap order of convolutions and region extraction
      - Faster R-CNN: Compute region proposals within the network
      - Deeper networks do better

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Implementation as Matrix Multiplication. Note that the convolution operation essentially performs 

相關文章
相關標籤/搜索