當前位置:
首頁 > 新聞 > 「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

雷鋒網按:本文為雷鋒字幕組編譯的技術博客,原標題 What do we learn from region based object detectors (Faster R-CNN,R-FCN, FPN)?,作者為 Jonathan Hui 。

翻譯 | 唐青 李振 整理 | 凡江

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

在這個系列中,我們將對目標檢測演算法進行全面探討。 第 1 部分,我們介紹常見的基於區域的目標檢測器,包括 Fast R-CNN , Faster R-CNN , R-FCN 和 FPN 。 第 2 部分,我們介紹單步檢測器(single shoot dectors, SSD )。第 3 部分,我們探討演算法性能和一些具體的例子。通過在相同的環境研究這些演算法,我們研究哪些部分在其作用,哪些部分是重要的,可以在哪些部分進一步改進。希望通過對演算法如何發展到今天的研究,會給我們未來的研究提供方向。

第1部分:我們從基於區域的目標檢測器中學到了什麼(Faster R-CNN,R-FCN,FPN)?

第2部分:我們從單步檢測器中學到了什麼(SSD,YOLO),FPN 和 Focal loss?

第3部分:目標檢測的設計選型,經驗教訓和發展趨勢?

滑動窗口檢測器(Sliding-window detectors)

自從 AlexNet 贏得了 2012 年 ILSVRC 挑戰的冠軍,使用 CNN 進行分類成為領域的主導。一種用於目標檢測的簡單粗暴的方法是將滑動窗口從左到右,從上到下滑動使用分類來識別目標。為了區分在不同視覺距離下的目標類型,我們使用了不同尺寸和高寬比的窗口。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

我們按照滑動窗口從圖片中剪切出部分圖像塊。由於通常分類器都採用固定的圖像大小,所以圖像塊需要進行形變。然而,這對分類精度並沒有什麼影響,應為分類器訓練時也使用了形變的圖像。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

形變的圖像塊被送進 CNN 分類器中提取 4096 個特徵。然後,我們用一個 SVM 分類器進行分類,用一個線性回歸器得到邊界框。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

以下是偽代碼。 我們生成了很多窗口來檢測不同位置、不同形狀的目標。 為了提高性能,減少窗口數量是一個顯而易見的解決方案。

選擇性搜索(Selective Search)

不再用簡單粗暴的方法,我們用區域提議方法(region proposal method)生成感興趣區域 ( regins of interest, ROIs ) 來進行目標檢測。在選擇性搜索演算法(Selective Search, SS)中,我們讓每個獨立像素作為一個起始的組。然後,計算每個組的紋理,合併最接近的兩個組。為了避免一個區域吞所有,我們優先合併較小的組。持續進行合併,直到所有可能合併的區域均完成合併。下圖中,第一行展示了如何進行區域生長。第二行展示了在合併過程中所有可能的 ROIs 。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

R-CNN

R-CNN 利用區域提議方法(region proposal method)生成了約 2000 個感興趣區域(regins of interest, ROIs)。這些圖像塊進行形變到固定的大小,分別送入到一個 CNN 網路中。然後,經過全連接層,進行目標分類和邊界框提取。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

以下是系統的工作流。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

利用數量更少,但質量更高的 ROIs ,R-CNN 比滑動窗口的方法運行的更快、更準確。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

邊界框回歸器(Boundary box regressor)

區域提議方法的計算量很大。為了加速這個過程,我們常採用一個簡易版的區域提議網路來生成 ROIs ,然後,接線性回歸器(使用全連接層)來提取邊界框。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

Fast R-CNN

R-CNN 需要足夠多的提議區域才能保證準確度, 而很多區域是相互重疊的。R-CNN 的訓練和推理過程都很緩慢。例如,我們生成了 2000 個的區域提議,每個區域提議分別進入 CNN。換句話說,我們對不同的 ROIs 重複了進行了 2000 次的提取特徵。

CNN 中的特徵映射表達了一個更緊密的空間中的空間特徵。我們能否利用這些特徵映射來進行目標檢測,而不是原始圖像?

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

我們不再為每個圖像塊重新提取特徵,而是在開始時採用一個特徵提取器(一個 CNN 網路)為整個圖像提取特徵。然後,直接在特徵映射上應用區域提議方法。例如,Fast R-CNN 選擇 VGG16 的卷積層 conv5 來生成待合併 ROIs 來進行目標檢測,其中,包括了與相應特徵的映射。我們利用 ROI Pooling 對圖像塊進行形變轉換成固定大小,然後將其輸入到全連接層進行分類和定位(檢測出目標的位置)。由於不重複特徵提取,Fast R-CNN 顯著的縮短了處理時間。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

以下是網路工作流:

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

在下面的偽代碼中,計算量很大的特徵提取操作被移出了 for 循環。由於同時為 2000 個 ROIs 提取特徵,速度有顯著的提升。Fast R-CNN 比 R-CNN 的訓練速度快 10 倍,推理速度快 150 倍。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

Fast R-CNN 的一個主要特點是整個網路(特徵提取器,分類器和邊界框回歸器)可以通過多任務損失 multi-task losses(分類損失和定位損失)進行端到端的訓練。這樣的設計提高了準確性。

ROI Pooling

由於 Fast R-CNN 使用了全連接層,因此我們應用 ROI Pooling 將不同大小的 ROIs 轉換為預定義大小形狀。

舉個例子,我們將 8×8 特徵映射轉換為預定義的 2×2 大小。

  • 左上:特徵映射圖。

  • 右上:ROI(藍色)與特徵映射圖重疊。

  • 左下:我們將 ROI 分成目標維度。 例如,我們的目標大小是 2×2,我們將 ROI 分為 4 個大小相似或相等的部分。

  • 右下:取每個部分的最大值,結果是特徵映射轉換後的結果。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

結果,得到了一個 2×2 的特徵塊,我們可以將它輸入到分類器和邊界框回歸器中。

Faster R-CNN

Fast R-CNN 採用類似選擇性搜索(Selective Search)這樣額外的區域提議方法。 但是,這些演算法在 CPU 上運行,且速度很慢。測試時, Fast R-CNN 需要 2.3 秒進行預測,而其中 2 秒花費在生成 2000 個ROIs 上。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

Faster R-CNN 採用與 Fast R-CNN 相似的設計,不同之處在於它通過內部深度網路取代區域提議方法。 新的區域提議網路(Region Proposal Network, RPN)效率更高。單副圖像生成 ROIs 只需要 10ms 。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

網路工作流。區域提議方法被新的卷積網路(RPN)取代。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

區域提議網路(Region proposal network)

區域提議網路( RPN )用第一個卷積網路輸出的特徵圖作為輸入。在特徵圖上用 3×3 的濾波器進行滑動(濾波),採用諸如 ZF 網路(如下圖)的卷積網路來得到未知類的建議區域。其他如 VGG 或者 ResNet 可以被用來提取更全面的特徵,但需以速度為代價。 ZF 網路輸出的 256 個值分別被送入兩個不一樣的全連接層來預測邊界框和對象性分數(2 objectness score)。對象性描述了框內是否包含有一個物體。我們可以用回歸器來計算單個物體的分數,但是為了簡單起見,Faster R-CNN使用了一個分類器分類出兩種可能的類別:「 存在物體 」類和「 不存在物體/背景 」類。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

RPN 對特徵圖裡的每個位置(像素點)做了 K 次猜測。因此 RPN 在每個位置都輸出 4×k 個坐標和 2×k 個分數。以下圖例演示了一個使用 3×3 過濾器的 8×8 特徵圖,它一共輸出 8×8×3 個興趣區( ROI )( 當k=3時)。右側圖例展示了在單個位置得到的 3 個提議區域。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

我們現在有 3 個猜測,隨後我們也會逐漸改善我們的猜想。因為我們最終只需要一個正確的猜測,所以我們使用不同形狀和大小的的初始猜測會更好。因此, Faster R-CNN 不是隨機的選擇提議邊界框。而是預測了相對於一些被稱為錨的參考框的左上角的偏移量,比如 x, y 。因為我們約束了偏移量,所以我們的猜測仍然類似與錨。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

為了對每個位置都進行 k 次預測,我們需要在每個位置中心放置 k 個錨。每次預測都和不同位置但是相同形狀的特定錨相關。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

這些錨都是精心預選好的,所以它們多種多樣,同時非常合理的覆蓋了不同尺度和不同長寬比的現實生活中的物體。這使了初始訓練將具有更好的猜測,同時允許每次預測都有特定、不同的形狀。這種方式使早期的訓練更加穩定和容易。

Faster R-CNN 使用了更多的錨。Faster R-CNN 在一個位置上使用了 9 個錨:3 種不同尺度並使用三種長寬比。在每個位置使用 9 種錨,所以對於每個位置,它一共產生了 2×9 個對象性分數和 4×9 個坐標。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

錨在不同的論文中也被稱為先驗或者默認邊界框。

R-CNN的性能

如下圖,Faster R-CNN 要快得多。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

基於區域的全卷積網路

假設我們只有一張特徵圖用來檢測臉上的右眼。我們是否可以用此來決定臉的位置呢?是可以的。因為右眼應該位於一張面部圖像的左上角,我們也可以用此信息來確定臉的位置。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

如果我們有另外的特徵圖專門用來分別檢測左眼、鼻子、嘴,我們可以將這些結果結合在一起使對臉部的定位更準確。

那為什麼我們要如此麻煩呢?在 Faster R-CNN 里,檢測器使用多個全連接層來做預測,有 2000 多個 ROI ,這消耗很高。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

R-FCN 通過減少每個 ROI 需要的工作總量來提高速度,以上基於區域的特徵圖獨立於 ROIs ,同時可以在每一個ROI的外部進行計算。接下來的工作就更簡單了,因此 R-FCN 比 Faster R-CNN 要快。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

我們可以想想一下這種情況,M 是一個 5*5 大小,有一個藍色的正方形物體在其中的特徵圖,我們將方形物體平均分割成 3*3 的區域。現在我們從 M 中創建一個新的特徵圖並只用其來檢測方形區域的左上角。這個新的特徵圖如下右圖,只有黃色網格單元被激活。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

因為我們將方形分為了 9 個部分,我們可以創建 9 張特徵圖分別來檢測對應的物體區域。因為每張圖檢測的是目標物體的子區域,所以這些特徵圖被稱為位置敏感分數圖(position-sensitive score maps)。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

比如,我們可以說,下圖由虛線所畫的紅色矩形是被提議的 ROIs 。我們將其分為 3*3 區域並得出每個區域可能包含其對應的物體部分的可能性。例如, ROIs 的左上區域中存在左眼的可能性。我們將此結果儲存在 3*3 的投票陣列(如下右圖)中。比如,投票陣列 [0][0] 中數值的意義是在此找到方形目標左上區域的可能性。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

將分數圖和 ROIs 映射到投票陣列的過程叫做位置敏感 ROI 池化(position-sensitive ROI-pool)。這個過程和我們之前提到的 ROI pool 非常相似。這裡不會更深入的去講解它,但是你可以參考以後的章節來獲取更多信息。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

在計算完位置敏感 ROI 池化所有的值之後,分類的得分就是所有它元素的平均值。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

如果說我們有 C 類物體需要檢測。我們將使用 C+1個類,因為其中多包括了一個背景(無目標物體)類。每類都分別有一個 3×3 分數圖,因此一共有 (C+1)×3×3 張分數圖。通過使用自己類別的那組分數圖,我們可以預測出每一類的分數。然後我們使用 softmax 來操作這些分數從而計算出每一類的概率。

接下來是數據流(圖),比如我們的例子中,k=3。

「目標檢測演算法」連連看:從Faster R-CNN 、 R-FCN 到 FPN

至今為止我們的歷程

我們從最基礎的滑動窗口演算法開始。

然後我們嘗試減少窗口數,並儘可能的將可以移出 for-loop 的操作移出。

在第 2 部分里,我們更加完全的移除了 for-loop 。單次檢測器(single shot detectors)使物體檢測能一次性完成,而不需要額外的區域提議步驟。

RPN,R-FCN,Mask R-CNN的延伸閱讀

FPN 和 R-FCN 都要比我們在這裡所描述的更加複雜,如果您想進一步學習,請參考如下:

  • https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c

  • https://medium.com/@jonathan_hui/understanding-region-based-fully-convolutional-networks-r-fcn-for-object-detection-828316f07c99

博客原址 https://medium.com/@jonathan_hui/what-do-we-learn-from-region-based-object-detectors-faster-r-cnn-r-fcn-fpn-7e354377a7c9

雷鋒網雷鋒網

雷鋒網雷鋒網

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

程維受BBC專訪:明天的事情是無人駕駛,後天是讓交通飛起來
快手熱捧早孕網紅,演算法推薦及審核漏洞要背鍋

TAG:雷鋒網 |