天天看點

Faster RCNN算法詳解 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

本文僅供個人學習使用,如有侵權立刻删除; 原文連結傳送:http://blog.csdn.net/u014696921/article/details/53767153 自2015以來,人工智能在計算機視覺領域(人臉識别\物體分類\圖檔描述)已經超越人類的識别正确率和速度,而關于速度的提升,不得不提RGB的開山之作(Faster-RCNN)   .        先來個概述:Faster-RCNN通過交叉訓練方式,共享 卷積特征,進而大幅縮減了訓練參數(原文描述為RPN cost-free)------ 除了CNN網絡架構本身具有的權值共享,在RGB的論文裡我們再次感受到共享思想的偉大:通過交替訓練兩個類型的網絡達到(cost-free)!         當然,從實驗資料來看:也取得了近乎real-time的性能,真是“Deep learning 搞定一切vision task”.另外, 我也基于該技術做了一個實時場景分析和描述的人工智能系統:先進行場景中各類物體的識别(Faster-RCNN),再使用自然語言描述(LSTM),(即具備感覺(識别物體)和認知能力(學習如何去表達)). 點選打開連結    效果如論文所述"waives nearly all computational burdens of Selective Search at test-time—the effective running time for proposals is just 10 milliseconds."           

INTRODUCTION

          首先,論文回顧Fast-RCNN:與典型的RCNN不同的是,典型的RCNN使用Selective Search;而Fast-RCNN使用EdgeBoxes。直接取得性能上的優勢,論文給出的資料是,Selective Search:2 seconds per image,而使用EdgeBoxes是0.2 seconds per image,也就是Fast-RCNN提高了十倍的速度.

          然後, 論文指出Faster-RCNN( 可以看做是對 Fast-RCNN 的再次改進版):主要解決的是如何在RPN網絡中快速獲得 proposal, 作者在他的論文中提出,卷積後的特征圖其實是可以用來生成 region proposals ! 是以,作者通過增加兩個獨立\平行的全連接配接層來實作 Region Proposal Networks (RPN) , 一個用來以回歸方式生成推薦區域(region bounds),另一個則是objectness score。

          接着,作者強調:為了面對平移(縮放)不變性,經典做法有:對輸入圖檔或者卷積網絡裡的濾波器進行整體尺度\矩形長寬比例的采樣;而作者的做法是:對推薦區域(novel “anchor” boxes)進行尺度\矩形比例的采樣.結果是,對推薦區域采樣的模型,不管是速度還是準确率都取得很好的性能.

          最後,為了将fully-convolutional network (FCN)的RPN  與  Fast-RCNN 相結合,作者給出了一種簡單的訓練方法:固定 proposals數目, 為訓練RPN和Fast-RCNN, 這兩個訓練的task交替微調網絡 ,交替過程實作卷積特征共享----注意這裡就是大招!!!是以不需要重複的卷積計算, 共享卷積特征也讓兩個網絡快速地收斂,是以,大幅地提高了網絡的訓練和測試(應用)速度------這就是Faster-RCNN的優勢所在, 一種優雅并且高效的方案.

Region Proposal Networks

          RPN的目的是實作"attention"機制,告訴後續的扮演檢測\識别\分類角色的Fast-RCNN應該注意哪些區域,它從任意尺寸的圖檔中得到一系列的帶有 objectness score 的 object proposals。具體流程是:使用一個小的網絡在已經進行通過卷積計算得到的feature map上進行滑動掃描,這個小的網絡每次在一個feature map上的一個視窗進行滑動(這個視窗大小為n*n----在這裡,再次看到神經網絡中用于縮減網絡訓練參數的局部感覺政策receptive field,通常n=228在VGG-16,而作者論文使用n=3),滑動操作後映射到一個低維向量(例如256D或512D,這裡說256或512是低維,有些同學發郵件問我:n=3,n*n=9,為什麼256是低維呢?那麼解釋一下:低維相對不是指視窗大小,視窗是用來滑動的!256相對的是a convolutional feature map of a size W × H (typically ∼2,400),而2400這個特征數很大,是以說256是低維.另外需要明白的是:這裡的256維裡的每一個數都是一個Anchor(由2400的特征數滑動後操作後,再進行壓縮))最後将這個低維向量送入到兩個獨立\平行的全連接配接層:box回歸層(a box-regression layer (reg))和box分類層(a box-classification layer (cls))。如下圖所示:
Faster RCNN算法詳解 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

Translation-Invariant Anchors

       在計算機視覺中的一個挑戰就是平移不變性:比如人臉識别任務中,小的人臉(24*24的分辨率)和大的人臉(1080*720)如何在同一個訓練好權值的網絡中都能正确識别. 傳統有兩種主流的解決方式,第一:對圖像或feature map層進行尺度\寬高的采樣;第二,對濾波器進行尺度\寬高的采樣(或可以認為是滑動視窗). 但作者的解決該問題的具體實作是:通過卷積核中心(用來生成推薦視窗的Anchor)進行尺度、寬高比的采樣。如上圖右邊,文中使用了3 scales and 3 aspect ratios (1:1,1:2,2:1), 就産生了 k = 9 anchors at each sliding position. 

A Loss Function for Learning Region Proposals

         anchors(卷積核的中心)分為兩類:與ground-truth box 有較高的 IoU 或 與任意一個 ground-truth box 的 IoU 大于0.7 的 anchor 都标為 positive label; 與所有 ground-truth box 的IoU 都小于0.3的 anchor 都标為 negative label。其餘非正非負的都被丢掉。 

對于每一個 anchor box 

i

, 其 loss function 定義為: 

         L(pi,ti)=Lcls(pi,p?i)+λp?iLreg(ti,t?i)  

其中, pi  是預測其是一個 object 的 probability ,當其label 為 positive 時, p?i  為1,否則為0。  ti={tx,ty,tw,th}  是預測的 bounding box, t?i  是與這個 anchor 相對應的 ground-truth box 。 classification loss  Lcls  是一個二分類(是或者不是object)的 softmax loss 。regression loss  Lreg(ti,t?i)=R(ti?t?i) ,  R  是 Fast R-CNN 中定義的 robust loss function (smooth-L1) , p?iLreg  表示隻針對 positive anchors ( p?i  = 1). 這裡還有一個平衡因子  λ  , 文中設為10,表示更傾向于box location。

Optimization

           使用 back-propagation(反向傳播) and stochastic gradient descent (随機梯度) 對這個RPN進行訓練,每張圖檔随機采樣了256個 anchors , 這裡作者認為如果使用所有的anchors來訓練的話,this will bias towards negative samples as they are dominate。是以這裡作者将采樣的正負positive and negative anchors have a ratio of 1:1. 新增的兩層使用高斯來初始化,其餘使用 ImageNet 的 model 初始化。

Sharing Convolutional Features for Region Proposal and Object Detection

通過交替優化來學習共享的特征,共四個步驟:
  • 1. 用 ImageNet 的 model 初始化一個RPN,然後針對 region proposal task 進行微調。
  • 2. 利用第一步得到的 proposals 作為Fast-RCNN 的輸入,來訓練這個承擔detection任務的network.注意: 到這裡兩個網絡還是分開的,沒有 share conv layers 。
  • 3. 利用第二部訓練好的Fast-RCNN來初始化 RPN , 繼續訓練RPN,這裡訓練的時候固定 conv layers ,隻微調僅屬于RPN 那一部分的網絡層。
  • 4. 再固定 conv layers ,隻微調僅屬于 Fast-RCNN 的fc 層。
  • 第4步結束後,我們已經共享了卷積層,接下來我們就可以進行交替訓練(1-4).很好了解吧.

Implementation Details

            每個 anchor , 使用 3 scales with box areas of  1282 ,  2562 , and  5122  pixels, and 3 aspect ratios of 1:1, 1:2, and 2:1. 忽略了所有的 cross-boundary anchors 。在 proposal regions 上根據 cls scores 進行了 nonmaximum suppression (NMS) 。

Experiments

          作者文中讨論的各種政策和參數進行各個資料集的實驗和對應的資料結果.

Conclusion

           縱觀全文,詳述了如何使用 Region Proposal Networks (RPN) 來生成 region proposals(通過卷積核中心(用來生成推薦視窗的Anchor)尺度和比例采樣實作平移不變性) ,然後使用Fast-RCNN進行物體檢測, 接着使用交替訓練進而共享特征(也就是減少了網絡參有數)----再次強調大招在這裡!!!, 最終region proposal step is nearly cost-free,也就是近乎實時的性能.

         總結: 另CNN在人工智能領域脫穎而出的是許多精妙的思想,受生物視覺所啟發的局部感覺政策,基于統計特性的權值共享,利用特征聚合的池化……這些tricks優化performance的同時,也以指數級遞減了計算的複雜度,再者為架構并行和資料切分訓練提供了可能。而作者通過交替訓練方式進一步把參數共享的思想, 推到目前學術水準的極緻.

本文是繼RCNN[1],fast RCNN[2]之後,目标檢測界的領軍人物Ross Girshick團隊在2015年的又一力作。簡單網絡目标檢測速度達到17fps,在PASCAL VOC上準确率為59.9%;複雜網絡達到5fps,準确率78.8%。

作者在github上給出了基于matlab和python的源碼。對Region CNN算法不了解的同學,請先參看這兩篇文章:《RCNN算法詳解》,《fast RCNN算法詳解》。

思想

從RCNN到fast RCNN,再到本文的faster RCNN,目标檢測的四個基本步驟(候選區域生成,特征提取,分類,位置精修)終于被統一到一個深度網絡架構之内。所有計算沒有重複,完全在GPU中完成,大大提高了運作速度。 

Faster RCNN算法詳解 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

faster RCNN可以簡單地看做“區域生成網絡+fast RCNN“的系統,用區域生成網絡代替fast RCNN中的Selective Search方法。本篇論文着重解決了這個系統中的三個問題: 

1. 如何設計區域生成網絡 

2. 如何訓練區域生成網絡 

3. 如何讓區域生成網絡和fast RCNN網絡共享特征提取網絡

區域生成網絡:結構

基本設想是:在提取好的特征圖上,對所有可能的候選框進行判别。由于後續還有位置精修步驟,是以候選框實際比較稀疏。 

Faster RCNN算法詳解 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

特征提取

原始特征提取(上圖灰色方框)包含若幹層conv+relu,直接套用ImageNet上常見的分類網絡即可。本文試驗了兩種網絡:5層的ZF[3],16層的VGG-16[4],具體結構不再贅述。 

額外添加一個conv+relu層,輸出51*39*256維特征(feature)。

候選區域(anchor)

特征可以看做一個尺度51*39的256通道圖像,對于該圖像的每一個位置,考慮9個可能的候選視窗:三種面積 {1282,2562,5122}× 三種比例 {1:1,1:2,2:1} 。這些候選視窗稱為anchors。下圖示出51*39個anchor中心,以及9種anchor示例。 

Faster RCNN算法詳解 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

在整個faster RCNN算法中,有三種尺度。 

原圖尺度:原始輸入的大小。不受任何限制,不影響性能。 

歸一化尺度:輸入特征提取網絡的大小,在測試時設定,源碼中opts.test_scale=600。anchor在這個尺度上設定。這個參數和anchor的相對大小決定了想要檢測的目标範圍。 

網絡輸入尺度:輸入特征檢測網絡的大小,在訓練時設定,源碼中為224*224。

視窗分類和位置精修

分類層(cls_score)輸出每一個位置上,9個anchor屬于前景和背景的機率;視窗回歸層(bbox_pred)輸出每一個位置上,9個anchor對應視窗應該平移縮放的參數。 

對于每一個位置來說,分類層從256維特征中輸出屬于前景和背景的機率;視窗回歸層從256維特征中輸出4個平移縮放參數。

就局部來說,這兩層是全連接配接網絡;就全局來說,由于網絡在所有位置(共51*39個)的參數相同,是以實際用尺寸為1×1的卷積網絡實作。

需要注意的是:并沒有顯式地提取任何候選視窗,完全使用網絡自身完成判斷和修正。

區域生成網絡:訓練

樣本

考察訓練集中的每張圖像: 

a. 對每個标定的真值候選區域,與其重疊比例最大的anchor記為前景樣本 

b. 對a)剩餘的anchor,如果其與某個标定重疊比例大于0.7,記為前景樣本;如果其與任意一個标定的重疊比例都小于0.3,記為背景樣本 

c. 對a),b)剩餘的anchor,棄去不用。 

d. 跨越圖像邊界的anchor棄去不用

代價函數

同時最小化兩種代價: 

a. 分類誤差 

b. 前景樣本的視窗位置偏差 

具體參看fast RCNN中的“分類與位置調整”段落。

超參數

原始特征提取網絡使用ImageNet的分類樣本初始化,其餘新增層随機初始化。 

每個mini-batch包含從一張圖像中提取的256個anchor,前景背景樣本1:1. 

前60K疊代,學習率0.001,後20K疊代,學習率0.0001。 

momentum設定為0.9,weight decay設定為0.0005。[5]

共享特征

區域生成網絡(RPN)和fast RCNN都需要一個原始特征提取網絡(下圖灰色方框)。這個網絡使用ImageNet的分類庫得到初始參數 W0 ,但要如何精調參數,使其同時滿足兩方的需求呢?本文講解了三種方法。 

Faster RCNN算法詳解 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

輪流訓練

a. 從 W0 開始,訓練RPN。用RPN提取訓練集上的候選區域 

b. 從 W0 開始,用候選區域訓練Fast RCNN,參數記為 W1  

c. 從 W1 開始,訓練RPN… 

具體操作時,僅執行兩次疊代,并在訓練時當機了部分層。論文中的實驗使用此方法。 

如Ross Girshick在ICCV 15年的講座Training R-CNNs of various velocities中所述,采用此方法沒有什麼根本原因,主要是因為”實作問題,以及截稿日期“。

近似聯合訓練

直接在上圖結構上訓練。在backward計算梯度時,把提取的ROI區域當做固定值看待;在backward更新參數時,來自RPN和來自Fast RCNN的增量合并輸入原始特征提取層。 

此方法和前方法效果類似,但能将訓練時間減少20%-25%。公布的python代碼中包含此方法。

聯合訓練

直接在上圖結構上訓練。但在backward計算梯度時,要考慮ROI區域的變化的影響。推導超出本文範疇,請參看15年NIP論文[6]。

實驗

除了開篇提到的基本性能外,還有一些值得注意的結論

  • 與Selective Search方法(黑)相比,當每張圖生成的候選區域從2000減少到300時,本文RPN方法(紅藍)的召回率下降不大。說明RPN方法的目的性更明确。 
    Faster RCNN算法詳解 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗
  • 使用更大的Microsoft COCO庫[7]訓練,直接在PASCAL VOC上測試,準确率提升6%。說明faster RCNN遷移性良好,沒有over fitting。 
    Faster RCNN算法詳解 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗
  1. Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2014. ↩
  2. Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015. ↩
  3. M. D. Zeiler and R. Fergus, “Visualizing and understanding convolutional neural networks,” in European Conference on Computer Vision (ECCV), 2014. ↩
  4. K. Simonyan and A. Zisserman, “Very deep convolutional networks for large-scale image recognition,” in International Conference on Learning Representations (ICLR), 2015. ↩
  5. learning rate-控制增量和梯度之間的關系;momentum-保持前次疊代的增量;weight decay-每次疊代縮小參數,相當于正則化。 ↩
  6. Jaderberg et al. “Spatial Transformer Networks” 

    NIPS 2015 ↩

  7. 30萬+圖像,80類檢測庫。參看http://mscoco.org/。 ↩

繼續閱讀