譯文:Faster R-CNN
【翻譯】Faster R-CNN: Towards Real-Time Object
Detection with Region Proposal Networks
Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
摘要:
目前最先進的目標檢測網路需要先用區域建議演算法推測目標位置。像SPPnet[7]和Fast R-CNN[5]這些網路已經減少了檢測網路的執行時間,這時計算區域建議就成了瓶頸問題。在我們這個工作中,我們介紹一個RPN網路,這個RPN網路與檢測網路共享全圖卷積特徵,因此這個RPN網路幾乎不需要任何多餘的時間消耗。這個RPN網路是一個全連線卷積網路,它同時預測每一個位置上目標物件的邊界和物件分數。這個RPN網路是可端到端訓練的,它可以產出高質量的區域建議框,產生的這些建議框將用於Fast R-cNN進行目標檢測。我們通過共享卷積特徵,進一步的將RPN網路和Fast R-CNN整合為一個網路(我們使用最近流行的神經網路術語“關注”機制,RPN網路將告訴這個統一的網路去對什麼區域進行檢測判斷)。對於非常深的VGG-16模型[3],我們的檢測系統在GPU上的幀速率為5fps(包括所有步驟),同時在PASCAL VOC 2007,2012上實現了最先進的目標檢測精度, MS COCO資料集,每個影象只有300個提案。在ILSVRC和COCO 2015比賽中,基於更快的R-CNN和RPN,獲得了多個第一名。 程式碼已經公開。
關鍵字:目標檢測,區域建議框,卷積神經網路
1 介紹
目前目標檢測領域的發展由區域建議方法【4】和基於區域的卷積神經網路【5】的成功驅動,儘管最初提出的基於區域的CNN在計算上耗時,他們耗時問題已經通過卷積特徵共享的方法【1】【2】得到了很好的減少。當不考慮區域建議(候選區域獲取)的時間,Fast R-CNN 基於深度網路獲取了幾乎實時的速率。現在建議框的獲取成為好的目標檢測系統的瓶頸。
區域建議方法目前主要基於消耗小的特徵和經濟的獲取方案。SS(選擇性搜尋方法)是眾多流行方法中的一個,貪心地將低階特徵合成超畫素。但是和高效的目標檢測方法【5】相比,SS選擇性搜尋的速度要慢一個數量級,在cpu上,平均一個影象耗時2s。 EdgeBoxes【6】最近在建議框提取的數量和質量之間提供了最佳的折中點,每張影象平均耗時0.2s。 儘管如此,作為檢測網路中一步,區域建議步驟仍然消耗了很多執行時間。
有一點需要注意的是,快速的基於區域的CNN方法利用了GPU的優勢,而採用搜尋策略的區域建議方法則使用的是CPU,因此使得執行時間對比不公平。有一個明顯可以提升獲取區域建議的速度的方法,就是我們重新採用GPU的方法實現區域建議部分,這可能是一個有效的工程解決方案,但是重新實現忽略了檢測網路的下游部分,因此會失去享受共享計算的重要機會。
在這篇文章裡面,我們展示一個基於深度神經網路的區域計算的演算法,這個演算法是一個優雅有效的解決方案,考慮到檢測網路的計算,區域計算幾乎沒有成本。到此,我們介紹有效的RPNs網路,這個網路與檢測網路【1】【2】共享網路卷積層。通過共享測試時的卷積,計算區域的時間很少(例如每張圖象10ms)
我們觀察到用於基於區域檢測器的卷積特徵圖(例如Fast R-CNN)也可以用來生成區域建議框。在這些卷積特徵上面,我們通過增加一些卷積層來構建RPN(構造RPN:第一個層把每個卷積對映位置編碼為一個短的(例如256-d)特徵向量,第二個層在每個卷積對映位置,輸出這個位置上多種尺度和長寬比的k個區域建議的objectness得分和迴歸邊界(k=9是典型值)),這個RPN同時在規則的網格上對每一個點進行邊框迴歸個物件分數計算。這個RPN因此是一種全連線網路【7】,它可以被端到端地訓練,尤其針對於生產檢查區域的任務。
RPNs 被設計用來通過一個寬範圍的縮放比和橫寬比來有效地預測候選區域。和之前的方法【8】【9】【1】【2】對比,之前的方法採用影象金字塔【圖1,a】或者過濾器金字塔【圖1,b】,我們引入了新穎的“錨點”框,用作多種尺度和縱橫比的參考。我們的方案可以被認為是一種迴歸參考的金字塔【圖1,c】,避免了去列舉影象或者濾波器的多尺度或者多種橫寬比。這個模型用在單個尺度的影象上,表現很好,因此有利於執行速度。
為了將RPN與快速R-CNN [2]物體檢測網路統一起來,我們提出了一種訓練方案,它在區域建議任務的微調和微調物體檢測之間交替進行,同時保持建議的固定。這個方案使得網路收斂快速,通過是這兩個任務同時共享卷積特徵,使得生成一個統一的網路。**
我們在PASCAL VOC檢測基準上綜合評估了我們的方法,基於RPNs的Fast R-CNN方法比基於SS的Fast R-CNN得到的檢測準確率更好,同時,我們的方法在幾乎放棄了選擇搜尋在測試是所以的時間效果負擔,對於區域建議的有效執行時間僅僅10ms。使用那個昂貴的深度模型,我們的檢測方法在GPU上仍然有5fps的幀率速度(包括所有步驟)。因此考慮到準確率和速度問題,它是一個很實用的目標檢測方法。我們也在MS COCO等資料庫上進行展示了我們的結果,程式碼在https://github.com/shaoqingren/faster_rcnn上,有matlab和python版本的。
這份手稿的初稿版已經出版過了【10】,自那以後,RPN和Faster R-CNN相結合的框架已經被適用和融合到其他方法中,例如3D目標檢查【13】,基於塊檢測【14】,例項分割【15】,影象標註【16】,我們快速和有效的目標檢測系統也用於廣告系統例如Pinterests【17】,使得使用者報告得到提升。
在ILSVRC and COCO2015競賽中,Faster R-CNN 和RPN是多個專案第一名的基礎,這些專案包括影象的檢測跟蹤,影象定位,coco檢測,coco分割。RPNs 完全從資料中學習如何生產候選區域,因此也很容易受益與更深更貴的特徵(例如101曾的殘差網路)。更快的R-CNN和RPN也被其他幾個主要條目使用比賽。這些結果表明我們的方法不僅效率高適合實際應用,也是個可以提高準確率的高效方法。
2 相關工作
目標建議框:這裡有大量的關於目標建議框獲取方法的文章。目標建議框獲取方法的全面調查和比較可以在【19】【20】【21】裡面找到。廣泛被使用的目標建議框獲取方法包括這些基於組合超畫素(例如選擇性搜尋,CPMC,MCG)和那些基於滑動視窗(例如視窗中的物件【26】和EdgeBox【6】)。目標建議方法被採用作為獨立於探測器的外部模組(例如選擇性搜尋檢測器,R-CNN 和 Fast R-CNN)
深度目標檢測網路:R-CNN 方法訓練CNN 端到端的去將獲得的建議框進行二分類(目標物件或者背景)。R-CNN 主要作為一個分類器,它不能預測物件邊界(除了通過邊界框迴歸進行細化)。 它的準確率依賴於區域建議模組(看對比【20】),幾篇論文已經提出了用深度學習的方法去對目標的邊緣框框進行預測【25】【9】【26】【27】。在OverFeat方法中,針對定位任務(假設認為是單目標),一個全連線層被訓練來預測目標的邊框座標。然後將完全連線的層變成卷積層以檢測多個類別特定的物件。MultiBox 方法從一個網路中生成區域建議框,這個網路的最後一層同時預測多個類間無關的框框,生產“單盒子”版本的OverFeat。這些類間無關的框框被作為R-CNN 的候選區域。這個MultiBox建議網路被應用到單個裁剪的影象或者多個大影象(例如224*224),和我們的全卷積方案相比。MultiBox 沒有對區域建議和檢測網路使用的特徵進行共享。我們將在後面更進一步討論OverFeat and MultiBox。在我麼正在進行這個論文工作同時,DeepMask 方法【28】被提出來學習建議分割。
針對在視覺識別方面速度和準確率方面,卷積計算共享【9,1,29,7,2】已經吸引越來越多的關注,OverFeat【9】基於影象金字塔計算卷積特徵,然後用來進行分類,定位,檢測。用在共享卷積特徵圖層上的自適應大小池化【spp】被設計來提高基於區域的目標檢測速率。Fast R-CNN 使得檢測器可以端到端的在共享特徵上進行訓練並且表現出很好的準確率和速度。
3 Faster R-CNN
我們這個目標檢測系統稱為Faster R-CNN,它由兩個模組組成。第一個模組是用來生成建議區域的深度全卷積網路,第二個模組是Fast R-CNN檢測器【2】,這個檢測器將使用生成的建議框。整個系統是單一,統一的目標檢測系統(圖2所示)。這個RPN使用了類似目前比較流行的注意力機制的神經網路,它告訴Fast R-CNN 模組去檢測哪裡。在3.1 節我們介紹這個區域建議網路的設計和效能。3.2節我們設計一個演算法來通過特徵共享同時訓練兩個模組。
3.1 區域建議網路
RPN 將影象作為輸入(任意大小),然後輸出一組矩形目標區域,每一個區域有一個物件分數。我們用完全卷積網路為這個過程建模,我們將在這個節對它進行描述。因為我們最終的目標是去和Fast R-CNN 目標檢測網路共享計算,我們假設兩個網路共享同一組共同的卷積層。在我們的實驗中,我們調查ZF模型【32】,這個ZF模型有5個可共享的卷積層,另外一個模型就是VGG-16 ,它有13個可共享的卷積層。
為了生成區域建議框,我們能在由最後一個共享卷積網路生成的特徵圖層上滑動一個小網路。這個小網路的輸入是卷積特徵層的n * n的空間大小。每個滑動的視窗被對映到低維特徵(ZF模型為256維,VGG則是512維,後面接著的啟用函式是RElu【33】)。這個特徵被輸入到兩個並列的全連線層,一個是標定框的迴歸層(reg),一個是框框分類層(cls)。我們在這篇文章中使n = 3 ,因此注意此時每個3 *3 的滑動框所對應到原圖上的有效感受野大小分別為171個畫素(ZF模型)和228個畫素(VGG模型)。這個小網路在圖3左邊的一個獨立的位置展示。注意由於這個小視窗以滑動的方式,這個全連線層在整個空間位置共享。這個框架很自然的通過一個n * n 的卷積層實現,後面接著兩個並列的1 * 1 的卷積層(分別是reg和cls)。
3.3.1 錨
在每一個活動視窗經過的位置,我們同時預測多個多個區域建議(候選框),每一個位置可能被預測的區域建議(候選框)的最大個數為k。因此reg層對k個框框有4k個數值去表示對應的座標位置,cls層則相應的輸出2k個分數值,每一個框框對應兩個分數值,分別是他們是物件和不是物件的分數值,這個k個區域建議根據相關的k個框框進行引數化,我們稱這k個框框為錨。錨點位於滑動視窗的中心,還有相關的尺度和橫縱比(圖3,左邊)。預設我們用3個尺度比率和3個橫縱比,因此每一個滑動位置產生k = 9 個錨,一個大小為W * H (典型的2400)的特徵圖,那麼總共有W * H * k 個錨。
平移不變性的錨
我們的方法有一個重要的特點,就是平移不變性,不僅從錨的角度還有根據這個錨計算相應區域建議框的函式。如果平移影象中的一個物件,對應的建議區域也應該平移,相同的函式應該可以在其他位置仍然預測這個建議區域。這個平移不變性特性由我們的方法保證。對比一下,那個MultiBox[27]方法用k-means 方法生產800個錨,但是這些錨不具有平移不變性。所以MultiBox在物件被平移後不能保證相同的建議區域。
這個平移不變性也減少了模型的大小,MultiBox有(4+1)* 800 維全連線輸出層,但是我們的方法只有(4 + 2) * 9 維卷積輸出層(當我們設定k = 9 的情況下)。因此,我們的輸出層有\(2.8 * 10^4\)個引數(如果是VGG模型 引數個數為 512 * (4 + 2)* 9 ),相對於輸出層引數有\(6.1 * 10^6\) 的MultiBox(如果模型為GoogleNet【34】引數個數有1536 *(4 + 1)* 800),我們的方法的引數要少兩個數量級。如果考慮特徵對映層,我們建議層仍然要比MultiBox少一個數量級。我們希望我們的方法在小資料集存在較小的過擬合風險。
多尺度錨點作為迴歸參考
針對解決多尺度(還有橫縱比)問題,我們關於錨的設計呈現了一個新意的方案。如圖1所示,這裡存在兩個流行的方法解決多尺度預測。第一個方法是基於影象或者特徵金字塔,例如在DPM【8】 和 基於CNN方法【9】【1】【2】。影象被調整為多種尺度,特徵圖譜(Hog[8]或者深度卷積特徵【9】【1】【2】)在每一個尺度下都計算一次。這個方法一般情況下很有效,但是受到時間限制。第二個方法則是在特徵圖譜上採用多尺度(或者橫縱比)的視窗進行滑動。例如在DPM【8】中,不同橫縱比的模型採用不同的濾波器大小分開進行訓練【例如5 * 7 和 7 * 5】。如果這個方法被用來解決多尺度問題,它被認為是一種“濾波器金字塔”(圖1(b)所示)。第二個方法則經常被適用於和第一個方法一起聯合使用。
作為對比,我們的基於錨的方法是基於一個錨金字塔,這個錨金字塔更加的高效,我們的方法基於多尺度和多種橫縱比的錨來分類和迴歸邊框。(在特徵圖譜上滑動)。它僅僅依賴於一個尺度的影象和特徵圖譜,然後使用單個尺度的濾波器。我們通過實驗展示這個解決多尺度和多寬縱比的方案的效果(表8所示)。
由於基於錨的多尺度的設計,我們可以方便地使用由單尺度影象獲得的卷積特徵,這種方法也被Fast R-CNN 檢測器使用。這種多尺度錨的設計是是實現特徵共享的關鍵,因為它不需要額外的操作來解決多尺度問題。
3.1.2 損失函式
對於訓練RPNs,我們對每一個錨設計一個二值類別標籤(是物件或者不是物件)。我們對兩種類別的錨標註為正樣本:(i)和真實標籤框具有最高的IoU值得錨,(ii)和真實標籤框的IoU值大於0.7的錨。注意一個真實標籤框可能作為多個錨的正樣本標籤。通常情況下第二個條件能滿足正樣本的需求;但是我們仍然考慮第一種情況,因為存在一定概率情況就是我們採用第二種條件會找不到正樣本。我們也針對非正樣本的錨中當與所有的真實標籤框的IoU值小於0.3時則標註為負標籤。既不是正樣本也不是負樣本的錨則丟棄不參與訓練。
基於這些定義,我們跟Fast R-CNN的多工損失一樣來最小化我們的目標函式。
這裡,i是一個小批次裡面一個錨的下標,\(p_i\)是時第i個錨是物件的預測概率。如果這個錨是正樣本,則這個真實標籤\(p^*_i\)為1,如果這個錨是負樣本,則這個標籤為0。\(t_i\)是一個向量,表示預測框框的的4個座標引數值。\(t^*_i\) 是與正樣本錨相對應的真實標籤。分類損失\(L_cls\) 是兩個類別的對數損失(物件vs非物件),對於迴歸損失,我們用\(L_reg(t_i,t^*_i) = R(t_i - t^*_i)\),這裡的R是強大的損失函式(平滑損失函式\(L_1\)),定義在參考文獻【2】中。\(p^*_iL_reg\)表示迴歸損失只有在正樣本的情況下才被啟用,其他情況下不進行訓練。cls和reg層的輸出分別為\({p_i}和{t_i}\).
那兩個式子分別被\(N_cls\)和\(N_reg\)進行歸一化,然後被y這個平衡引數賦予權重。在我們目前的實現中(釋出的程式碼)公式1中的cls被小批次中樣本的總個數(例如\(N_cls = 256\))進行歸一化,reg項則被錨的位置個數(例如\(N_reg = 2400\))進行歸一化。我們預設設定y = 10,因此cls和reg的權重大致相同。我們通過實驗展示了結果,實驗結果對於y在一定範圍內影響不大,我們也主要到上面的歸一化不是必須的,可以被簡化。
對於邊框迴歸,我們採用以下4個引數【5】:
其中 x,y,w,h分別代表矩形框的中心座標和他的寬,高。變數x,xa 和x*則分別表示預測的矩形框,錨的矩形框,標籤矩形框。(相應的y,w,h同理)。這可以被認為是一個錨矩形框迴歸到一個接近於標籤矩形框的迴歸過程。
儘管如此,我們的方法採用了與之前基於感興趣區域方法【1】【2】不一樣的方式。在【1】【2】中,矩形框迴歸是在池化後的特徵層上進行的,這些池化得到的特徵是基於任意尺度大學的感興趣區域,另外這個迴歸權重被所有區域尺度共享。在我們的公式中,被用於迴歸的特徵是特徵圖譜上相同空間大小的區域(3 * 3)。考慮到變化的尺度,k個邊界框迴歸器被學習。每一個迴歸器代表一個尺度和一個橫縱比,這k個迴歸器不共享權重。因此,它儘管特徵大學是被固定的尺度和縮放比,它仍然可以預測多種尺度大小的框框,這得益於錨的這種設計。
3.3.3 訓練RPNs
這個RPN可以通過反向傳播演算法和SGD[2]進行端到端的訓練,我們依從【2】中“影象為中心”降取樣策略去訓練這個網路。每一個小批次的樣本來自單張影象,這個批次裡面包含許多正樣本和負樣本的錨。它可以針對所有錨的損失函式進行優化,但是這將偏向負樣本因為負樣本佔多數。我們對這個方法進行替代,我們從一張影象中隨機獲取256個錨,其中正負樣本錨的比率為1:1.如果這裡正樣本的錨歌聲達不到128,我們用負樣本補充。
我們基於均值為0,標準方差為0.01 的高斯分佈初始化所有新的網路層。所有其他層(例如共享卷積層)則用imageNet 分類訓練好的模型進行初始化【36】。我們微調ZF 網路的所有層,調整VGG網路以節省記憶體。我們在PASCAL VOC 資料集上用學習率為0.001 來學習前60k批次的樣本,然後用學習率為0.0001 來學習後20k 批次的樣本。我們的衝量值為0.9,衰減值為0.0005【37】,我們採用caffe框架實現。
3.2 RPN與 Fast R-CNN 共享特徵
到目前為止,我們描述了在不考慮基於區域的CNN將會使用這些候選區域的情況下,我們描述瞭如何訓練一個網路。 對於檢測網路,我們採用Fast R-CNN,接下來,我們描述如何訓練基於卷積特徵共享由RPN和Fast R-CNN整合一起的完整網路的演算法。
如何RPN和Fast R-CNN分開單獨的訓練,他們將會用不同的方式修改他們的卷積層。我們因此需要去設計一個技術,允許他們兩個網路之間共享卷積層,而不是需要分開學習。我們討論三種方法來訓練這個特徵共享的網路:
(i)交替訓練:在這個解決方法中,我們先訓練RPN,然後用生成的建議區域去訓練 Fast R-CNN。除錯好的Fast R-CNN 被用來初始化RPN網路,這個過程是交替的。這也是被使用在這篇文章裡面的所有實驗中。
(ii)近似聯合訓練:這個方案中,RPN和Fast R-CNN在訓練中如圖2所示一樣整合到一個網路中。在每一個隨機梯度下降的迭代過程中,前向傳播生成的區域建議被視為當訓練Fast R-CNN時固定,預計算好的區域建議。反向傳播像往常一樣發生,其中對於共享層,來自RPN損失Fast R-CNN損失的反向傳播訊號被合成一起。這個解決方法很好實現。但是這個方法忽略了衍生物。建議框的座標也是網路反應,所有是近似的。在我們的實驗中,我們通過經驗發現這個解決方法生成相似的結果,但是相比迭代的方法減少了25%-50%的訓練時間。這個方法包含在我們釋出的Python程式碼裡面。
(iii)非近似聯合訓練 正如上面討論的一樣,由RPN網路預測得到的邊框也是輸入的函式。Fast R-CNN中的RoI池層[2]接受卷積特徵和預測的邊界框作為輸入,所以理論上有效的反向傳播求解器也應該包含梯度w.r.t. 邊框座標。這些梯度在上面近似聯合訓練中被忽略,在非聯合訓練解決方案中,我們需要一個可區分邊框座標wi.t.的RoI池層。
4步交替訓練
這篇文章中,我們基於交替優化採用實用的4步訓練演算法來學習共享特徵。第一步,我們訓練3.1.3節描述的RPN網路。這個網路採用ImageNet-pre-trained 網路模型初始化,然後端到端的除錯完成區域建議框生產的任務。第二步我們基於第一步RPN生成的建議框,然後採用Fast R-CNN訓練一個分離的檢測網路。這個檢測網路也由ImageNet-pre-trained 網路模型初始化。在這個點,這兩個網路不共享卷積層。第三步,我們用檢測網路去初始化RPN訓練,但是我們固定共享卷積層,並且只調試RPN獨有的層。現在這兩個網路共享卷積層。最後,保持共享卷積層固定,我們微調Fast R-CNN的獨有的層。最後因此兩個網路共享相同的卷積層,形成一個統一的網路。這哥交替的訓練方法可以多次迭代,但我們觀察到可以忽略的改進。
3.3 實現細節
我們訓練、測試區域建議和目標檢測網路都是在單一尺度的影象上[7, 5]。我們縮放影象,讓它們的短邊s=600畫素[5]。多尺度特徵提取可能提高準確率但是不利於速度與準確率之間的權衡[5]。我們也注意到ZF和VGG網路,對縮放後的影象在最後一個卷積層的總步長為16畫素,這樣相當於一個典型的PASCAL影象(~500x375)上大約10個畫素(600/16=375/10)。即使是這樣大的步長也取得了好結果,儘管若步長小點準確率可能得到進一步提高。
對於anchor,我們用3個簡單的尺度,包圍盒面積為128x128,256x256,512x512,和3個簡單的長寬比,1:1,1:2,2:1。這些超引數對於一些特殊的資料集不準確,因此我們在下節提供了實驗分析。正如上面討論的,我們的解決方法不需要影象金字塔或者濾波器金字塔去預測多尺度的區域,這樣節約了可觀的執行時間。圖3(右)顯示了我們的演算法處理多種尺度和長寬比的能力。表1展示了對每一個錨,用ZF模型學習到的平均目標框大小。我們注意到我們的演算法允許預測超過潛在的接受領域。這樣的預測並非不可能 - 如果只有物件的中間部分是可見的,那麼仍然可以大致推斷出物件的範圍。
那些跨域影象編輯的錨邊框需要小心的處理。在訓練中,我們忽略所有跨邊界的錨,這樣他們就對損失不會有貢獻。例如對一個典型的 1000 * 600影象,這裡就會總共產生差不多20000(^ 60 * 40 * 9)個錨。當忽略跨邊界的錨,這裡每張圖就有大約6000個錨訓練。如果不忽略跨邊界的錨,它們會在目標中引入大的,難以糾正的錯誤項,並且訓練不會收斂。然而,在測試中,我們仍然將整個卷積RPN應用到整幅影象上。這將生成跨邊界的建議框,我們會根據影象邊緣進行裁剪,
RPN生成的建議框中存在重合度很高的建議框。為了減少這個冗餘性,我們基於他們Cls分數,採用NMS進行過濾。我們固定IoU的閾值為0.7,這樣每幅影象最終剩下大約2000個建議框。正如我們將要表明的那樣,NMS不會影響這個
最終檢測精度,但大幅降低提案的數量。在NMS之後,我們使用排名前N的提案區域進行檢測。在裡面接下來,我們使用2000個RPN提案對Fast R-CNN進行培訓,但在測試時要評估不同數量的建議框。
測試時間。
4 實驗
5 總結
我們對高效和準確的區域建議的生成提出了區域建議網路(RPN)。通過與其後的檢測網路共享卷積特徵,區域建議的步驟幾乎是無損耗的。我們的方法使一個一致的,基於深度學習的目標檢測系統以5-17 fps的速度執行。學到的RPN也改善了區域建議的質量,進而改善整個目標檢測的準確性。
繼續嘗試翻譯,歡迎指正。