Faster RCNN網絡簡介

介紹

Faster RCNN網絡是目標檢測領域里程碑式的一個網絡。這個網絡的提出,真正將深度學習方法端到端的應用到目標檢測領域。大幅提升了目標檢測的檢測速度和檢測準確程度。論文的RPN、Anchor等思想對後續的論文和研究工作也有不小的影響。下面,我們一起來看一下Faster RCNN到底是如何具體進行目標檢測的。

總體網絡結構

在這裏插入圖片描述
如圖所示,我們先總體介紹一下數據流是如何傳輸的。之後再分開每一部分進行重點介紹。

對於一張輸入的彩色圖片,首先經過CNN層進行特徵提取。在Faster R-CNN的原始論文中,他們使用的是預訓練好的VGG16網絡用於特徵提取。VGG網絡去掉全連接層,只保留卷積的部分。這個對應的就是圖中的conv layer

卷積層提取完特徵之後,對於特徵圖的數據,分成兩部分,分別進入RPN網絡(候選區域選擇網絡),和ROI pooling網絡。對於RPN而言,這個網絡所做的工作是挑選出圖片中可能的候選區域,區分前景和背景。這些信息用來輔助最終的目標檢測的決策。ROI Pooling所要做的是收集輸入的feature maps和proposals,綜合這些信息後提取proposal feature maps,送入後續全連接層判定目標類別。

classifer用於做出最後判斷。包括圖像類別和位置。

下圖可以更清晰的展示整個Faster R-CNN的網絡結構。
在這裏插入圖片描述
下面具體對各個部分進行詳細解釋。conv layer沒什麼可解釋的,直接從RPN開始。


RPN網絡

介紹RPN網絡之前,有必要先來談談目標檢測問題存在的難點。這也是RPN網絡提出的創新解決方案的關鍵所在。

做目標檢測,可能存在最大的問題就是尺度變換多樣。 比如說對人臉的目標檢測而言,一張圖片中,人臉有大有小。如何將這些大小不一的圖片全部識別出來,並不算太容易。在過去,常常採用的方式是滑移窗口和圖像金字塔的形式。通過滑移窗口掃描圖像,以及圖像金字塔的尺度變化來解決這個多尺度檢測問題。然而這種方法無論是速度還是檢測效果都不算好。RPN網絡通過引入全卷積神經網絡(FCN fully convolutional network)實現了一種端到端的候選區域提取。

對於輸入圖像,首先經過VGG的卷積網絡進行特徵提取,提取效果如圖所示:
在這裏插入圖片描述
經過VGG網絡之後,輸入圖像長度和寬度變窄,但是特徵維度變多。

Anchor

對於目標檢測而言,我們需要獲取獲取目標所在的位置(通常用矩形框來表示),我們這裏使用Δx_center\Delta x\_centerΔy_center\Delta y\_centerΔwidth\Delta widthΔheight\Delta height來進行表示。那麼如何可以保證多尺度的預測呢?論文中介紹了一個Anchor的概念,將圖片中放入很多的Anchor,並且每個Anchor都有不同尺度的縱橫比。以此來實現多尺度的預測。

在這裏插入圖片描述
需要理解的是雖然anchors是基於卷積特徵圖定義的,但是最終的anchos是相對於原始圖片的。由於只有卷積層和池化層,特徵圖的維度是原始圖片的尺寸程比例關係的,即數學的表述,如果圖片尺寸W*H,特徵圖的尺寸是w/r * h/r,其中r是下採樣率(subsampling ratio)。如果在卷積特徵圖空間位置定義anchor,則最終的圖片會是由r像素劃分的anchors集,在VGG中 r =16。

按照論文中所說的,每一個Anchor都對應不同尺寸和縱橫比一共有9個候選框。下圖展示了這是怎樣一種結構方式:
在這裏插入圖片描述
按照Faster RCNN原始論文中的數據,如果我們滑移步長爲16個像素的話,600*800大小的圖像中一共就會有1989個Anchor,每個Anchor都可以生成9個候選框,那麼一幅圖像一共就有1989*9=17901個候選框了。好像是有點多了,如果這樣直接把這麼多的候選框都扔到後面進行學習的話,整個網絡的速度也不會快到哪裏去。所以,我們需要先對候選框進行一些篩選。

候選框的篩選

在這裏插入圖片描述
首先一點是RPN並不是對所有的Anchor都生成9個候選框的。上圖左側有一個2k scores,表示的是做一個二分類,分別是前景還是背景。只有對於前景的物體纔會生成候選框的。對於已經生成的候選框而言,我們需要對那4個位置進行迴歸的位置微調。

做完這些還不夠,我們接下來還需要使用非極大值抑制(Non-maximum suppression)算法來進一步縮小候選框的數量。非極大抑制算法是用來處理Anchor的重疊候選框的算法。只保留IoU大於某一閾值的候選框,其餘的候選框全部丟棄。

在原始的Faster RCNN論文中最後選擇了2000個候選框送到下一階段的ROI Pooling中了,如果你覺得太多,也可以將這個數值設置的更小一點。


ROI Pooling

RPN 處理後,可以得到一堆沒有 class score 的 object proposals。待處理問題爲,如何利用這些邊界框 bounding boxes,並分類。

一種最簡單的方法是,對每個 porposal,裁剪,並送入pre-trained base 網絡,提取特徵;然後,將提取特徵來訓練分類器. 但,這就需要對所有的 2000 個 proposals 進行計算,效率低,速度慢。

Faster R-CNN 則通過重用卷積特徵圖(conv feature map) 來加快計算效率. 即,採用 RoI(region of interest) Pooling 對每個 proposal 提取固定尺寸的特徵圖。

但是,我們爲什麼要用ROI Pooling,其他方法行不行呢?ROI Pooling又到底有什麼好處?

先來看一個問題:對於傳統的CNN(如AlexNet和VGG),當網絡訓練好後輸入的圖像尺寸必須是固定值,同時網絡輸出也是固定大小的vector or matrix。如果輸入圖像大小不定,這個問題就變得比較麻煩。有2種解決辦法:

  • 從圖像中crop一部分傳入網絡
  • 將圖像warp成需要的大小後傳入網絡

在這裏插入圖片描述
可以看到無論採取那種辦法都不好,要麼crop後破壞了圖像的完整結構,要麼warp破壞了圖像原始形狀信息。

回憶RPN網絡生成的proposals的方法:對positive anchors進行bounding box regression,那麼這樣獲得的proposals也是大小形狀各不相同,即也存在上述問題。所以Faster R-CNN中提出了RoI Pooling解決這個問題。

由於proposal是對應M×\timesN尺度的,所以首先使用spatial_scale參數將其映射回(M/16)×\times(N/16)大小的feature map尺度;再將每個proposal對應的feature map區域水平分爲PooledW×\timespooledH的網格;對網格的每一份都進行max pooling處理(步長爲2的max pooling)。
這樣處理後,即使大小不同的proposal輸出結果都是PooledW×\timespooledH固定大小,實現了固定長度輸出。
在這裏插入圖片描述


分類

對於最後的ROI Pooling的的特徵,我們再接兩個全連接層。之後用於迴歸和分類預測任務。注意這裏的迴歸是在RPN基礎之上進一步調整。相當於一個精修操作。

在這裏插入圖片描述

參考資料

[1] 深度學習論文翻譯解析(四):Faster R-CNN: Down the rabbit hole of modern object detection
[2] 一文讀懂Faster RCNN

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