深度學習_目標檢測_Faster R-CNN論文詳解

Faster R-CNN論文地址

Faster R-CNN的創新點

  1. 設計Region Proposal Networks【RPN】,利用卷積操作後的特徵圖生成region proposals,代替了Selective Search、EdgeBoxes等方法,速度上提升明顯。
  2. 訓練Region Proposal Networks與檢測網絡【Fast R-CNN】共享卷積層,大幅提高網絡的檢測速度。

促使Faster R-CNN產生的原因

繼Fast R-CNN後,在CPU上實現的區域建議算法Selective Search【2s/image】、EdgeBoxes【0.2s/image】等成了物體檢測速度提升上的最大瓶頸。

Faster R-CNN如何解決問題

測試過程

Faster R-CNN統一的網絡結構如下圖所示,可以簡單看作RPN網絡+Fast R-CNN網絡。

在這裏插入圖片描述

注意:上圖Fast R-CNN中含特有卷積層,博主認爲不是所有卷積層都參與共享。

  1. 首先向CNN網絡【ZF或VGG-16】輸入任意大小圖片;

  2. 經過CNN網絡前向傳播至最後共享的卷積層,一方面得到供RPN網絡輸入的特徵圖,另一方面繼續前向傳播至特有卷積層,產生更高維特徵圖;

  3. 供RPN網絡輸入的特徵圖經過RPN網絡得到區域建議和區域得分,並對區域得分採用非極大值抑制【閾值爲0.7】,輸出其Top-N【文中爲300】得分的區域建議給RoI池化層;

  4. 第2步得到的高維特徵圖和第3步輸出的區域建議同時輸入RoI池化層,提取對應區域建議的特徵;

  5. 第4步得到的區域建議特徵通過全連接層後,輸出該區域的分類得分以及迴歸後的bounding-box。

解釋分析

  1. RPN網絡結構是什麼?實現什麼功能?具體如何實現?
    單個RPN網絡結構如下圖:

在這裏插入圖片描述

注意:上圖中卷積層/全連接層表示卷積層或者全連接層,作者在論文中表示這兩層實際上是全連接層,但是網絡在所有滑窗位置共享全連接層,可以很自然地用n×n卷積核【論文中設計爲3×3】跟隨兩個並行的1×1卷積覈實現,文中這麼解釋的,博主並不是很懂,尷尬。

功能:實現attention機制,如圖所示,RPN在CNN卷積層後增加滑動窗口操作以及兩個卷積層完成區域建議功能,第一個卷積層將特徵圖每個滑窗位置編碼成一個特徵向量,第二個卷積層對應每個滑窗位置輸出k個區域得分和k個迴歸後的區域建議,並對得分區域進行非極大值抑制後輸出得分Top-N【文中爲300】區域,告訴檢測網絡應該注意哪些區域,本質上實現了Selective Search、EdgeBoxes等方法的功能。

具體實現:
①首先套用ImageNet上常用的圖像分類網絡,本文中試驗了兩種網絡:ZF或VGG-16,利用這兩種網絡的部分卷積層產生原始圖像的特徵圖;

② 對於①中特徵圖,用n×n【論文中設計爲3×3,n=3看起來很小,但是要考慮到這是非常高層的feature map,其size本身也沒有多大,因此9個矩形中,每個矩形窗框都是可以感知到很大範圍的】的滑動窗口在特徵圖上滑動掃描【代替了從原始圖滑窗獲取特徵】,每個滑窗位置通過卷積層1映射到一個低維的特徵向量【ZF網絡:256維;VGG-16網絡:512維,低維是相對於特徵圖大小W×H,typically~60×40=2400】後採用ReLU,併爲每個滑窗位置考慮k種【論文中k=9】可能的參考窗口【論文中稱爲anchors,見下解釋】,這就意味着每個滑窗位置會同時預測最多9個區域建議【超出邊界的不考慮】,對於一個W×H的特徵圖,就會產生W×H×k個區域建議;

③步驟②中的低維特徵向量輸入兩個並行連接的卷積層2:reg窗口迴歸層【位置精修】和cls窗口分類層,分別用於迴歸區域建議產生bounding-box【超出圖像邊界的裁剪到圖像邊緣位置】和對區域建議是否爲前景或背景打分,這裏由於每個滑窗位置產生k個區域建議,所以reg層有4k個輸出來編碼【平移縮放參數】k個區域建議的座標,cls層有2k個得分估計k個區域建議爲前景或者背景的概率。

  1. Anchors是什麼?有什麼用?
    Anchors是一組大小固定的參考窗口:三種尺度128225625122×{128^2,256^2,512^2}\times三種長寬比1:11:22:1{1:1,1:2,2:1},如下圖所示,表示RPN網絡中對特徵圖滑窗時每個滑窗位置所對應的原圖區域中9種可能的大小,相當於模板,對任意圖像任意滑窗位置都是這9中模板。繼而根據圖像大小計算滑窗中心點對應原圖區域的中心點,通過中心點和size就可以得到滑窗位置和原圖位置的映射關係,由此原圖位置並根據與Ground Truth重複率貼上正負標籤,讓RPN學習該Anchors是否有物體即可。

在這裏插入圖片描述
作者在文中表示採用Anchors這種方法具有平移不變性,就是說在圖像中平移了物體,窗口建議也會跟着平移。同時這種方式也減少了整個模型的size,輸出層512×(4+2)×9=2.8×104512×(4+2)×9=2.8×10^4個參數【512是前一層特徵維度,(4+2)×9是9個Anchors的前景背景得分和平移縮放參數】,而MultiBox有1536×4+1×800=6.1×1061536×(4+1)×800=6.1×10^6個參數,而較小的參數可以在小數據集上減少過擬合風險。

當然,在RPN網絡中我們只需要找到大致的地方,無論是位置還是尺寸,後面的工作都可以完成,這樣的話採用小網絡進行簡單的學習【估計和猜差不多,反正有50%概率】,還不如用深度網絡【還可以實現卷積共享】,固定尺度變化,固定長寬比變化,固定採樣方式來大致判斷是否是物體以及所對應的位置並降低任務複雜度。

  1. Anchors爲什麼考慮以上三種尺度和長寬比?
    文中對Anchors的尺度以及長寬比選取進行了實驗,如下圖所示:

在這裏插入圖片描述

實驗實在VGG-16模型下,採用PASCAL VOC 2007訓練集和PASCAL VOC 2007測試集得到。相比於只採用單一尺度和長寬比,單尺度多長寬比和多尺度單長寬比都能提升mAP,表明多size的anchors可以提高mAP,作者在這裏選取了最高mAP的3種尺度和3種長寬比。

  1. 如何處理多尺度多長寬比問題?即如何使24×24和1080×720的車輛同時在一個訓練好的網絡中都能正確識別?
    文中展示了兩種解決多尺度多長寬比問題:一種是使用圖像金字塔,對伸縮到不同size的輸入圖像進行特徵提取,雖然有效但是費時;
    另一種是使用濾波器金字塔或者滑動窗口金字塔,對輸入圖像採用不同size的濾波器分別進行卷積操作,這兩種方式都需要枚舉圖像或者濾波器size;
    作者提出了一種叫Anchors金字塔的方法來解決多尺度多長寬比的問題,在RPN網絡中對特徵圖滑窗時,對滑窗位置中心進行多尺度多長寬比的採樣,並對多尺度多長寬比的anchor boxes區域進行迴歸和分類,利用Anchors金字塔就僅僅依賴於單一尺度的圖像和特徵圖和單一大小的卷積核,就可以解決多尺度多長寬比問題,這種對推薦區域採樣的模型不管是速度還是準確率都能取得很好的性能。

  2. 同傳統滑窗方法提取區域建議方法相比,RPN網絡有什麼優勢?
    傳統方法是訓練一個能檢測物體的網絡,然後對整張圖片進行滑窗判斷,由於無法判斷區域建議的尺度和長寬比,所以需要多次縮放,這樣找出一張圖片有物體的區域就會很慢;
    雖然RPN網絡也是用滑動窗口策略,但是滑動窗口是在卷積層特徵圖上進行的,維度較原始圖像降低了很多倍【中間進行了多次max pooling 操作】,RPN採取了9種不同尺度不同長寬比的anchors,同時最後進行了bounding-box迴歸,即使是這9種anchors外的區域也能得到一個跟目標比較接近的區域建議。

Faster R-CNN的訓練過程

  1. RPN網絡預訓練
樣本 來源
正樣本 ILSVRC20XX
負樣本 ILSVRC20XX

樣本中只有類別標籤;
文中一帶而過RPN網絡被ImageNet網絡【ZF或VGG-16】進行了有監督預訓練,利用其訓練好的網絡參數初始化;
用標準差0.01均值爲0的高斯分佈對新增的層隨機初始化。

  1. Fast R-CNN網絡預訓練
樣本 來源
正樣本 ILSVRC20XX
負樣本 ILSVRC20XX

樣本中只有類別標籤;
文中一帶而過Fast R-CNN網絡被ImageNet網絡【ZF或VGG-16】進行了有監督預訓練,利用其訓練好的網絡參數初始化。

  1. RPN網絡微調訓練
RPN網絡樣本 來源
正樣本 與Ground Truth相交IoU最大的anchors【以防後一種方式下沒有正樣本】+與Ground Truth相交IoU>0.7的anchors
負樣本 與Ground Truth相交IoU<0.3的anchors

PASCAL VOC 數據集中既有物體類別標籤,也有物體位置標籤;
正樣本僅表示前景,負樣本僅表示背景;
迴歸操作僅針對正樣本進行;
訓練時棄用所有超出圖像邊界的anchors,否則在訓練過程中會產生較大難以處理的修正誤差項,導致訓練過程無法收斂;
對去掉超出邊界後的anchors集採用非極大值抑制,最終一張圖有2000個anchors用於訓練【詳細見下】;
對於ZF網絡微調所有層,對VGG-16網絡僅微調conv3_1及conv3_1以上的層,以便節省內存。

SGD mini-batch採樣方式:同Fast R-CNN網絡,採取”image-centric”方式採樣,即採用層次採樣,先對圖像取樣,再對anchors取樣,同一圖像的anchors共享計算和內存。每個mini-batch包含從一張圖中隨機提取的256個anchors,正負樣本比例爲1:1【當然可以對一張圖所有anchors進行優化,但由於負樣本過多最終模型會對正樣本預測準確率很低】來計算一個mini-batch的損失函數,如果一張圖中不夠128個正樣本,拿負樣本補湊齊。

訓練超參數選擇:在PASCAL VOC數據集上前60k次迭代學習率爲0.001,後20k次迭代學習率爲0.0001;動量設置爲0.9,權重衰減設置爲0.0005。

一張圖片多任務目標函數【分類損失+迴歸損失】具體如下:

L(pi,ti)=1NclsiLcls(pi,pi)+λ1NregipiLreg(ti,ti)L({p_i},{t_i})=\frac{1}{N_cls}\sum_iL_{cls}(p_i,p_i^*)+\lambda\frac{1}{N_{reg}}\sum_ip_i^*L_{reg}(t_i,t_i^*)

解釋說明:

其中,ii表示一個mini-batch中某個anchor的下標,pip_i表示anchorianchor_i預測爲物體的概率;當anchor爲正樣本時,pi=1p_i^*=1,當anchor爲負樣本時,pi=0p_i^*=0。由此可以看出迴歸損失項僅在anchor爲正樣本情況下才被激活。

tit_i表示正樣本anchor到預測區域的4個平移縮放參數【以anchor爲基準的變換】;tit_i^*表示正樣本anchor到Ground Truth的4個平移縮放參數【以anchor爲基準的變換】。

分類損失函數LclsL_{cls}是一個二值【是物體或者不是物體】分類器,

Lcls(pi,pi)=log[pipi+(1pi)(1pi)];L_{cls}(p_i,p_i^*)=-log[p_i^*p_i+(1-p_i^*)(1-p_i)];

迴歸損失函數Lreg(ti,ti)=R(titi)L_{reg}(t_i,t_i^*)=R(t_i-t_i^*)兩種變換之差越小越好】,R函數定義如下:

smoothL1(x)={0.5x2,ifx<1x0.5,otherwisesmooth_{L1}(x)=\begin{cases}0.5x^2,if|x|<1\\|x|-0.5,otherwise\end{cases}

λ\lambda參數用來權衡分類損失LclsL_{cls}和迴歸損失LregL_{reg},默認值λ=10\lambda=10【文中實驗表明λ\lambda從1變化到100對mAP影響不超過1%】。

NclsN_{cls}NregN_{reg}分別用來標準化分類損失項LclsL_{cls}和迴歸損失項LregL_{reg},默認用mini-batch size=256設置NclsN_{cls},用anchor位置數目~2400初始化NregN_{reg},文中也說明標準化操作並不是必須的,可以簡化省略。

  1. Fast R-CNN網絡微調訓練
Fast R-CNN網絡樣本 來源
正樣本 Ground Truth +與Ground Truth相交IoU>閾值的區域建議
負樣本 與Ground Truth相交IoU<閾值的區域建議

PASCAL VOC 數據集中既有物體類別標籤,也有物體位置標籤;
正樣本表示每類物品的Ground Truth以及與Ground Truth重疊度超過某一閾值的區域建議,負樣本表示同Ground Truth重疊度小於某一閾值的區域建議;
迴歸操作僅針對正樣本進行。

  1. RPN、Fast -CNN網絡聯合訓練

在這裏插入圖片描述

如上圖所示,RPN網絡、Fast R-CNN網絡聯合訓練是爲了讓兩個網絡共享卷積層,降低計算量。
文中通過4步訓練算法,交替優化學習至共享特徵:
① 進行上面RPN網絡預訓練,和以區域建議爲目的的RPN網絡end-to-end微調訓練;
② 進行上面Fast R-CNN網絡預訓練,用第①步中得到的區域建議進行以檢測爲目的的Fast R-CNN網絡end-to-end微調訓練【此時無共享卷積層】;
③ 使用第②步中微調後的Fast R-CNN網絡重新初始化RPN網絡,固定共享卷積層【即設置學習率爲0,不更新】,僅微調RPN網絡獨有的層【此時共享卷積層】;
④ 固定第③步中共享卷積層,利用第③步中得到的區域建議,僅微調Fast R-CNN獨有的層,至此形成統一網絡如上圖所示。

解釋分析

  1. RPN網絡中bounding-box迴歸怎麼理解?同Fast R-CNN中的bounding-box迴歸相比有什麼區別?
    對於bounding-box迴歸,採用以下公式:

在這裏插入圖片描述

其實,x,y,w,hx,y,w,h表示窗口中心座標和窗口的寬度和高度,變量x,xaxx,x_a和x^*分別表示預測窗口、anchor窗口和Ground Truth的座標【ywhy,w,h同理】,因此這可以被認爲是一個從anchor窗口到附近Ground Truth的bounding-box 迴歸;

RPN網絡中bounding-box迴歸的實質其實就是計算出預測窗口。這裏以anchor窗口爲基準,計算Ground Truth對其的平移縮放變化參數,以及預測窗口【可能第一次迭代就是anchor】對其的平移縮放參數,因爲是以anchor窗口爲基準,所以只要使這兩組參數越接近,以此構建目標函數求最小值,那預測窗口就越接近Ground Truth,達到迴歸的目的;

文中提到, Fast R-CNN中基於RoI的bounding-box迴歸所輸入的特徵是在特徵圖上對任意size的RoIs進行Pool操作提取的,所有size RoI共享迴歸參數,而在Faster R-CNN中,用來bounding-box迴歸所輸入的特徵是在特徵圖上相同的空間size【3×3】上提取的,爲了解決不同尺度變化的問題,同時訓練和學習了k個不同的迴歸器,依次對應爲上述9種anchors,這k個迴歸量並不分享權重。因此儘管特徵提取上空間是固定的【3×3】,但由於anchors的設計,仍能夠預測不同size的窗口。

  1. 文中提到了三種共享特徵網絡的訓練方式?
    ① 交替訓練
    訓練RPN,得到的區域建議來訓練Fast R-CNN網絡進行微調;此時網絡用來初始化RPN網絡,迭代此過程【文中所有實驗採用】;

    ② 近似聯合訓練
    如上圖所示,合併兩個網絡進行訓練,前向計算產生的區域建議被固定以訓練Fast R-CNN;反向計算到共享卷積層時RPN網絡損失和Fast R-CNN網絡損失疊加進行優化,但此時把區域建議【Fast R-CNN輸入,需要計算梯度並更新】當成固定值看待,忽視了Fast R-CNN一個輸入:區域建議的導數,則無法更新訓練,所以稱之爲近似聯合訓練。實驗發現,這種方法得到和交替訓練相近的結果,還能減少20%~25%的訓練時間,公開的python代碼中使用這種方法;

    ③ 聯合訓練
    需要RoI池化層對區域建議可微,需要RoI變形層實現,具體請參考這片paper:Instance-aware Semantic Segmentation via Multi-task Network Cascades

  2. 圖像Scale細節問題?
    文中提到訓練和檢測RPN、Fast R-CNN都使用單一尺度,統一縮放圖像短邊至600像素;
    在縮放的圖像上,對於ZF網絡和VGG-16網絡的最後卷積層總共的步長是16像素,因此在縮放前典型的PASCAL圖像上大約是10像素【~500×375;600/16=375/10】。

    網上關於Faster R-CNN中三種尺度這麼解釋:
    原始尺度:原始輸入的大小,不受任何限制,不影響性能;
    歸一化尺度:輸入特徵提取網絡的大小,在測試時設置,源碼中opts.test_scale=600。anchor在這個尺度上設定,這個參數和anchor的相對大小決定了想要檢測的目標範圍;
    網絡輸入尺度:輸入特徵檢測網絡的大小,在訓練時設置,源碼中爲224×224。

  3. 清理文中anchor的數目
    文中提到對於1000×600的一張圖像,大約有20000(~60×40×9)個anchors,忽略超出邊界的anchors剩下6000個anchors,利用非極大值抑制去掉重疊區域,剩2000個區域建議用於訓練;
    測試時在2000個區域建議中選擇Top-N【文中爲300】個區域建議用於Fast R-CNN檢測。

Faster R-CNN結果如何

  1. PASCAL VOC實驗【使用ZF網絡
屬性 數目
目標類別 20
PASCAL VOC 2007訓練集 5k
PASCAL VOC 2007測試集 5k

a.第1組實驗
目的:驗證RPN方法的有效性;
做法:ZF檢測網絡訓練和測試時分別使用Selective Search、EdgeBoxes和RPN+ZF【共享】方法,Selective Search、EdgeBoxes測試時使用2000窗口建議,RPN+ZF測試時採用300窗口建議;
結果:RPN+ZF方法獲得59.9%的mAP,由於卷積層共享並且只有300個候選窗口,RPN+ZF方法檢測速度更快;

b.第2組實驗
目的:驗證RPN和ZF檢測網絡共享卷積層的影響;
做法:在之前所述4步訓練算法進行到第2步後停止;
結果:未實現卷積層共享的RPN+ZF的方法獲得58.7%的mAP,這由於4步訓練算法的第3步使用了微調後檢測器特徵來微調RPN網絡,使得建議窗口質量得到提高;

c.第3組實驗
目的:使用不同RPN候選窗數目下,評估其對檢測網絡mAP的影響;
做法:使用Selective Search方法訓練檢測網絡ZF並固定不變【RPN與ZF沒有共享卷積層】,測試時採用不同RPN候選窗數目進行;
結果:測試時300候選窗RPN獲得56.8%的mAP,這是由於訓練和測試的區域建議方法不一致造成;使用Top-100窗口建議仍然有55.1%的mAP,說明Top-100結果比較準確;未使用非極大值抑制的6000個區域建議全部使用進行檢測獲得55.2%的mAP,說明非極大值抑制並未損壞精度,反而可能減少了誤報;

d.第4組實驗
目的:驗證RPN網絡cls窗口分類層影響;
做法:使用Selective Search方法訓練檢測網絡ZF並固定不變【RPN與ZF沒有共享卷積層】,移除RPN網絡中cls窗口分類層【缺少分數就沒有了非極大值抑制和Top排名】,從未評分的窗口建議中隨機採用N個 ;
結果:N=1000時,mAP爲55.8%影響不大,但N=100時mAP爲44.6%,說明cls窗口分類層的評分準確度高,影響檢測結果精度;

e.第5組實驗
目的:驗證RPN網絡reg窗口迴歸層影響;
做法:使用Selective Search方法訓練檢測網絡ZF並固定不變【RPN與ZF沒有共享卷積層】,移除RPN網絡reg窗口迴歸層【候選區域直接變成沒有迴歸的anchor boxes】;
結果:選擇Top-300進行實驗,mAP掉到了52.1%,說明窗口迴歸提高了區域建議的質量,雖然說anchor boxes能應對不同尺度和寬高比,但是對於精確檢測遠遠不夠;

f.第6組實驗
目的:驗證優質量網絡對RPN產生區域建議的影響;
做法:使用Selective Search方法訓練檢測網絡ZF並固定不變【RPN與ZF沒有共享卷積層】,採用VGG-16網絡訓練RPN提供候選區域;
結果:與第3組實驗測試時300候選窗RPN獲得56.8%的mAP相比,採用VGG-16訓練RPN使得mAP達到59.2%,表明VGG-16+RPN提供區域建議質量更高【不像死板板的Selective Search,RPN可以從更好的網絡中獲利進行變化】,因此RPN和檢測網絡同時採用VGG-16並共享卷積層會如何呢?結果見下。

  1. RPN網絡和檢測網絡同時採用VGG-16並共享卷積層,在PASCAL VOC 2007訓練集上訓練,測試集上獲得69.9%的mAP;在聯合數據集如PASCAL VOC 2007和2012訓練集上訓練RPN網絡和檢測網絡,PASCAL VOC 2007測試集上mAP會更高。

  2. 對於檢測速度而言,採用ZF模型,可以達到17fps;採用VGG-16模型,可以達到5fps,由於卷積共享,RPN網絡僅僅花10ms計算額外的層,而且,由於僅僅選取Top-N【文中爲300】進行檢測,檢測網絡中的非極大值抑制、池化、全連接以及softmax層花費時間是極短的。

  3. 召回率分析。所謂召回率即區域建議網絡找出的爲真的窗口與Ground Truth的比值【IoU大於閾值即爲真】,文中實驗表明Selective Search、EdgeBoxes方法從Top-2000、Top-1000到Top-300的召回率下降明顯,區域建議越少下降越明顯,而RPN網絡召回率下降很少,說明RPN網絡Top-300區域建議已經同Ground Truth相差無己,目的性更明確。

  4. MS COCO實驗【使用VGG-16網絡】

屬性 數目
目標類別 80
Microsoft COCO訓練集 80k
Microsoft COCO驗證集 40k
Microsoft COCO測試集 20k

採用8-GPU並行訓練,則RPN有效mini-batch 爲8張圖,Fast R-CNN有效mini-batch爲16張圖;
RPN和Fast R-CNN以0.003【由0.001改爲0.003,由於有效mini-batch被改變了】的學習率迭代240k次,以0.0003的學習率迭代80k次;
對於anchors,在三種尺度三種長寬比基礎上增加了64^2的尺度,這是爲了處理Microsoft COCO數據集上的小目標【新數據集上不直接套用這一點值得學習】;
增加定義負樣本IoU,重疊閾值由[0.1,0.5) 到[0,0.5),這能提升COOC數據集上mAP;
使用COCO訓練集訓練,COCO測試集上獲得42.1%的mAP @0.5 和21.5%的mAP @[.5,.95]。

  1. 與VGG-16相比,利用ResNet-101網絡,在COCO驗證集上mAP從41.5%/21.2%(@0.5/@[.5,.95])變化到48.4%/27.2%,歸功於RPN網絡可以從更好的特徵提取網絡中學到更好的區域建議。
  2. 由於Microsoft COCO數據集種類包含PASCAL VOC數據集種類,文中在Microsoft COCO數據集上訓練,在PASCAL VOC數據集上測試,驗證大數據量下訓練是否有助於提高mAP?
    採用VGG-16模型,當僅僅利用Microsoft COCO數據集訓練時,PASCAL VOC 2007測試集上mAP達到76.1%【泛化能力強,未過擬合】;當利用Microsoft COCO數據集訓練的模型初始化,PASCAL VOC 2007+2012訓練集進行微調,PASCAL VOC 2007測試集上mAP達到78.8%,此時每一個單體類別的AP較其它樣本訓練的都達到最高,而每張圖測試時間仍然約爲200ms。

Faster R-CNN存在的問題

採用VGG-16模型,可以達到5fps,這個速度並沒有完全達到實時性,還有繼續提升的空間,這將在YOLO模型中得以改進。

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