>>戳此處立即下載下傳電子書<< ,學習全套目标檢測算法&模型

Faster R-CNN
Faster R-CNN[3] 作為目标檢測的經典方法在現今很多實戰項目和比賽中頻頻出現。其實,Faster R-CNN 就是在Fast R-CNN 的基礎上建構一個小的網絡,直接産生region proposal 來代替通過其他方法(如selective search)得到ROI。這個小型的網絡被稱為區域預測網絡(Region Proposal Network,RPN)。Faster R-CNN 的訓練流程如圖2-10 所示,其中的RPN 是關鍵,其餘流程基本和Fast R-CNN 一緻。
圖2-10 Faster R-CNN 訓練流程[9]
RPN 的思想是建構一個小的全卷積網絡,對于任意大小的圖檔,輸出ROI 的具體位置以及該ROI 是否是物體。RPN 網絡在卷積神經網的最後一個特征層上滑動。
接下來我們對着圖2-11 來進一步解釋RPN 網絡。圖2-11(a)中最下面灰色的網格表示卷積神經網絡的特征層,紅框表示RPN 網絡的輸入,其大小為3×3,而後連接配接到256 維的一個低維向量。這3×3 的視窗滑動經過整個特征層,并且每次計算都将經過這256 維的向量并最終輸出2 個結果:該3×3 滑動視窗位置中是否有物體以及該滑動視窗對應物體的矩形框位置。如果還是不好了解,我們将圖2-11(a)中的RPN 網絡順時針旋轉90 度,如圖2-11(b)所示,現在可以很清晰地看出神經網絡結構了,這裡input 次元是9,即圖2-11(a)中的3×3 大小。
(a)
(b)
圖2-11 RPN 網絡原理[3]
為了适應多種形狀的物體,RPN 網絡定義了k 種不同尺度的滑窗(因為有的目标是長的,有的是扁的,有的是大的,有的是小的,統一用一個3×3 的滑窗難以很好地拟合多種情況),這裡給它一個專業的名詞——anchor,每個anchor 都是以特征層(feature map)上的像素點為中心并且根據其尺度大小進行後續計算的。在Faster-RCNN 論文中,滑窗在特征層的每個位置上使用3 種大小和3 種比例共3×3=9 種anchor,在圖2-11(a)中n=9。
根據上面的介紹我們知道RPN 網絡有2 類輸出:二分類網絡輸出是否是物體,回歸網絡傳回矩形框位置對應的4 個值。
接下來,我們看一下訓練過程中的一些細節問題。首先,針對分類任務,對于滑窗産生的每一個anchor 都計算該anchor 與真實标記矩形框的IOU。當IOU 大于0.7 時,便認為該anchor 中含有物體;當IOU 小于0.3 時,便認為該anchor 中不含物體;當IOU 介于0.3-0.7 之間時,則不參與網絡訓練的疊代過程。
對于回歸任務,這裡定義為anchor 中心點的橫、縱坐标以及anchor 的寬高,學習目标為anchor 與真實bbox 在這四個值上的偏移。RPN 網絡為一個全卷積網絡,可以用随機梯度下降的方式端到端地進行訓練。
這裡需要注意,訓練過程中能與真實物體矩形框相交的IOU 大于0.7 的anchor并不多,絕大多數都是負樣本,是以會導緻正負樣本比例嚴重失衡,進而影響識别效果。是以,在RPN 訓練的過程,每個batch 進行随機采樣(每個batch 中有256個樣本)并保證正負樣本的比例為1:1,而當正樣本數量小于128 時,取全部的正樣本,其餘的随機使用負樣本進行補全。
使用RPN 網絡産生ROI 的好處是可以和檢測網絡共享卷積層,使用随機梯度下降的方式端到端地進行訓練。接下來我們看下Faster R-CNN 的訓練過程:
(1)使用ImageNet 預訓練好的模型訓練一個RPN 網絡。
(2)使用ImageNet 預訓練好的模型,以及第(1)步裡産生的建議區域訓練Fast R-CNN 網絡,得到物體實際類别以及微調的矩形框位置。
(3)使用(2)中的網絡初始化RPN,固定前面卷積層,隻有調整RPN 層的參數。
(4)固定前面的卷積層,隻訓練并調整Fast R-CNN 的FC 層。
有了RPN 的幫助,Faster R-CNN 的速度大大提升,(如圖2-12 所示。RCNN、Fast R-CNN、Faster R-CNN 幾個模型的對比如圖2-13 所示。
圖2-12 RCNN、Fast R-CNN、Faster R-CNN 模型耗時對比
圖2-13 RCNN、Fast R-CNN、Faster R-CNN 模型對比
從R-CNN 到Faster R-CNN,前面講了基于proposal 想法做目标檢測的發展史,這種思路分為産生proposal 和檢測兩個步驟,可以得到相對較好的精度,但缺點是速度較慢。接下來我們介紹另外幾種常用于檢測的方法。