Faster R-CNN 論文學習
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
論文地址:
Reference: https://blog.csdn.net/App_12062011/article/details/67638161.
本論文是R-CNN 目標檢測的第三篇論文,作者包括何凱明,Ross Girshick等大牛,值得一讀。
Faster R-CNN與此前的R-CNN和Fast R-CNN相比較,目標檢測的四個基本步驟(候選區域生成,特徵提取,分類,位置精修)終於被統一到一個深度網路框架之內。所有計算沒有重複,完全在GPU中完成,大大提高了執行速度:
演算法簡介
Faster-RCNN:
(1)輸入測試影象;
(2)將整張圖片輸入CNN,進行特徵提取;
(3)用 RPN(Region Proposal Network) 生成建議視窗(proposals),每張圖片生成300個建議視窗;
(4)把建議視窗對映到CNN的最後一層卷積feature map上;
(5)通過 RoI pooling層使每個RoI生成固定尺寸的feature map;
(6)利用 Softmax Loss(探測分類概率) 和Smooth L1 Loss(探測邊框迴歸)對分類概率和邊框迴歸(Bounding box regression)聯合訓練。
相比 Fast-RCNN,主要兩處不同
(1)使用RPN代替原來的Selective Search方法產生建議視窗;
(2)產生建議視窗的CNN和目標檢測的CNN共享。
改進:
(1) 如何高效快速產生建議框?
Faster R-CNN創造性地採用卷積網路自行產生建議框,並且和目標檢測網路共享卷積網路,使得建議框數目從原有的約2000個減少為300個,且建議框的質量也有本質的提高。
Abstract
目前state of art 的目標檢測網路都依賴於region proposal 演算法來假設物件的位置。SPPnet 和 Fast R-CNN 演算法顯著地降低了這些檢測網路的執行時間,但同時顯示region proposal 的計算是個瓶頸。這篇論文引入了 Region Proposal Network(RPN),它與檢測網路共享全圖卷積特徵,使得region proposal 的計算成本幾乎可忽略不計。RPN 通過訓練生成高質量的 region proposal,供Fast R-CNN 用於檢測。而且作者將 RPN 和Fast R-CNN 融為一個網路,共享卷積特徵,RPN 告訴這個大網路該看向哪裡。對於很深的VGG-16網路,此網路在GPU上的幀速是5fps,其在PASCAL VOC 2007, 2012, 和 MS COCO資料集上只需每張圖片300個 proposal即可達到 state of art 的準確率。
1. Introduction
在不同的proposals 間共享卷積,這點極大地降低了網路計算成本。但是在測試階段,proposals 仍是主流檢測系統速度提升的一大瓶頸。Region proposal (Selective Search) 方法所需的特徵和計算方法都不復雜,但是與檢測網路比,它還是慢了一大截子。
作者觀察到檢測器所用的卷積特徵圖也能被用於生成region proposals. 這篇論文在演算法層面改進了Fast R-CNN,它用深度神經網路來計算 proposal。這樣因為已有的檢測網路, proposal 的計算幾乎是free的。RPN在這裡面與目標檢測網路共享卷積層,這樣計算proposal 的邊際成本就很低了。在這些卷積層上再增加一些額外的卷積層,這些卷積層同時計算迴歸出region 的邊界和分數。
這篇論文引入了“anchor” boxes, 在不同的尺度和高寬比上作為參照。這樣,本模型只用一張單一尺度的圖片即可訓練和測試,因而速度快了許多。
為了整合RPNs 和 Fast R-CNN 目標檢測網路,作者提出了一種新的訓練框架,交替地微調 region proposal 任務和目標檢測任務。這樣,網路不僅收斂的快,而且網路的卷積特徵能被兩個不同的任務共享使用。
2. Related Work
3. Faster R-CNN
Faster R-CNN 由兩個模組組成。第一個模組是深度全卷積網路來提出候選區域,第二個模組是Fast R-CNN 檢測器來使用這些候選區域。RPN 模組告訴Fast R-CNN 應該看哪裡。
3.1 Region Proposal Networks
RPN 的輸入是一張圖片,輸出是一個由矩形目標候選區域組成的集合,每個候選區域都有一個分數。因為作者假定RPN 與Fast R-CNN 應該共享計算過程,這樣兩個網路應共享一組卷積層。
網路的最後一個共享卷積層輸出特徵圖,在這個特徵圖上滑動一個mini 網路來產生候選區域。往這個mini 網路裡輸入一個特徵圖上 的視窗,每個滑動視窗被對映為低維特徵,然後將這個特徵輸入2個sibling 全連線層 — box-regression 層 ( ) 和 box-classification 層 ( ) 。作者使用 在這篇論文裡。注意,mini 網路是以滑動視窗的形式操作,所以全連線層對所有的空間位置是共享的。下圖是mini 網路在單個點的情況:
3.1.1 Anchors
在每個滑動窗位置,同步預測多個候選區域,每個位置的最大候選區域個數用 表示。所以 層有 個輸出,表示 個box 的座標, 層有 個分數,表示是和不是目標類的概率。 個候選區域由 個 來引數表示。 位於滑動視窗的中心位置,都有一個scale尺度和一個aspect ratio高寬比。作者預設用了3種尺度和3種高寬比,所以在每個滑動位置一共有9個 。對於一個 的卷積特徵圖,就一共有 個anchors。所有的anchors都具有尺度不變性。
3.1.2 損失函式
在訓練RPN時,給每個anchor一個二分類的類標籤。給兩類anchor正的標籤:
- anchor與ground-truth box的IoU最高;
- 與任一ground-truth box的IoU高於0.7;
一個ground-truth box可能給多個anchors正的標籤。在有些情況中,第二個條件可能不能被滿足,那就使用第一個條件了。如果一個anchor與ground-truth box的IoU低於0.3,則給它一個負標籤。訓練過程中不考慮既不是正的也不是負的anchor。
損失函式定義如下:
是mini-batch中anchor的索引, 是anchor 預測的概率, 是ground-truth 標籤,如果anchor是正的,就是1,否則是0。 是預測的邊框座標, 是ground-truth box的座標。 是二分類的log loss。對於迴歸損失函式,用 , 是robust loss function。 意味著僅當anchor是正的時候,迴歸損失才被啟用。 與 層的輸出分別包含 和
損失函式被 和 歸一化, 代表了mini-batch的大小, 代表了anchor的個數。 用於平衡前項和後項,預設值是10。
對於bounding box迴歸分析,對4個座標採用如下的引數化處理: