基礎目標檢測算法介紹:CNN、RCNN、Fast RCNN和Faster RCNN

每次丟了東西,咱們都但願有一種方法能快速定位出失物。如今,目標檢測算法或許能作到。目標檢測的用途遍及多個行業,從安防監控,到智慧城市中的實時交通監測。簡單來講,這些技術背後都是強大的深度學習算法。算法

在這篇文章中,咱們會進一步地瞭解這些用在目標檢測中的算法,首先要從RCNN家族開始,例如RCNN、Fast RCNN和Faster RCNN。網絡

1. 解決目標檢測任務的簡單方法(利用深度學習)學習

下圖是描述目標檢測算法如何工做的典型例子,圖中的每一個物體(不管是任務仍是風箏),都能以必定的精確度被定位出來。優化

 

 

首先咱們要說的就是在圖像目標檢測中用途最廣、最簡單的深度學習方法——卷積神經網絡(CNN)。我要講的是CNN的內部工做原理,首先讓咱們看看下面這張圖片。rest

 

 

向網絡中輸入一張圖片,接着將它傳遞到多個卷積和池化層中。最後輸出目標所屬的類別,聽上去很是直接。blog

對每張輸入的圖片,咱們都有對應的輸出類別,那麼這一技術能檢測圖片中多種目標嗎?答案是確定的!下面就讓咱們看看如何用一個卷積神經網絡解決通用的目標檢測問題。圖片

1.首先,咱們把下面的圖片用做輸入:資源

 

 

2.以後,咱們將圖片分紅多個區域:深度學習

 

 

3.將每一個區域看做單獨的圖片。io

4.把這些區域照片傳遞給CNN,將它們分到不一樣類別中。

5.當咱們把每一個區域都分到對應的類別後,再把它們結合在一塊兒,完成對原始圖像的目標檢測:

 

 

使用這一方法的問題在於,圖片中的物體可能有不一樣的長寬比和空間位置。例如,在有些狀況下,目標物體可能佔據了圖片的大部分,或者很是小。目標物體的形狀也可能不一樣。

有了這些考慮因素,咱們就須要分割不少個區域,須要大量計算力。因此爲了解決這一問題,減小區域的分割,咱們可使用基於區域的CNN,它能夠進行區域選擇。

2. 基於區域的卷積神經網絡介紹

2.1 RCNN簡介

和在大量區域上工做不一樣,RCNN算法提出在圖像中建立多個邊界框,檢查這些邊框中是否含有目標物體。RCNN使用選擇性搜索來從一張圖片中提取這些邊框。

首先,讓咱們明確什麼是選擇性搜索,以及它是如何辨別不一樣區域的。組成目標物體一般有四個要素:變化尺度、顏色、結構(材質)、所佔面積。選擇性搜索會肯定物體在圖片中的這些特徵,而後基於這些特徵突出不一樣區域。下面是選擇搜索的一個簡單案例:

  • 首先將一張圖片做爲輸入:

 

 

 

  • 以後,它會生成最初的sub-分割,將圖片分紅多個區域:

 

 

 

  • 基於顏色、結構、尺寸、形狀,將類似的區域合併成更大的區域:

 

 

 

  • 最後,生成最終的目標物體位置(Region of Interest)。

 

用RCNN檢測目標物體的步驟以下:

  1. 咱們首先取一個預訓練卷積神經網絡。
  2. 根據須要檢測的目標類別數量,訓練網絡的最後一層。
  3. 獲得每張圖片的感興趣區域(Region of Interest),對這些區域從新改造,以讓其符合CNN的輸入尺寸要求。
  4. 獲得這些區域後,咱們訓練支持向量機(SVM)來辨別目標物體和背景。對每一個類別,咱們都要訓練一個二元SVM。
  5. 最後,咱們訓練一個線性迴歸模型,爲每一個辨識到的物體生成更精確的邊界框。

下面咱們就用具體的案例解釋一下。

  • 首先,將如下圖片做爲輸入:

 

 

 

  • 以後,咱們會用上文中的選擇性搜索獲得感興趣區域:

 

 

 

  • 將這些區域輸入到CNN中,並通過卷積網絡:

 

 

 

  • CNN爲每一個區域提取特徵,利用SVM將這些區域分紅不一樣類別:

 

 

 

  • 最後,用邊界框迴歸預測每一個區域的邊界框位置:

 

 

 

這就是RCNN檢測目標物體的方法。

2.2 RCNN的問題

如今,咱們瞭解了RCNN能如何幫助進行目標檢測,可是這一技術有本身的侷限性。訓練一個RCNN模型很是昂貴,而且步驟較多:

  • 根據選擇性搜索,要對每張圖片提取2000個單獨區域;
  • 用CNN提取每一個區域的特徵。假設咱們有N張圖片,那麼CNN特徵就是N*2000;
  • 用RCNN進行目標檢測的整個過程有三個模型:
  1. 用於特徵提取的CNN
  2. 用於目標物體辨別的線性SVM分類器
  3. 調整邊界框的迴歸模型。

這些過程合併在一塊兒,會讓RCNN的速度變慢,一般每一個新圖片須要40—50秒的時間進行預測,基本上沒法處理大型數據集。

因此,這裏咱們介紹另外一種能突破這些限制的目標檢測技術。

3. Fast RCNN

3.1 Fast RCNN簡介

想要減小RCNN算法的計算時間,能夠用什麼方法?咱們可不能夠在每張圖片上只使用一次CNN便可獲得所有的重點關注區域呢,而不是運行2000次。

RCNN的做者Ross Girshick提出了一種想法,在每張照片上只運行一次CNN,而後找到一種方法在2000個區域中進行計算。在Fast RCNN中,咱們將圖片輸入到CNN中,會相應地生成傳統特徵映射。利用這些映射,就能提取出感興趣區域。以後,咱們使用一個Rol池化層將全部提出的區域從新修正到合適的尺寸,以輸入到徹底鏈接的網絡中。

簡單地說,這一過程含有如下步驟:

  1. 輸入圖片。
  2. 輸入到卷積網絡中,它生成感興趣區域。
  3. 利用Rol池化層對這些區域從新調整,將其輸入到徹底鏈接網絡中。
  4. 在網絡的頂層用softmax層輸出類別。一樣使用一個線性迴歸層,輸出相對應的邊界框。

因此,和RCNN所須要的三個模型不一樣,Fast RCNN只用了一個模型就同時實現了區域的特徵提取、分類、邊界框生成。

一樣,咱們還用上面的圖像做爲案例,進行更直觀的講解。

  • 首先,輸入圖像:

 

 

 

圖像被傳遞到卷積網絡中,返回感興趣區域:

 

 

以後,在區域上應用Rol池化層,保證每一個區域的尺寸相同:

 

 

最後,這些區域被傳遞到一個徹底鏈接的網絡中進行分類,並用softmax和線性迴歸層同時返回邊界框:

 

 

3.2 Fast RCNN的問題

可是即便這樣,Fast RCNN也有某些侷限性。它一樣用的是選擇性搜索做爲尋找感興趣區域的,這一過程一般較慢。與RCNN不一樣的是,Fast RCNN處理一張圖片大約須要2秒。可是在大型真實數據集上,這種速度仍然不夠理想。

4.Faster RCNN

4.1 Faster RCNN簡介

Faster RCNN是Fast RCNN的優化版本,兩者主要的不一樣在於感興趣區域的生成方法,Fast RCNN使用的是選擇性搜索,而Faster RCNN用的是Region Proposal網絡(RPN)。RPN將圖像特徵映射做爲輸入,生成一系列object proposals,每一個都帶有相應的分數。

下面是Faster RCNN工做的大體過程:

  1. 輸入圖像到卷積網絡中,生成該圖像的特徵映射。
  2. 在特徵映射上應用Region Proposal Network,返回object proposals和相應分數。
  3. 應用Rol池化層,將全部proposals修正到一樣尺寸。
  4. 最後,將proposals傳遞到徹底鏈接層,生成目標物體的邊界框。

 

 

 

那麼Region Proposal Network具體是如何工做的呢?首先,將CNN中得來的特徵映射輸入到Faster RCNN中,而後將其傳遞到Region Proposal Network中。RPN會在這些特徵映射上使用一個滑動窗口,每一個窗口會生成具備不一樣形狀和尺寸的k個anchor box:

 

 

Anchor boxes是固定尺寸的邊界框,它們有不一樣的形狀和大小。對每一個anchor,RPN都會預測兩點:

  • 首先是anchor就是目標物體的機率(不考慮類別)
  • 第二個就是anchor通過調整能更合適目標物體的邊界框迴歸量

如今咱們有了不一樣形狀、尺寸的邊界框,將它們傳遞到Rol池化層中。通過RPN的處理,proposals可能沒有所述的類別。咱們能夠對每一個proposal進行切割,讓它們都含有目標物體。這就是Rol池化層的做用。它爲每一個anchor提取固定尺寸的特徵映射:

 

 

以後,這些特徵映射會傳遞到徹底鏈接層,對目標進行分類並預測邊界框。

4.2 Faster RCNN的問題

目前爲止,咱們所討論的全部目標檢測算法都用區域來辨別目標物體。網絡並不是一次性瀏覽全部圖像,而是關注圖像的多個部分。這就會出現兩個問題:

  • 算法須要讓圖像通過多個步驟才能提取出全部目標
  • 因爲有多個步驟嵌套,系統的表現經常取決於前面步驟的表現水平

5. 上述算法總結

下表對本文中提到的算法作了總結:

 

 

 

目標檢測是頗有趣的領域,在商業中也大有前景。得益於現代硬件和計算資源的發展,才能讓這一技術有重要的突破。

本文只是目標檢測算法的開門介紹,想了解更多的朋友能夠直接私我。(關注主頁)

若是你有不一樣看法也可直接在評論下方指教!

相關文章
相關標籤/搜索