Faster R-CNN理解

一.簡介

在R-CNN中的roi都是獨自傳入到通過與訓練的CNN的分類器和box-regression中去形成了對應每一個roi都要通過獨自的卷積操做十分耗時,Fast-RCNN解決了沒有共享卷積層的問題,可是他們共同使用的selective search的邊框生成方法過於複雜,成爲了計算時間的一個瓶頸,由於Fast-RCNN在肯定ROI後能夠在GPU上運行,可是selective rearch是不能夠的,它只能在cpu上運行,所以這大大制約了系統的時間提高,那麼做者提出將roi的選擇也置於GPU上就能夠大大加快Fast-Rcnn的預測。所以做者又提出了Faster-RCNN使用RPN的邊框生成算法而完全的拋棄了selective的算法。
所以在這篇文章中做者提出了在特徵圖上對ROI進行選擇,這樣就可使用GPU和共享fast-Rcnn的主要結構,在Fast-RCNN的最後一層特徵圖上咱們構造一個RPN,經過添加一個額外的用來同時進行物體識別和邊框迴歸的卷積層,所以這是一個全鏈接網絡,由於咱們須要進行邊框的迴歸就必須輸出四個偏移量,外加判斷是否爲背景的邊框識別,這都是依靠全鏈接層的將爲操做才能實現的。
同時爲了統一Fast-Rcnn和RPN做者提出了一個訓練方案,使用fine-tuning在訓練區域判斷任務和已肯定區域的Fast-RCNN中進行交替迭代,這個方法的收斂效果很好,而且產生了卷積層共享的統一結構,置於RPN爲什麼要和Fast-Rcnn要在卷積層保持結構的不變性,主要的緣由在於這幅圖算法

clipboard.png
在實現的時候,proposals的生成網絡須要從最後的卷積層中提取一個256d的特徵來肯定原始的ROIs同時判斷值是否爲背景只有在肯定了這兩項後才能送入到Fast-Rcnn中進行boxing-regression和判斷物體的種類。爲了避免從新構建後續的網絡也不必從新構建最後的網絡,共享卷積層是最好的選擇。網絡

二.相關工做

1.proposals生成
2物體檢測的深度網絡
在R-Cnn中我端到端的對物體進行分類來判斷它屬於物體的哪一類或者背景,同時對於每一個類都會生成所對應的邊框迴歸的參數,在判斷好哪一類後就能夠選擇對應的邊框迴歸參數!R-CNN僅僅至關於一種分類器,他的準確率極大的取決於他的邊框區域生成模型,在 OverFeat 方法中,一個全鏈接層被訓練來預測邊框的座標,注意是座標不是迴歸量,而後被送到一層用來檢測類肯定的物體的迴歸。在 MultiBoxs方法中,該鏈接層在肯定原始座標後,它產生的是多種類不肯定的邊框迴歸,也就是說這兩個方法中,第一種是在肯定了類別後使用特定類的參數來進行邊框迴歸的,可是第二種是將邊框迴歸和物體分類獨立起來了,須要產生更多的參數,在做者的模型中採用的是第一種方法函數

三.Faster-Rcnn

clipboard.png
Faster-Rcnn的結構如上,由兩個部分組成,一個是深度全卷積網絡來產生proposals信息,第二個是使用proposals的Fast-Rcnn detector,RPN來告訴Fast-Rcnn須要看那個區域優化

1.Region Proposal Networks(RPN)

RPN網絡將一整幅圖片(大小無所謂)做爲輸入,輸出一些矩形框,且每個都有非背景得分,爲了產生位置區域,咱們在輸出特徵圖的最後一層使用n*n的子框從最後一層的卷積特徵圖上提取特徵,以後將特徵隱射到256d的區域中(個人理解就好在是顏色的三基色同樣,經過映射,就能夠判斷這是背景與否),而後將這256d的數據送入的兩個全連層中分別用來判斷這是否爲背景的(cls)與邊框迴歸(reg)在本文中咱們設置n=3,由於接收域太大了過程以下
clipboard.pngspa

2.Anchors

在窗口滑動的過程當中,咱們同時預測了多個區域 proposals,對於每一個邊框最大可能的形狀有k種,所以CLS有2k個輸出(即該形狀的參考邊框是不是背景),reg有4k個輸出(及對該邊框如何進行迴歸),同一個location的k種proposals咱們稱之爲anchor,而它能夠經過中心點已經縮放度和長寬比來定義,咱們一般使用3種縮放比例和3種長寬比來默認初始化一個anchor,那麼整個特徵圖就有MHK個anchor了設計

3.Translation-Invariant Anchors

若是一個物體被翻轉了,那麼咱們的proposal也應該可以翻轉而且使用相同的函數能夠預測它,這樣翻轉不變性在咱們的anchor中能夠獲得保障對比之下MultiBox方法使用k均值算法來產生800,並不具有翻轉不變性,也就是說在一個objection在翻轉後咱們的方法在相同的參數下都能準確的預測到它的proposal,這就是那4k數量的做用了,若是是在肯定了使用某個類型的anchor就會損失這樣的性質。同時也減小了咱們的輸出的數量也就致使了參數的減小。索引

4.Multi-Scale Anchors as Regression References

對於不一樣大小的圖片輸入狀況,傳統的作法有兩種
1.對圖像進行多尺度的縮放後獨自計算各自的特徵圖,可是這太耗時間了
2.使用不一樣的大小的bounding-boxing來對objection進行判別,而所謂的不一樣大小就是金字塔型的圖片

咱們的anchors的方法就參考了金字塔濾波,爲何要這麼說尼?由於咱們同一個特徵圖區域對應9種proposals,很明顯就是金字塔濾波。正是這種相似於金字塔濾波的設計,咱們可以在沒有添加其餘損失項的狀況下解決不一樣大小的目標問題!ip

5.Loss Function

在訓練RPNs的時候咱們對每一個anchor指定了一個二值標籤,咱們對如下兩種anchor斷定爲正的
1.與 ground-truth box有着最高的iou的那些anchor
2.iou高於0.7的那些anchorit

clipboard.png

那麼咱們的損失函數如上,其中i是mini-batch中第i個索引pi是i個anchor爲物體的機率 p i∗爲正標籤(1)若是該anchor知足上面的條件1,2,後面一項如Fast-Rcnn的定義相同

2.Training RPNs

RPN能夠經過反向傳播或者SGD來進行訓練每一個mini-batch都來源於一幅圖且包含了多個正的和負的案例anchors,優化這樣的loss是可能的,可是這回會出現一個問題,會趨向於將全部的anchors都訓練爲負樣本,所以咱們選擇從一幅圖中選取出256幅anchors其中正負樣本的比例是1:1,若是一幅圖中正樣本的數量少於128,就使用負樣本補上

1.Sharing Features for RPN and Fast R-CNN

到如今爲止咱們已經說明了RPN是產生區域proposals的,當時還未說明如何使用CNN進行識別,對於其中的目標識別咱們採用R-CNN,而且咱們使用共享卷積層的由RPN和F-Rcnn組成的聯合結構,因爲RPN和F-RCNN分開訓練會產生不同的卷積層參數,所以須要一項技術來讓這兩個網絡共享卷積層,而不是獨立的訓練兩個分離的網絡,在這裏咱們有三種訓練方法:
1.交替訓練
咱們首先訓練RPN,而後使用這些proposals來訓練F-RCNN ,以後再使用參數初始化RPN,如此迭代
2.近似聯合訓練

clipboard.png

在SGD的過程當中,在訓練的時候先前向傳播,產生proposals後就認爲proposals是固定的,預訓練好的,接着訓練FRCNN,損失函數是他們共同的損失函數,這種方法同時迭代兩個網絡的參數,做者認爲效果不是很好

四:總結

faster rcnn 在fast rcnn 的基礎上消除了ss的過程,縮短了時間,具體的解釋在後續的代碼部分解釋

相關文章
相關標籤/搜索