1. 程式人生 > >深度卷積神經網路在目標檢測中發展

深度卷積神經網路在目標檢測中發展

近些年來,深度卷積神經網路(DCNN)在影象分類和識別上取得了很顯著的提高。回顧從2014到2016這兩年多的時間,先後湧現出了R-CNN,Fast R-CNN, Faster R-CNN, ION, HyperNet, SDP-CRC, YOLO,G-CNN, SSD等越來越快速和準確的目標檢測方法。

  1. 基於Region Proposal的方法

該類方法的基本思想是:先得到候選區域再對候選區域進行分類和邊框迴歸。

1.1 R-CNN [1]

R-CNN是較早地將DCNN用到目標檢測中的方法。其中心思想是對影象中的各個候選區域先用DCNN進行特徵提取並使用一個SVM進行分類,分類的結果是一個初略的檢測結果,之後再次使用DCNN的特徵,結合另一個SVM迴歸模型得到更精確的邊界框。

其中獲取候選區域的方法是常用的selective search。 一個圖形中可以得到大約2000個不同大小、不同類別的候選區域,他們需要被變換到同一個尺寸以適應CNN所處理的影象大小(227x227)。

該文章中使用的CNN結構來自AlexNet,已經在ImageNet資料集上的1000個類別的分類任務中訓練過,再通過引數微調使該網路結構適應該文章中的21個類別的分類任務。

該方法在VOC 2011 test資料集上取得了71.8%的檢測精度。該方法的缺點是:1,訓練和測試過程分為好幾個階段:得到候選區域,DCNN 特徵提取, SVM分類、SVM邊界框迴歸,訓練過程非常耗時。2,訓練過程中需要儲存DCNN得到的特徵,很佔記憶體空間。3, 測試過程中,每一個候選區域都要提取一遍特徵,而這些區域有一定重疊度,各個區域的特徵提取獨立計算,效率不高,使測試一幅影象非常慢。

1.2 Fast R-CNN[2]

在R-CNN的基礎上,為了使訓練和測試過程更快,Ross Girshick 提出了Fast R-CNN,使用VGG19網路結構比R-CNN在訓練和測試時分別快了9倍和213倍。其主要想法是: 1, 對整個影象進行卷積得到特徵影象而不是對每個候選區域分別算卷積;2,把候選區域分類和邊框擬合的兩個步驟結合起來而不是分開做。原理圖如下:

該文章中使用ROI Pooling Layer 將不同大小的候選區域的特徵轉化為固定大小的特徵影象,其做法是:假設候選區域ROI的大小為h\times w, 要輸出的大小為H\times W,那麼就將該ROI分成H\times W 個格子,每一個格子的大小為(h/H)\times (w/W), 然後對每一格子使用max-pooling得到目標大小的特徵影象。

候選區域的分類和邊框擬合的結合是通過一個雙任務的網路結構:使用兩個全連線的輸出層分別進行類別預測和邊框預測(如上圖所示),將這兩個任務進行同時訓練,利用一個聯合代價函式:

L(p,u,t^{u},v )=L_{cls}(p,u) + \lambda[u\geq 1]L_{reg}(t^{u},v)

公式中的兩項分別是classification loss 和regression loss。該方法相比於R-CNN快了不少。特別是在測試一幅新影象時,如果不考慮生成候選區域的時間,可以達到實時檢測。生成候選區域的selective search演算法處理一張影象大概需要2s的時間,因此成為該方法的一個瓶頸。

1.3 Faster R-CNN[3]

上面兩種方法都依賴於selective search生成候選區域,十分耗時,那麼可不可以直接利用卷積神經網路得到候選區域呢?這樣的話就幾乎可以不花額外的時間代價就能得到候選區域。

Shaoqing Ren提出了Faster R-CNN來實現這種想法:假設有兩個卷積神經網路,一個是區域生成網路,得到影象中的各個候選區域,另一個是候選區域的分類和邊框迴歸網路。這兩個網路的前幾層都要計算卷積,如果讓它們在這幾層共享引數,只是在末尾的幾層分別實現各自的特定的目標任務,那麼對一幅影象只需用這幾個共享的卷積層進行一次前向卷積計算,就能同時得到候選區域和各候選區域的類別及邊框。

候選區域生成網路(Region Proposal Network, RPN)方法的原理圖如上,先通過對輸入影象的數層卷積得到一個特徵影象,然後在特徵影象上生成候選區域,做法是使用一個n\times nn=3)的滑動視窗,將區域性的特徵影象轉換成一個低維特徵, 預測k個的區域(cls層,2k個輸出)是否為候選區域和對應的k個邊框(reg層,4k個輸出)。這裡的k個區域被稱為錨(anchor), 對應著與滑動視窗具有相同的中心的不同大小和不同長寬比的矩形框。假設卷積後的特徵影象大小為W\times H,那麼一共有WHk個錨。這種特徵提取和候選區域生成的方法具有位移不變性。

使用RPN得到候選區域後,對候選區域的分類和邊框迴歸仍然使用Fast R-CNN。這兩個網路使用共同的卷積層。 由於Fast R-CNN的訓練過程中需要使用固定的候選區域生成方法,不能同時對RPN和Fast R-CNN使用反向傳播演算法進行訓練。該文章使用了四個步驟完成訓練過程:1,單獨訓練RPN;2,使用步驟中1得到的區域生成方法單獨訓練Fast R-CNN; 3, 使用步驟2得到的網路作為初始網路訓練RPN。4, 再次訓練Fast R-CNN, 微調引數。

Faster R-CNN的精度和Fast R-CNN差不多,但是訓練時間和測試時間都縮短了10倍。

1.4 ION: Inside-Outside Net[4]

ION也是基於Region Proposal的,在得到候選區域的基礎上,為了進一步提高在每一個候選感興趣區域ROI的預測精度,ION考慮了結合ROI內部的資訊和ROI以外的資訊,有兩個創新點:一是使用空間遞迴神經網路(spatial recurrent neural network)把上下文(context)特徵結合,而不是隻使用ROI內的區域性特徵 ,二是將不同卷積層得到的特徵連線起來,作為一個多尺度特徵用來預測。

ION在上、下、左、右四個方向獨立地使用RNN,並把它們的輸出連線起來組合成一個特徵輸出,經過兩次這樣的過程得到的特徵作為上下文特徵,再與之前的幾個卷積層的輸出特徵連線起來,得到既包括上下文資訊,又包括多尺度資訊的特徵。

1.5 HyperNet[5]

HyperNet在Faster R-CNN的基礎上,在得到更好的候選區域方面比Faster R-CNN中使用的RPN有了進一步的提高。其想法也是把不同卷積層得到的特徵影象結合起來,產生更好的region proposal和檢測準確率。

該文章把不同卷積層的輸出結合起來得到的特徵成為Hyper Feature。由於不同卷積層的輸出大小不一樣,較淺層的特徵影象解析度較高,對提高邊界框的精確性有益,但是容易對邊界框內的物體錯誤分類;較深層得到的特徵影象解析度很低,對小一些的物體的邊界框定位容易不準確,但這些特徵更加抽象,可以讓對物體的分類的準確性更高。因此二者的結合,對目標檢測的正確率和定位精度都有幫助。

1.6, SDP-CRC[6]

SDP-CRC在處理不同尺度的目標和提高對候選區域的計算效率上提出了兩個策略。第一個策略是基於候選區域尺度的池化,即Scale Department Pooling (SDP)。在CNN的框架中,由於輸入影象要經過多次卷積,那些尺寸小的物體在最後一層的卷積輸出上的特徵不能很好的描述該物體。如果用前面某一層的特徵,則能夠更好的描述小物體,用靠後的層的特徵,則能更好地描述較大的物體。

因此SDP的想法是根據物體大小選擇合適的卷積層上的特徵來描述該物體。例如一個候選區域的高度在0-64個畫素之間,則使用第三個卷積層上(例如VGG中的Conv3)的特徵進行pooling作為分類器和邊框迴歸器的輸入特徵,如果候選區域高度在128個畫素以上,則使用最後一個卷積層(例如VGG中的Conv5)的特徵進行分類和迴歸。

第二個策略是使用捨棄負樣本的級聯分類器,即Cascaded Rejection Classifer, CRC。Fast RCNN的一個瓶頸是有很多的候選區域,對成千上萬個候選區域都進行完整的分類和迴歸計算十分耗時。CRC可以用來快速地排除一些明顯不包含某個物體的候選區域,只將完整的計算集中在那些極有可能包含某個物體的候選區域。該文章中使用了AdaBoost的方法,按順序使用每一個卷積層的特徵,由一些級聯的弱分類器來排除負樣本。在最後一層卷積的特徵影象上,留下來的那些候選區域再進行分類和迴歸。

SDP-CRC的準確率比Fast RNN提高了不少,檢測時間縮短到了471ms每幀。


2, 不採用Region Propsal, 直接預測邊界框的方法

2.1 YOLO[7]

YOLO的思想是摒棄生成候選區域的中間步驟,通過單個卷積神經網路直接對各個邊界框進行迴歸並且預測相應的類別的概率。 該方法將輸入影象分成S\times S大小的網格。每一個網格單元預測B個邊界框和這些邊界框的可信度,有五個預測值:邊界框的中心相對於網格單元中心的座標,邊界框相對於整個影象的寬和高,還有該邊界框的可信度(基於和ground truth之間的IoU)。每一個單元格還預測該單元格屬於C個類別的概率,因此整個網路的輸出是一個大小為S\times S \times (5*B+C)的張量。在實驗中,S=7,  B=2, C=20,因此輸出的大小是7\times 7\times 30

在測試階段,單元格的類別概率與該單元格的B個邊界框的可信度相乘,得到各個邊界框分別包含各個類別的物體的可信度。

YOLO的優點是速度快,該文章中使用的24層卷積網路在測試影象上可達到45幀每秒,而使用另一個簡化的網路結構,可達到155幀每秒。該方法的缺點有:1, 邊界框的預測有很大的空間限制,例如每一個單元格只預測兩個邊界框,並且只有一個類別。2,該方法不能很好地檢測到成群出現的一些小的目標,比如一群鳥。3,如果檢測目標的長寬比在訓練資料中沒有出現過或者不常見,該模型的泛化能力較弱。

2.2, G-CNN[8]

G-CNN將目標檢測問題看作是把檢測框從一些固定的網格逐漸變化到物體的真實邊框的問題。 這是一個經過幾次迭代,不斷更新的過程。

其原理圖如上所示,初始檢測框是對整個影象進行不同尺度的網格劃分得到的,在經過卷積後得到物體的特徵影象,將初始邊框對應的特徵影象通過Fast R-CNN 中的方法轉化為一個固定大小的特徵影象,通過迴歸得到更加準確的邊框,再次將這個新邊框作為初始邊框,做新的一次迭代。經過若干次迭代後的邊框作為輸出。

G-CNN中使用約180個初始邊框,經過5次迭代, 檢測幀率在3fps左右,準確率比Fast R-CNN要好一些。

2.3, SSD[9]

SSD也是使用單個的卷積神經網路對影象進行卷積後,在特徵影象的每一個位置處預測一系列不同尺寸和長寬比的邊界框。在測試階段,該網路對每一個邊界框中分別包含各個類別的物體的可能性進行預測,並且對邊界框進行調整以適應目標物體的形狀。

SSD在訓練時只需要一幅輸入影象和該影象中出現的物體的邊界框。在不同的卷積層輸出是不同尺度的特徵影象(如上圖中的8\times 84\times 4),在若干層的特徵影象上的每一個位置處, 計算若干個(如4個)預設邊界框內出現各個目標物體的置信度和目標物體的真實邊界框相對於預設邊界框的偏差。因此對於大小為mn的特徵影象,共產生(c+4)kmn個輸出。這有點類似於Faster R-CNN 中的錨的概念,但是將這個概念用到了不同解析度的特徵影象上。SSD和YOLO的對比如下圖:

在VOC 2007測試影象上,對於300\times300大小的輸入影象,SSD可達到72.1% mAP的準確率,速度為58幀每秒,且能預測7k以上個邊界框,而YOLO只能預測98個。下圖是上述幾個演算法在效能上的對比:

參考文獻

[2] Girshick, Ross. "Fast r-cnn." ICCV2015.

[8] Najibi, Mahyar, Mohammad Rastegari, and Larry S. Davis. "G-CNN: an Iterative Grid Based Object Detector." arXiv preprint arXiv:1512.07729 (2015).

[9] Liu, Wei, et al. "SSD: Single Shot MultiBox Detector." arXiv preprint arXiv:1512.02325 (2015).