【目標檢測算法系列】4、Faster R-CNN算法

前面咱們學習了
算法

【目標檢測算法系列】1、R-CNN算法網絡

【目標檢測算法系列】2、SPP-Net算法.架構

【目標檢測算法系列】3、Fast R-CNN算法機器學習

此次,咱們緊接着,繼續看下 Faster R-CNN。
函數

上次咱們講到Fast R-CNN時,說過Fast R-CNN雖然已經對以前的R-CNN系列算法作了不少改進,不論是速度仍是精度,都獲得了一個很大的提高,可是還有一個能夠優化的地方就是最開始時候的,候選框的提取算法。不論是R-CNN, SPP-Net, Fast R-CNN,都是依靠區域選擇算法來進行推測目標位置,可是這種方案很耗時。而Faster R-CNN的提出,終於解決了這個瓶頸問題,Faster R-CNN使用了一種新的區域提出網絡(RPN),該網絡將與檢測網絡共享整個圖像的卷積特徵,從而大大減小了候選框提取的時間成本,同時使Faster R-CNN成爲一個真正意義上的端到端的網絡模型。下面咱們來具體看看post

1、Faster R-CNN總體架構

Faster R-CNN總體架構如上圖所示,它由兩個模塊組成,負責進行候選框提取的RPN網絡模塊,以及使用提取出來的候選框進行檢測的Fast R-CNN檢測模塊。具體來說這兩個模塊的關係,就是RPN告訴Fast R-CNN要看哪裏。兩個模塊共享卷積特徵,整個Faster R-CNN系統,就是一個統一的目標檢測網絡模型。學習

2、區域提案網絡(RPN)詳解

Faster R-CNN模型,最主要的就是RPN網絡的提出,下來咱們具體看下。優化

1.RPN網絡概況

RPN是一個全卷積網絡,它將經過基礎網絡(VGG等)的對應共享卷積模塊提取出來的feature map 做爲輸入,最終輸出提案框(候選框)的集合,每一個提案框中有對應類別信息(背景或者前景)以及對應框的座標信息。3d

在RPN網絡中,在輸入的feature map上,滑動一個n*n(通常使用3*3)的小網絡窗口,每個滑動窗口將會映射到一個低維向量上(對於ZF是256-d,對於VGG來講就是521-d),將這個向量輸出給兩個同級的全鏈接層,即檢測框迴歸層(reg)和檢測框分類層(cls)。如圖所示:cdn

(注:上面說過,RPN網絡是一個全卷積網絡,爲什麼這塊又會出現全鏈接層呢?其實這個是針對單個滑動窗口來講,結合到一塊,總體針對整個輸入的feature map,就是先進行3*3的卷積,而後再跟上兩個同級的1*1的卷積filter進行分類和迴歸,以下圖所示:)


2.anchor boxs

爲了解決各個待檢測對象大小不定的問題,RPN中引入了anchor boxs。

爲了檢測不一樣大小的對象,在上述每個滑動窗口的位置,以滑動窗口的中心爲中心點,咱們同時預測k個anchor ,anchor 通常採用三種面積尺寸(128^2,256^2,512^2)以及每一個尺寸下的三種長寬比(1:1,1:2,2:1),因此針對每一個滑動窗口,須要使用k=9個anchor.以下圖:

由於在RPN網絡中,最終輸入與輸出的長寬尺寸是不變的,改變的只是channel通道數,因此,針對於的feature map,總共須要個anchor,最終RPN網絡的分類層輸出爲:,迴歸層輸出爲:

(由於RPN只進行前景和背景的粗分類,全部對於feaure map中的每一個位置,輸出爲2k個值,每一個anchor須要經過4個值來定位,因此每一個位置對應的迴歸層輸出個數爲4k)

3.anchor的具體提取

雖然anchors是基於共享卷積層後feature map來定義的,可是最終的anchors是創建在原始圖片上的。

因此,咱們是基於原圖來生成anchors的,以前在說Fast R-CNN中的ROIpooling層咱們說過,由於提取feature map的卷積模塊,只有卷積層和pooling層,因此feature map的尺寸與原圖的尺寸是成比例映射關係的,若是圖片尺寸 w*h,特徵圖的尺寸則是w/r * h/r 若是在卷積特徵圖空間位置定義 anchor,則最終的圖片會是由 r 像素劃分的 anchors 集. (VGG 中, r=16)。另外,對於那些跨越圖像邊界的anchor,咱們直接忽略掉。

4.RPN網絡具體訓練過程

首先,RPN網絡的輸入即爲共享卷積模塊提取出來的feature map。在訓練時,須要將全部的anchor分爲正樣本(前景)和負樣本(背景)。

其中正樣本包含如下兩類anchor:

  1. 與ground-truth(真實檢測框)IOU最高的anchor

  2. 與任意ground-truth(真實檢測框)的IOU大於0.7的anchor

能夠看到,一個ground-truth可能對應多個anchor。

而對於與全部的ground-truth的IOU都小於0.3的anchor,咱們分配到負樣本。對於剩餘的那些非正非負的anchor,咱們將其丟棄,不進行訓練。

對於一張圖片的全部正負樣本的anchor,並不會都用來訓練,而是隨機在一張圖片中採樣256個anchor做爲一個mini-batch,計算mini-batch的損失函數,其中採樣的正負anchor的比例最可能是1:1。若是一個圖像中的正樣本數小於128,咱們就用負樣本填補這個mini-batch。(若是採用全部的anchor的話,預測結果會偏向於負樣本,由於負樣本是佔大多數的)。

RPN網絡中的損失函數,與Fast R-CNN中的基本保持一致,以下所示:

相關參數表明含義以下:

其中爲第i個anchor預測爲前景的機率,當第i個anchor爲正樣本時,,當第i個anchor爲負樣本時,,因而可知,只有在正樣本時,纔會去關係後面的迴歸檢測。即爲一個mini-batch

爲第i個anchor(正樣本)到預測區域的對應4個平移縮放參數,爲第i個anchor(正樣本)到ground-truth(真實檢測框)的對應4個平移縮放參數。

即爲一個mini-batch。

下面具體看下

對於分類損失函數,由於RPN中的分類是一個二值分類器,因此

迴歸損失函數爲(兩種變換之差最小化):

其中,

最後,參數用來權衡分類和迴歸損失,默認值爲=10

至此,經過RPN網絡獲得了對應提案框以及每一個提案框的得分,並對得分使用NMS(非極大值抑制),閾值爲0.7,獲得得分靠前的TOP-N(論文中爲300個)個提案框提供給後續的ROI池化層。

3、ROI池化層

Faster R-CNN中的ROI池化層和Fast R-CNN中的是同樣的。對於前面的共享卷積層所提取出來的feature map,既會提供給RPN網絡進行提案框的提取,也會提供給ROI池化層。

對於ROI池化層來講,對於輸入的feature map,會根據RPN網絡最終所提供出來的提案框,來找到對應提案框在feature map上的映射,也就是對應ROI(候選框所對應的feature map)。正如以前全部,RPN告訴Fast R-CNN要看哪裏。而後後續,就和Fast R-CNN徹底同樣,將輸入的不一樣ROI(候選框所對應的feature map)劃分爲H*W個塊,而後在每一個塊中使用最大池化層提取出一個特徵,對應池化操做獨立於每一個feature map通道,最終輸出H*W*c(c爲通道數)的特徵。將輸入的特徵轉換爲特徵向量餵給後面的全鏈接層。(對於使用的VGG16爲基礎模型來講,這塊H*W爲7*7)。

4、最終的分類和迴歸

講過ROI池化層,提取出固定長度的特徵向量,進行後續的全鏈接層、分類,迴歸,和Fast R-CNN中徹底同樣,這塊再也不贅述。

5、Faster R-CNN完整訓練流程

經過上面的說明,咱們知道了,Faster R-CNN是將通過共享卷積模塊提取出來的feature map經過RPN網絡來進行候選框的提取,同時進行粗分類和粗迴歸,而後再通過ROI池化層來提取出固定的特徵向量,送入全鏈接層中,進行最終的精確分類與迴歸。

完整訓練流程以下:

1. 先使用ImageNet數據集訓練一個CNN網絡(這塊採用VGG)

2. 進行數據預處理,將輸入圖像的尺寸通過縮放固定到600*600,

3. 使用預訓練網絡的卷積模塊(具體到block5_conv3)提取feature map,送入RPN網絡中,端到端的fine-tune(微調)RPN網絡。

4. 先固定RPN的權值,利用第3步中RPN生成的提案框,訓練一個單獨 的Fast R-CNN檢測網絡。這個檢測網絡一樣是由ImageNet預訓練 的模型初始化的,這時候兩個網絡尚未共享卷積層

5. 用第四步訓練的檢測網絡來初始化RPN訓練,可是訓練時,咱們固 定共享的用來提取feature map的卷積層,只微調RPN獨有的層。

6. 繼續保持固定共享的卷積層,微調Fast R-CNN的FC層。

這樣進行下來,兩個網絡共享相同的卷積層,構成一個統一的網絡。上述的最後的交替訓練能夠迭代屢次,可是論文中提出對結果並無多大改進。

上述就是Faster R-CNN的相關內容,一個真正意義上的端到端的網絡模型,相對於以前的RCNN系列,檢測速度有個很大的提高,幾乎能夠作到實時檢測,而且,精度上也有較大提高。

後面,咱們將經過keras來實現Faster RCNN。

歡迎關注個人我的公衆號 AI計算機視覺工坊,本公衆號不按期推送機器學習,深度學習,計算機視覺等相關文章,歡迎你們和我一塊兒學習,交流。

                                

相關文章
相關標籤/搜索