淘新聞

看了這篇文章,瞭解深度卷積神經網路在目標檢測中的進展

近些年來,深度卷積神經網路(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 的大小為, 要輸出的大小為, 那麼就將該 ROI 分成 個格子,每一個格子的大小為, 然後對每一格子使用 max-pooling 得到目標大小的特徵圖像。

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

公式中的兩項分別是 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)方法的原理圖如上,先通過對輸入圖像的數層卷積得到一個特徵圖像,然後在特徵圖像上生成候選區域,做法是使用一個(3)的滑動視窗,將局部的特徵圖像轉換成一個低維特徵, 預測個的區域(cls 層,個輸出)是否為候選區域和對應的個邊框(reg 層,個輸出)。這裡的個區域被稱為錨(anchor), 對應著與滑動視窗具有相同的中心的不同大小和不同長寬比的矩形框。假設卷積後的特徵圖像大小為, 那麼一共有個錨。這種特徵提取和候選區域生成的方法具有位移不變性。

使用 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 的思想是摒棄生成候選區域的中間步驟,通過單個卷積神經網路直接對各個邊界框進行回歸並且預測相應的類別的概率。

該方法將輸入圖像分成大小的網格。每一個網格單元預測 B 個邊界框和這些邊界框的可信度,有五個預測值:邊界框的中心相對於網格單元中心的座標,邊界框相對於整個圖像的寬和高,還有該邊界框的可信度(基於和 ground truth 之間的 IoU)。每一個儲存格還預測該儲存格屬於個類別的概率,因此整個網路的輸出是一個大小為的張量。在實驗中,,因此輸出的大小是。

在測試階段,儲存格的類別概率與該儲存格的 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 在訓練時只需要一幅輸入圖像和該圖像中出現的物體的邊界框。在不同的卷積層輸出是不同尺度的特徵圖像(如上圖中的和),在若干層的特徵圖像上的每一個位置處, 計算若干個(如 4 個)默認邊界框內出現各個目標物體的置信度和目標物體的真實邊界框相對於默認邊界框的偏差。因此對於大小為的特徵圖像,共產生個輸出。這有點類似於 Faster R-CNN 中的錨的概念,但是將這個概念用到了不同解析度的特徵圖像上。SSD 和 YOLO 的對比如下圖:

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

參考文獻

[1] Girshick, Ross, et al. "

Rich feature hierarchies for accurate object detection and semantic segmentation.

" CVPR 2014.

[2] Girshick, Ross. "

Fast r-cnn.

" ICCV2015.

[3] Ren, Shaoqing, et al.

"Faster R-CNN: Towards real-time object detection with region proposal networks.

" Advances in neural information processing systems. 2015.

[4] Bell, Sean, et al. "

Inside-outside net: Detecting objects in context with skip pooling and recurrent neural networks.

" arXiv preprint arXiv:1512.04143 (2015).

[5] Kong, Tao, et al. "

HyperNet: Towards Accurate Region Proposal Generation and Joint Object Detection.

" arXiv preprint arXiv:1604.00600 (2016).

[6] Yang, Fan, Wongun Choi, and Yuanqing Lin. "

Exploit all the layers: Fast and accurate cnn object detector with scale dependent pooling and cascaded rejection classifiers.

" CVPR 2016.

[7] Redmon, Joseph, et al. "

You only look once: Unified, real-time object detection.

" arXiv preprint arXiv:1506.02640 (2015).

[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).

雷鋒網按:原

作者

taigw

,本文原載於

知乎專欄