基礎目標檢測演算法介紹(一):CNN、RCNN、Fast RCNN和Faster RCNN
作者: ofollow,noindex">PULKIT SHARMA
編譯:Bing
每次丟了東西,我們都希望有一種方法能快速定位出失物。現在,目標檢測演算法或許能做到。目標檢測的用途遍佈多個行業,從安防監控,到智慧城市中的實時交通監測。簡單來說,這些技術背後都是強大的深度學習演算法。
在這篇文章中,我們會進一步地瞭解這些用在目標檢測中的演算法,首先要從RCNN家族開始,例如RCNN、Fast RCNN和Faster RCNN。在本系列接下來的文章中我們會談到更高階的演算法,例如YOLO、SSD等等。
1. 解決目標檢測任務的簡單方法(利用深度學習)
下圖是描述目標檢測演算法如何工作的典型例子,圖中的每個物體(不論是任務還是風箏),都能以一定的精確度被定位出來。

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

向網路中輸入一張圖片,接著將它傳遞到多個卷積和池化層中。最後輸出目標所屬的類別,聽上去非常直接。
對每張輸入的圖片,我們都有對應的輸出類別,那麼這一技術能檢測圖片中多種目標嗎?答案是肯定的!下面就讓我們看看如何用一個卷積神經網路解決通用的目標檢測問題。
1.首先,我們把下面的圖片用作輸入:

2.之後,我們將圖片分成多個區域:

3.將每個區域看作單獨的圖片。
4.把這些區域照片傳遞給CNN,將它們分到不同類別中。
5.當我們把每個區域都分到對應的類別後,再把它們結合在一起,完成對原始影象的目標檢測:

使用這一方法的問題在於,圖片中的物體可能有不同的長寬比和空間位置。例如,在有些情況下,目標物體可能佔據了圖片的大部分,或者非常小。目標物體的形狀也可能不同。
有了這些考慮因素,我們就需要分割很多個區域,需要大量計算力。所以為了解決這一問題,減少區域的分割,我們可以使用基於區域的CNN,它可以進行區域選擇。
2. 基於區域的卷積神經網路介紹
2.1 RCNN簡介
和在大量區域上工作不同,RCNN演算法提出在影象中建立多個邊界框,檢查這些邊框中是否含有目標物體。RCNN使用選擇性搜尋來從一張圖片中提取這些邊框。
首先,讓我們明確什麼是選擇性搜尋,以及它是如何辨別不同區域的。組成目標物體通常有四個要素:變化尺度、顏色、結構(材質)、所佔面積。選擇性搜尋會確定物體在圖片中的這些特徵,然後基於這些特徵突出不同區域。下面是選擇搜尋的一個簡單案例:
- 首先將一張圖片作為輸入:

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

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

- 最後,生成最終的目標物體位置(Region of Interest)。
用RCNN檢測目標物體的步驟如下:
- 我們首先取一個預訓練卷積神經網路。
- 根據需要檢測的目標類別數量,訓練網路的最後一層。
- 得到每張圖片的感興趣區域(Region of Interest),對這些區域重新改造,以讓其符合CNN的輸入尺寸要求。
- 得到這些區域後,我們訓練支援向量機(SVM)來辨別目標物體和背景。對每個類別,我們都要訓練一個二元SVM。
- 最後,我們訓練一個線性迴歸模型,為每個辨識到的物體生成更精確的邊界框。
下面我們就用具體的案例解釋一下。
- 首先,將以下圖片作為輸入:

- 之後,我們會用上文中的選擇性搜尋得到感興趣區域:

- 將這些區域輸入到CNN中,並經過卷積網路:

- CNN為每個區域提取特徵,利用SVM將這些區域分成不同類別:

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

這就是RCNN檢測目標物體的方法。
2.2 RCNN的問題
現在,我們瞭解了RCNN能如何幫助進行目標檢測,但是這一技術有自己的侷限性。訓練一個RCNN模型非常昂貴,並且步驟較多:
- 根據選擇性搜尋,要對每張圖片提取2000個單獨區域;
- 用CNN提取每個區域的特徵。假設我們有N張圖片,那麼CNN特徵就是N*2000;
- 用RCNN進行目標檢測的整個過程有三個模型:
- 用於特徵提取的CNN
- 用於目標物體辨別的線性SVM分類器
- 調整邊界框的迴歸模型。
這些過程合併在一起,會讓RCNN的速度變慢,通常每個新圖片需要40—50秒的時間進行預測,基本上無法處理大型資料集。
所以,這裡我們介紹另一種能突破這些限制的目標檢測技術。
3. Fast RCNN
3.1 Fast RCNN簡介
想要減少RCNN演算法的計算時間,可以用什麼方法?我們可不可以在每張圖片上只使用一次CNN即可得到全部的重點關注區域呢,而不是執行2000次。
RCNN的作者Ross Girshick提出了一種想法,在每張照片上只執行一次CNN,然後找到一種方法在2000個區域中進行計算。在Fast RCNN中,我們將圖片輸入到CNN中,會相應地生成傳統特徵對映。利用這些對映,就能提取出感興趣區域。之後,我們使用一個Rol池化層將所有提出的區域重新修正到合適的尺寸,以輸入到完全連線的網路中。
簡單地說,這一過程含有以下步驟:
- 輸入圖片。
- 輸入到卷積網路中,它生成感興趣區域。
- 利用Rol池化層對這些區域重新調整,將其輸入到完全連線網路中。
- 在網路的頂層用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工作的大致過程:
- 輸入影象到卷積網路中,生成該影象的特徵對映。
- 在特徵對映上應用Region Proposal Network,返回object proposals和相應分數。
- 應用Rol池化層,將所有proposals修正到同樣尺寸。
- 最後,將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. 上述演算法總結
下表對本文中提到的演算法做了總結:

目標檢測是很有趣的領域,在商業中也大有前景。得益於現代硬體和計算資源的發展,才能讓這一技術有重要的突破。
本文只是目標檢測演算法的開門介紹,在下一篇文章中,我們會講解YOLO、RetinaNet這樣更流行的演算法,請繼續關注!