1. 程式人生 > 實用技巧 >Fast-RCNN

Fast-RCNN

FAST-RCNN git地址

這裡寫目錄標題

RCNN概述

簡單來說,RCNN使用以下四步實現目標檢測:
a. 在影象中確定約1000-2000個候選框
b. 對於每個候選框內影象塊,使用深度網路提取特徵
c. 對候選框中提取出的特徵,使用分類器判別是否屬於一個特定類
d. 對於屬於某一特徵的候選框,用迴歸器進一步調整其位置

fast RCNN的改進之處

Fast RCNN方法解決了RCNN方法三個問題:

問題一:測試時速度慢
RCNN一張影象內候選框之間大量重疊,提取特徵操作冗餘。
本文將整張影象歸一化後直接送入深度網路。在鄰接時,才加入候選框資訊,在末尾的少數幾層處理每個候選框。

問題二:訓練時速度慢
原因同上。
在訓練時,本文先將一張影象送入網路,緊接著送入從這幅影象上提取出的候選區域。這些候選區域的前幾層特徵不需要再重複計算。

問題三:訓練所需空間大
RCNN中獨立的分類器和迴歸器需要大量特徵作為訓練樣本。
本文把類別判斷和位置精調統一用深度網路實現,不再需要額外儲存。

以下按次序介紹三個問題對應的解決方法。

總體框圖

在這裡插入圖片描述
首先是讀入一張影象,這裡有兩個分支,一路送入FCN,輸出 feature maps,另一路通過selective search提取region proposals(注意,Fast R-CNN論文中並沒有明確說明使用selective search提取region proposals,但是Fast R-CNN是基於R-CNN的,姑且預設採用selective search提取region proposals吧。),提取的每個region proposal 都有一個對應的Ground-truth Bounding Box和Ground-truth class label。其中每個region proposals用四元陣列進行定義,即(r, c, h, w),即視窗的左上行列座標與高和寬。值得注意的是,這裡的座標均是對應原影象的,而不是輸出的feature maps。因此,還需要把原影象的座標系對映到feature maps上。這一點也很簡單,比如採用的是pre-trained 網路模型為VGG16的話,RoIPooling替換掉最後一個max pooling層的話,則原影象要經過4個max pooling層,輸出的feature maps是原影象的1/16,因此,將原影象對應的四元陣列轉換到feature maps上就是每個值都除以16,並量化到最接近的整數。那麼將region proposal的四元組座標對映到feature maps上之後接下幹什麼呢?接下來就是把region proposal視窗框起來的那部分feature maps輸入到RoIPooling(R-CNN是將其縮放到224x224,然後送入經過Fine-tuning的網路模型),得到固定大小的輸出maps。

特徵提取網路