綜述|基於深度學習的目標檢測(一)


目錄


概述

圖像分類,檢測及分割是計算機視覺領域的三大任務。圖像分類模型(詳情見這裏)是將圖像劃分爲單個類別,通常對應於圖像中最突出的物體。但是現實世界的很多圖片通常包含不只一個物體,此時如果使用圖像分類模型爲圖像分配一個單一標籤其實是非常粗糙的,並不準確。對於這樣的情況,就需要目標檢測模型,目標檢測模型可以識別一張圖片的多個物體,並可以定位出不同物體(給出邊界框)。目標檢測在很多場景有用,如無人駕駛和安防系統。

這裏寫圖片描述

圖像分類,目標檢測與實例分割的對比

目前主流的目標檢測算法主要是基於深度學習模型,其可以分成兩大類:(1)two-stage檢測算法,其將檢測問題劃分爲兩個階段,首先產生候選區域(region proposals),然後對候選區域分類(一般還需要對位置精修),這類算法的典型代表是基於region proposal的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等;(2)one-stage檢測算法,其不需要region proposal階段,直接產生物體的類別概率和位置座標值,比較典型的算法如YOLO和SSD。目標檢測模型的主要性能指標是檢測準確度和速度,對於準確度,目標檢測要考慮物體的定位準確性,而不單單是分類準確度。一般情況下,two-stage算法在準確度上有優勢,而one-stage算法在速度上有優勢。不過,隨着研究的發展,兩類算法都在兩個方面做改進。Google在2017年開源了TensorFlow Object Detection API,並對主流的Faster R-CNN,R-FCN及SSD三個算法在MS COCO數據集上的性能做了細緻對比(見Huang et al. 2017),如下圖所示。近期,Facebook的FAIR也開源了基於Caffe2的目標檢測平臺Detectron,其實現了最新的Mask R-CNN,RetinaNet等檢測算法,並且給出了這些算法的Baseline Results 。不得不說,準確度(accuracy)和速度(speed)是一對矛盾體,如何更好地平衡它們一直是目標檢測算法研究的一個重要方向。

這裏寫圖片描述

Faster R-CNN,R-FCN及SSD算法在MS COCO數據集上的性能對比

在這篇長文中,我們將對最新的目標檢測算法做一個綜述。在介紹目標檢測算法之前,先簡單介紹目標檢測領域常用的數據集以及性能指標。

數據集和性能指標

目標檢測常用的數據集包括PASCAL VOC,ImageNet,MS COCO等數據集,這些數據集用於研究者測試算法性能或者用於競賽。目標檢測的性能指標要考慮檢測物體的位置以及預測類別的準確性,下面我們會說到一些常用的性能評估指標。

數據集

PASCAL VOC(The PASCAL Visual Object Classification)是目標檢測,分類,分割等領域一個有名的數據集。從2005到2012年,共舉辦了8個不同的挑戰賽。PASCAL VOC包含約10,000張帶有邊界框的圖片用於訓練和驗證。但是,PASCAL VOC數據集僅包含20個類別,因此其被看成目標檢測問題的一個基準數據集。

ImageNet在2013年放出了包含邊界框的目標檢測數據集。訓練數據集包含500,000張圖片,屬於200類物體。由於數據集太大,訓練所需計算量很大,因而很少使用。同時,由於類別數也比較多,目標檢測的難度也相當大。2014 ImageNet數據集和2012 PASCAL VOC數據集的對比在這裏

另外一個有名的數據集是Microsoft公司(見T.-Y.Lin and al. 2015)建立的MS COCO(Common Objects in COntext)數據集。這個數據集用於多種競賽:圖像標題生成,目標檢測,關鍵點檢測和物體分割。對於目標檢測任務,COCO共包含80個類別,每年大賽的訓練和驗證數據集包含超過120,000個圖片,超過40,000個測試圖片。測試集最近被劃分爲兩類,一類是test-dev數據集用於研究者,一類是test-challenge數據集用於競賽者。測試集的標籤數據沒有公開,以避免在測試集上過擬合。在COCO 2017 Detection Challenge中,曠視科技團隊憑藉提出的Light-Head R-CNN模型奪得冠軍(AP爲0.526 ),看來還是two-stage算法準確度更勝一籌

這裏寫圖片描述

2015 COCO數據集的分割實例. 來源: T.-Y.Lin and al. (2015)

這裏寫圖片描述

目標檢測的主流數據集. 來源: https://tryolabs.com/blog/

性能指標

目標檢測問題同時是一個迴歸和分類問題。首先,爲了評估定位精度,需要計算IoU(Intersection over Union,介於0到1之間),其表示預測框與真實框(ground-truth box)之間的重疊程度。IoU越高,預測框的位置越準確。因而,在評估預測框時,通常會設置一個IoU閾值(如0.5),只有當預測框與真實框的IoU值大於這個閾值時,該預測框才被認定爲真陽性(True Positive, TP),反之就是假陽性(False Positive,FP)。

對於二分類,AP(Average Precision)是一個重要的指標,這是信息檢索中的一個概念,基於precision-recall曲線計算出來,詳情見這裏。對於目標檢測,首先要單獨計算各個類別的AP值,這是評估檢測效果的重要指標。取各個類別的AP的平均值,就得到一個綜合指標mAP(Mean Average Precision),mAP指標可以避免某些類別比較極端化而弱化其它類別的性能這個問題。

對於目標檢測,mAP一般在某個固定的IoU上計算,但是不同的IoU值會改變TP和FP的比例,從而造成mAP的差異。COCO數據集提供了官方的評估指標,它的AP是計算一系列IoU下(0.5:0.05:0.9,見說明)AP的平均值,這樣可以消除IoU導致的AP波動。其實對於PASCAL VOC數據集也是這樣,Facebook的Detectron上的有比較清晰的實現

除了檢測準確度,目標檢測算法的另外一個重要性能指標是速度,只有速度快,才能實現實時檢測,這對一些應用場景極其重要。評估速度的常用指標是每秒幀率(Frame Per Second,FPS),即每秒內可以處理的圖片數量。當然要對比FPS,你需要在同一硬件上進行。另外也可以使用處理一張圖片所需時間來評估檢測速度,時間越短,速度越快。

R-CNN

R-CNN(R. Girshick et al., 2014)是基於region proposal方法的目標檢測算法系列開山之作,其先進行區域搜索,然後再對候選區域進行分類。在R-CNN中,選用Selective search方法(J.R.R. Uijlings and al. 2012)來生成候選區域,這是一種啓發式搜索算法。它先通過簡單的區域劃分算法將圖片劃分成很多小區域,然後通過層級分組方法按照一定相似度合併它們,最後的剩下的就是候選區域(region proposals),它們可能包含一個物體。

![image.png-197.3kB][5]

Selective Search方法:上面是分割結果,下面是候選框. 來源: J.R.R. Uijlings and al. (2012)

對於一張圖片,R-CNN基於selective search方法大約生成2000個候選區域,然後每個候選區域被resize成固定大小(227×227227×227 在做預測時,利用上述公式可以反求出預測框的修正位置。R-CNN對每個類別都訓練了單獨的迴歸器,採用最小均方差損失函數進行訓練。

R-CNN模型的訓練是多管道的,CNN模型首先使用2012 ImageNet中的圖像分類競賽數據集進行預訓練。然後在檢測數據集上對CNN模型進行finetuning,其中那些與真實框的IoU大於0.5的候選區域作爲正樣本,剩餘的候選區域是負樣本(背景)。共訓練兩個版本,第一版本使用2012 PASCAL VOC數據集,第二個版本使用2013 ImageNet中的目標檢測數據集。最後,對數據集中的各個類別訓練SVM分類器(注意SVM訓練樣本與CNN模型的funetuning不太一樣,只有IoU小於0.3的才被看成負樣本)。

總體來看,R-CNN是非常直觀的,就是把檢測問題轉化爲了分類問題,並且採用了CNN模型進行分類,但是效果卻很好。最好的R-CNN模型在2012 PASCAL VOC數據集的mAP爲62.4%(比第二名高出了22個百分點),在2013 ImageNet上的mAP爲31.4%(比第二名高出7.1個百分點)。

![image.png-178.4kB][6]

R-CNN模型結構圖

SPP-net

SPP-net(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition, He et al. 2014)提出的起因是解決圖像分類中要求輸入圖片固定大小的問題,但是SPP-net中所提出的空間金字塔池化層(Spatial Pyramid Pooling Layer, SPP)可以和R-CNN結合在一起並提升其性能。採用深度學習模型解決圖像分類問題時,往往需要圖像的大小固定(比如224×224224×224),這並不是CNN層的硬性要求,主要原因在於CNN層提取的特徵圖最後要送入全連接層(如softmax層),對於變大小圖片,CNN層得到的特徵圖大小也是變化的,但是全連接層需要固定大小的輸入,所以必須要將圖片通過resize, crop或wrap等方式固定大小(訓練和測試時都需要)。但是實際上真實的圖片的大小是各種各樣的,一旦固定大小可能會造成圖像損失,從而影響識別精度。爲了解決這個問題,SSP-net在CNN層與全連接層之間插入了空間金字塔池化層來解決這個矛盾。


SPP-net與普通網絡的結構對比

SPP層原理如下所所示,假定CNN層得到的特徵圖大小爲a×aa×a三個尺度。每個金字塔都得一個特徵,將它們連接在一起送入後面的全連接層即可,這樣就解決了變大小圖片輸入的問題了。SPP-net在ImageNet ILSVRC 2014圖像分類大賽中奪得了第三名。

這裏寫圖片描述

SPP-net中的空間金字塔池化層

那麼SPP-net和R-CNN有什麼關係呢?在R-CNN中,由於每個候選區域大小是不同,所以需要先resize成固定大小才能送入CNN網絡,SPP-net正好可以解決這個問題。繼續上前一步,就是R-CNN每次都要挨個使用CNN模型計算各個候選區域的特徵,這是極其費時的,不如直接將整張圖片送入CNN網絡,然後抽取候選區域的對應的特徵區域,採用SPP層,這樣可以大大減少計算量,並提升速度。基於SPP層的R-CNN模型在準確度上提升不是很大,但是速度卻比原始R-CNN模型快24-102倍。這也正是接下來Fast R-CNN所改進的方向。

這裏寫圖片描述

SPP層用於R-CNN模型

Fast R-CNN

Fast R-CNN(Fast Region-based Convolutional Network, R. Girshick 2015)的提出主要是爲了減少候選區域使用CNN模型提取特徵向量所消耗的時間,其主要借鑑了SPP-net的思想。在R-CNN中,每個候選區域都要單獨送入CNN模型計算特徵向量,這是非常費時的,而對於Fast R-CNN,其CNN模型的輸入是整張圖片,然後結合RoIs(Region of Interests)pooling和Selective Search方法從CNN得到的特徵圖中提取各個候選區域的所對應的特徵。對於每個候選區域,使用RoI pooling層來從CNN特徵圖中得到一個固定長和寬的特徵圖(長和寬是超參數,文中選用7×77×7,這個與R-CNN是一樣的,每個類別都預測4個位置座標值。

這裏寫圖片描述

Fast R-CNN的分類與迴歸預測. 來源:https://tryolabs.com/blog/

這裏寫圖片描述

RoI pooling原理圖,特徵圖大小爲8x8,候選區域爲5x7,輸出2x2. 來源:https://blog.deepsense.ai/region-of-interest-pooling-explained/

Fast R-CNN與R-CNN的另外的一個主要區別點是採用了softmax分類器而不是SVM分類器,而且訓練過程是單管道的,因爲Fast R-CNN將分類誤差和定位誤差合併在一起訓練,定位誤差採用smooth L1 而不是R-CNN中的L2。這裏說點題外話,就是R-CNN訓練是多管道的,除了對CNN模型預訓練,R-CNN還先對CNN模型funetuning,使用的是softmax分類器,但是最後卻又訓練SVM分類器(原因可以見原論文),直覺上感覺有點多此一舉,所以現在Fast R-CNN直接採用softmax分類器了。Fast R-CNN訓練採用mini-batch sampling,每個mini-batch大小爲128128),這裏的IoU閾值屬於超參數。在圖像分類中,當我們說batch_size=32時,是指的是32個圖片,在Fast R-CNN中並不是這樣,因爲一個圖片含有很多RoIs,每個batch使用的圖片非常少(內存限制),所以有時候你會看到Fast R-CNN訓練時直接從一個圖片中構建batch,這實現起來更容易一些。

L(p,u,tu,v)=Lcls(p,u)+λ[u>0]Lloc(tu,v)L(p,u,tu,v)=Lcls(p,u)+λ[u>0]Lloc(tu,v)

最好的Fast R-CNN模型在2007 PASCAL VOC測試集上的mAp爲70%,在2010 PASCAL VOC測試集上的mAP爲68.8%,而在2012 PASCAL VOC測試集上的mAP爲68.4%,準確度相比R-CNN略有提升,其實主要是速度更快。

這裏寫圖片描述

Fast R-CNN模型結構圖

Faster R-CNN

對於Fast R-CNN,其仍然需要selective search方法來生產候選區域,這是非常費時的。爲了解決這個問題,Faster R-CNN模型(The Faster Region-based Convolutional Network, S. Ren and al. 2016)引入了RPN (Region Proposal Network)直接產生候選區域。Faster R-CNN可以看成是RPN和Fast R-CNN模型的組合體,即Faster R-CNN = RPN + Fast R-CNN

對於RPN網絡,先採用一個CNN模型(一般稱爲特徵提取器)接收整張圖片並提取特徵圖。然後在這個特徵圖上採用一個N×NN×N的卷積,分別用於分類與迴歸。

這裏寫圖片描述

RPN架構圖

可以看到RPN採用的是二分類,僅區分背景與物體,但是不預測物體的類別,即class-agnostic。由於要同時預測座標值,在訓練時,要先將先驗框與ground-truth box進行匹配,原則爲:(1)與某個ground-truth box的IoU最高的先驗框;(2)與某個ground-truth box的IoU值大於0.7的先驗框,只要滿足一個,先驗框就可以匹配一個ground-truth,這樣該先驗框就是正樣本(屬於物體),並以這個ground-truth爲迴歸目標。對於那些與任何一個ground-truth box的IoU值都低於0.3的先驗框,其認爲是負樣本。RPN網絡是可以單獨訓練的,並且單獨訓練出來的RPN模型給出很多region proposals。由於先驗框數量龐大,RPN預測的候選區域很多是重疊的,要先進行NMS(non-maximum suppression,IoU閾值設爲0.7)操作來減少候選區域的數量,然後按照置信度降序排列,選擇top-N個region proposals來用於訓練Fast R-CNN模型。RPN的作用就是代替了Selective search的作用,但是速度更快,因此Faster R-CNN無論是訓練還是預測都可以加速。

Faster R-CNN模型採用一種4步迭代的訓練策略:(1)首先在ImageNet上預訓練RPN,並在PASCAL VOC數據集上finetuning;(2)使用訓練的PRN產生的region proposals單獨訓練一個Fast R-CNN模型,這個模型也先在ImageNet上預訓練;(3)用Fast R-CNN的CNN模型部分(特徵提取器)初始化RPN,然後對RPN中剩餘層進行finetuning,此時Fast R-CNN與RPN的特徵提取器是共享的;(4)固定特徵提取器,對Fast R-CNN剩餘層進行finetuning。這樣經過多次迭代,Fast R-CNN可以與RPN有機融合在一起,形成一個統一的網絡。其實還有另外一中近似聯合訓練策略,將RPN的2個loss和Fast R-CNN的2個loss結合在一起,然後共同訓練。注意這個過程,Fast R-CNN的loss不對RPN產生的region proposals反向傳播,所以這是一種近似(如果考慮這個反向傳播,那就是非近似聯合訓練)。應該來說,聯合訓練速度更快,並且可以訓練出同樣的性能。

最好的Faster R-CNN模型在 2007 PASCAL VOC測試集上的mAP爲78.8% ,而在2012 PASCAL VOC測試集上的mAP爲75.9%。論文中還在 COCO數據集上進行了測試。Faster R-CNN中的某個模型可以比採用selective search方法的Fast R-CNN模型快34倍。可以看到,採用了RPN之後,無論是準確度還是速度,Faster R-CNN模型均有很大的提升。Faster R-CNN採用RPN代替啓發式region proposal的方法,這是一個重大變革,後面的two-stage方法的研究基本上都採用這種基本框架,而且和後面算法相比,Faster R-CNN在準確度仍然佔據上風。

這裏寫圖片描述

Faster R-CNN模型結構圖

參考文章

  1. Review of Deep Learning Algorithms for Object Detection [主要參考]
  2. Deep Learning for Object Detection: A Comprehensive Review
  3. Faster R-CNN: Down the rabbit hole of modern object detection
  4. Object detection: an overview in the age of Deep Learning
  5. Zero to Hero: Guide to Object Detection using Deep Learning: Faster R-CNN,YOLO,SSD
  6. R-CNN
  7. SPP-net
  8. Fast R-CNN
  9. Faster R-CNN

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章