深度學習目標檢測模型全面綜述:Faster R-CNN、R-FCN和SSD

選自medium算法

機器之心編譯網絡

機器之心編輯部架構


Faster R-CNN、R-FCN 和 SSD 是三種目前最優且應用最普遍的目標檢測模型,其餘流行的模型一般與這三者相似。本文介紹了深度學習目標檢測的三種常見模型:Faster R-CNN、R-FCN 和 SSD。

圖爲機器之心小編家的邊牧「Oslo」被 YOLO 識別爲貓
隨着自動駕駛汽車、智能監控攝像頭、面部識別以及大量對人有價值的應用出現,快速、精準的目標檢測系統市場也日益蓬勃。這些系統除了能夠對圖像中的每一個目標進行識別、分類之外,它們還能夠經過在該目標周圍繪製適當大小的邊界框(bounding box)來對其進行定位。這讓目標檢測技術較傳統計算機視覺處理技術——圖像分類而言,難度上升了很多。框架

然而,幸運的是,目前最成功的目標檢測方法是對圖像分類模型的擴展。幾個月前,Google 爲 Tensorflow 發佈了一個新的目標檢測 API。與其同時發佈的還有針對一些特定模型預構建的框架和權重。學習

  • 基於 MobileNets 框架的 Single Shot Multibox Detector(SSD)模型。
  • 基於 Inception V2 框架的 SSD 模型。
  • 使用 ResNet-101 框架的基於 Region 的全卷積網絡(R-FCN)模型。
  • 基於 ResNet-101 框架的 Faster RCNN 模型。
  • 基於 Inception ResNet v2 的 Faster RCNN 模型。

之前的文章中 ,機器之心曾梳理了 Xception、Inception 和 ResNet 等基本網絡的架構和背後的設計思路。在本文中,咱們會對 Tensorflow 的目標檢測模型 Faster R-CNN、R-FCN 以及 SSD 作一樣的介紹。但願在結束本文的閱讀以後,你能夠了解到如下兩點:設計


一、深度學習是如何在目標檢測中獲得應用的。rest

二、這些目標檢測模型的設計是如何在相互之間得到靈感的同時也有各自的特色。cdn


FASTER R-CNN 模型

Faster R-CNN 模型如今是一個典型的基於深度學習的目標檢測模型。在它的啓發下,出現了不少目標檢測與分割模型,好比本文中咱們將會看到的另外兩個模型。然而,要真正開始瞭解 Faster R-CNN 咱們須要理解其以前的 R-CNN 和 Fast R-CNN。因此,如今咱們快速介紹一下 Faster R-CNN 的前因後果。對象

R-CNN 模型blog

若是要擬人化比喻,那 R-CNN 確定是 Faster R-CNN 的祖父了。換句話說,R-CNN 是一切的開端。

R-CNN,或稱 Region-based Convolutional Neural Network,其工做包含了三個步驟:

  • 藉助一個能夠生成約 2000 個 region proposal 的「選擇性搜索」(Selective Search)算法,R-CNN 能夠對輸入圖像進行掃描,來獲取可能出現的目標。
  • 在每一個 region proposal 上都運行一個卷積神經網絡(CNN)。
  • 將每一個 CNN 的輸出都輸入進:a)一個支持向量機(SVM),以對上述區域進行分類。b)一個線性迴歸器,以收縮目標周圍的邊界框,前提是這樣的目標存在。

下圖具體描繪了上述 3 個步驟:


換句話說,首先,咱們給出一些建議區域,而後,從中提取出特徵,以後,再根據這些特徵來對這些區域進行分類。本質而言,咱們將目標檢測轉化成了圖像分類問題。R-CNN 模型雖然很是直觀,可是速度很慢。

Fast R-CNN

直接承接 R-CNN 的是 Fast R-CNN。Fast R-CNN 在不少方面與 R-CNN 相似,可是,憑藉兩項主要的加強手段,其檢測速度較 R-CNN 有所提升:

  • 在推薦區域以前,先對圖像執行特徵提取工做,經過這種辦法,後面只用對整個圖像使用一個 CNN(以前的 R-CNN 網絡須要在 2000 個重疊的區域上分別運行 2000 個 CNN)。
  • 將支持向量機替換成了一個 softmax 層,這種變化並無建立新的模型,而是將神經網絡進行了擴展以用於預測工做。

Fast R-CNN 模型結構示意圖:


如圖所見,如今咱們基於網絡最後的特徵圖(而非原始圖像)建立了 region proposals。所以,咱們對整幅圖只用訓練一個 CNN 就能夠了。

此外,咱們使用了一個 softmax 層來直接輸出類(class)的機率,而不是像以前同樣訓練不少不一樣的 SVM 去對每一個目標類(object class)進行分類。如今,咱們只用訓練一個神經網絡,而以前咱們須要訓練一個神經網絡以及不少 SVM。

就速度而言,Fast R-CNN 提高了許多。

然而,存在一大未解決的瓶頸:用於生成 region proposal 的選擇搜索算法(selective search algorithm)。

FASTER R-CNN

到如今爲止,咱們完成了對 Faster R-CNN 兩大早期模型的溯源。下面咱們開始研究 Faster R-CNN。Faster R-CNN 的主要創新是,它用一個快速神經網絡代替了以前慢速的選擇搜索算法(selective search algorithm)。具體而言,它引入了一個 region proposal 網絡(RPN)。

RPN 工做原理:

  • 在最後卷積獲得的特徵圖上,使用一個 3x3 的窗口在特徵圖上滑動,而後將其映射到一個更低的維度上(如 256 維),
  • 在每一個滑動窗口的位置上,RPN 均可以基於 k 個固定比例的 anchor box(默認的邊界框)生成多個可能的區域。
  • 每一個 region proposal 都由兩部分組成:a)該區域的 objectness 分數。b)4 個表徵該區域邊界框的座標。

換句話說,咱們會觀察咱們最後特徵圖上的每一個位置,而後關注圍繞它的 k 個不一樣的 anchor box:一個高的框、一個寬的框、一個大的框等等。對於每一個這些框,無論咱們是否定爲它包含一個目標,以及無論這個框裏的座標是什麼,咱們都會進行輸出。下圖展現了在單個滑動框位置上發生的操做:


圖中 2k 分數表明了 k 中每個邊界框正好覆蓋「目標」的 softmax 機率。這裏注意到,儘管 RPN 輸出了邊界框的座標,然而它並不會去對任何可能的目標進行分類:它唯一的工做仍然是給出對象區域。若是一個 anchor box 在特定閾值之上存在一個「objectness」分數,那麼這個邊界框的座標就會做爲一個 region proposal 被向前傳遞。

一旦咱們有了 region proposal,咱們就直接把他們輸入一個本質上是 Fast R-CNN 的模型。咱們再添加一個池化層、一些全鏈接層以及最後,一個 softmax 分類層和邊界框迴歸器(bounding box regressor)。因此在某種意義上,Faster R-CNN=RPN+Fast R-CNN。


整體而言,Faster R-CNN 較 Fast R-CNN 在速度上有了大幅提高,並且其精確性也達到了最尖端的水平。值得一提的是,儘管將來的模型可以在檢測速度上有所提高,可是幾乎沒有模型的表現能顯著超越 Faster R-CNN。換句話說,Faster R-CNN 也許不是目標檢測最簡單、最快的方法,可是其表現仍是目前最佳的。例如,Tensorflow 應用 Inception ResNet 打造的 Faster R-CNN 就是他們速度最慢,但卻最精準的模型。

也許 Faster R-CNN 看起來可能會很是複雜,可是它的核心設計仍是與最初的 R-CNN 一致:先假設對象區域,而後對其進行分類。目前,這是不少目標檢測模型使用的主要思路,包括咱們接下來將要提到的這個模型。


R-FCN

還記得 Fast R-CNN 是如何經過在全部 region proposal 上共享同一個 CNN,來改善檢測速度的嗎?這也是設計 R-FCN 的一個動機:經過最大化共享計算來提高速度。

R-FCN,或稱 Region-based Fully Convolutional Net(基於區域的全卷積網絡),能夠在每一個輸出之間徹底共享計算。做爲全卷積網絡,它在模型設計過程當中遇到了一個特殊的問題。

一方面,當對一個目標進行分類任務時,咱們但願學到模型中的位置不變性(location invariance):不管這隻貓出如今圖中的哪一個位置,咱們都想將它分類成一隻貓。另外一方面,當進行目標檢測任務時,咱們但願學習到位置可變性(location variance):若是這隻貓在左上角,那麼咱們但願在圖像左上角這個位置畫一個框。因此,問題出現了,若是想在網絡中 100% 共享卷積計算的話,咱們應該如何在位置不變性(location invariance)和位置可變性(location variance)之間作出權衡呢?

R-FCN 的解決方案:位置敏感分數圖

每一個位置敏感分數圖都表明了一個目標類(object class)的一個相關位置。例如,只要是在圖像右上角檢測到一隻貓,就會激活一個分數圖(score map)。而當系統看見左下角出現一輛車時,另外一個分數圖也將會被激活。本質上來說,這些分數圖都是卷積特徵圖,它們被訓練來識別每一個目標的特定部位。

如下是 R-FCN 的工做方式:

  • 在輸入圖像上運行一個 CNN(本例中使用的是 ResNet)。
  • 添加一個全卷積層,以生成位置敏感分數圖的 score bank。這裏應該有 k²(C+1) 個分數圖,其中,k²表明切分一個目標的相關位置的數量(好比,3²表明一個 3x3 的空間網格),C+1 表明 C 個類外加一個背景。
  • 運行一個全卷積 region proposal 網絡(RPN),以生成感興趣區域(regions of interest,RoI)。
  • 對於每一個 RoI,咱們都將其切分紅一樣的 k²個子區域,而後將這些子區域做爲分數圖。
  • 對每一個子區域,咱們檢查其 score bank,以判斷這個子區域是否匹配具體目標的對應位置。好比,若是咱們處在「上-左」子區域,那咱們就會獲取與這個目標「上-左」子區域對應的分數圖,而且在感興趣區域(RoI region)裏對那些值取平均。對每一個類咱們都要進行這個過程。
  • 一旦每一個 k²子區域都具有每一個類的「目標匹配」值,那麼咱們就能夠對這些子區域求平均值,獲得每一個類的分數。
  • 經過對剩下 C+1 個維度向量進行 softmax 迴歸,來對 RoI 進行分類。

下面是 R-FCN 的示意圖,用 RPN 生成 RoI:




固然,即使有上述文字以及圖片的解釋,你可能仍然不太明白這個模型的工做方式。老實說,當你能夠實際看到 R-FCN 的工做過程時,你會發現理解起來會更加簡單。下面就是一個在實踐中應用的 R-FCN,它正在從圖中檢測一個嬰兒:



咱們只用簡單地讓 R-FCN 去處理每一個 region proposal,而後將其切分紅子區域,在子區域上反覆詢問系統:「這看起來像是嬰兒的『上-左』部分嗎?」,「這看起來像是嬰兒的『上-中』部分嗎?」,「這看起來像是嬰兒的『上-右』部分嗎?」等等。系統會對全部類重複這個過程。若是有足夠的子區域表示「是的,個人確匹配嬰兒的這個部分!」那麼 RoI 就會經過對全部類進行 softmax 迴歸的方式被分類成一個嬰兒。」

藉助這種設置,R-FCN 便能同時處理位置可變性(location variance)與位置不變性(location invariance)。它給出不一樣的目標區域來處理位置可變性,讓每一個 region proposal 都參考同一個分數圖 score bank 來處理位置不變形。這些分數圖應該去學習將一隻貓分類成貓,而不用管這隻貓在在那個位置。最好的是,因爲它是全卷積的,因此這意味着網絡中全部的計算都是共享的。

所以,R-FCN 比 Faster R-CNN 快了好幾倍,而且能夠達到相似的準確率。


SSD

咱們最後一個模型是 SSD,即 Single-Shot Detector。和 R-FCN 同樣,它的速度比 Faster R-CNN 要快不少,但其工做方式卻和 R-FCN 存在顯著不一樣。

咱們前兩個模型分兩個步驟執行 region proposal 和 region classification。首先,它們使用一個 region proposal 網絡來生成感興趣區域(region of interest);而後,它們既能夠用全鏈接層也能夠用位置敏感卷積層來對那些區域進行分類。然而,SSD 能夠在單個步驟中完成上述兩個步驟,而且在處理圖像的同時預測邊界框和類。

具體而言,給定一個輸入圖像以及一系列真值標籤,SSD 就會進行以下操做:

  • 在一系列卷積層中傳遞這個圖像,產生一系列大小不一樣的特徵圖(好比 10x十、6x六、3x3 等等。)
  • 對每一個這些特徵圖中的每一個位置而言,都使用一個 3x3 的卷積濾波器(convolutional filter)來評估一小部分默認的邊界框。這些默認邊的界框本質上等價於 Faster R-CNN 的 anchor box。
  • 對每一個邊界框都同時執行預測: a)邊界框的偏移;b)分類的機率。
  • 在訓練期間,用這些基於 IoU(Intersection over Union,也被稱爲 Jaccard 類似係數)係數的預測邊界框來匹配正確的邊界框。被最佳預測的邊界框將被標籤爲「正」,而且其它邊界框的 IoU 大於 0.5。

SSD 的工做方式聽上去很直接,可是訓練它卻會面臨一個不通常的挑戰。在以前那兩個模型那裏,region proposal 網絡能夠確保每一個咱們嘗試進行分類的對象都會有一個做爲「目標」的最小几率值。然而,在 SSD 這裏,咱們跳過了這個篩選步驟。咱們從圖像中每一個單一位置那裏進行分類並畫出形狀、大小不一樣的邊界框。經過這種辦法,咱們能夠生成比別的模型更多的邊界框,可是它們基本上全是負面樣本。

爲了解決這個問題,SSD 進行了兩項處理。首先,它使用非極大值抑制(non maximum suppression,NMS)技術來將高度重疊的邊界框整合成一個。換句話說,若是有 4 個形狀、尺寸等相似的邊界框中有同一只狗,那麼 NMS 就會保留信度最高的那個邊界框而拋棄掉其它的。第二,SSD 模型使用了一種被稱爲 hard negative mining 的技術以在訓練過程當中讓類保持平衡。在 hard negative mining 中,只有那些有最高訓練損失(training loss)的負面樣本(negative example)子集纔會在每次訓練迭代中被使用。SSD 的「正負」比一直保持在 1:3。

下圖是 SSD 的架構示意圖:


如上所述,最終有可縮小尺寸的「額外特徵層」。這些尺寸變化的特徵圖有助於捕捉不一樣大小的目標。例如,下面是一個正在執行的 SSD。


在更小的特徵圖中(好比 4x4),每一單元覆蓋圖像的一個更大區域,使其探測更大的目標。region proposal 與分類同時被執行:假設 p 爲目標類別,每一個邊界框與一個 (4+p)-維度向量相鏈接,其輸出 4 個框偏移座標和 p 分類機率。在最後一步中,softmax 又一次被用來分類目標。

最終,SSD 與最初的兩個模型並沒有不一樣。它簡單跳過「region proposal」這一步,而不是同時考慮圖像每一個位置的每一個邊界及其分類。因爲 SSD 一次性完成全部,它是三個模型中最快的,且相對而言依然表現出色。

結論

Faster R-CNN、R-FCN 和 SSD 是三種目前最優且應用最普遍的目標檢測模型。其餘流行的模型一般與這三者相似,都依賴於深度 CNN(如 ResNet、Inception 等)來進行網絡初始化,且大部分遵循一樣的 proposal/分類 pipeline。

可是,使用這些模型須要瞭解 Tensorflow 的 API。Tensorflow 有一份使用這些模型的初學者教程。



原文連接:medium.com/towards-dat…

相關文章
相關標籤/搜索