乾貨 | 目標檢測入門,看這篇就夠了(上)
作者 | 李家丞( 同濟大學數學系本科在讀,現格靈深瞳演算法部實習生)
近年來,深度學習模型逐漸取代傳統機器視覺方法而成為目標檢測領域的主流演算法,本系列文章將回顧早期的經典工作,並對較新的趨勢做一個全景式的介紹,幫助讀者對這一領域建立基本的認識。(營長注:因本文篇幅較長,營長將其分為上、下兩部分。)
導言:目標檢測的任務表述
如何從影象中解析出可供計算機理解的資訊,是機器視覺的中心問題。深度學習模型由於其強大的表示能力,加之資料量的積累和計算力的進步,成為機器視覺的熱點研究方向。
那麼,如何理解一張圖片?根據後續任務的需要,有三個主要的層次。
一是分類(Classification)
二是檢測(Detection)。分類任務關心整體,給出的是整張圖片的內容描述,而檢測則關注特定的物體目標,要求同時獲得這一目標的類別資訊和位置資訊。相比分類,檢測給出的是對圖片前景和背景的理解,我們需要從背景中分離出感興趣的目標,並確定這一目標的描述(類別和位置),因而,檢測模型的輸出是一個列表,列表的每一項使用一個數據組給出檢出目標的類別和位置(常用矩形檢測框的座標表示)。
三是分割(Segmentation)。分割包括語義分割(semantic segmentation)和例項分割(instance segmentation),前者是對前背景分離的拓展,要求分離開具有不同語義的影象部分,而後者是檢測任務的拓展,要求描述出目標的輪廓(相比檢測框更為精細)。分割是對影象的畫素級描述,它賦予每個畫素類別(例項)意義,適用於理解要求較高的場景,如無人駕駛中對道路和非道路的分割。
本系列文章關注的領域是目標檢測,即影象理解的中層次。
▌目標檢測入門(一):目標檢測經典模型回顧
本文結構
兩階段(2-stage)檢測模型
兩階段模型因其對圖片的兩階段處理得名,也稱為基於區域(Region-based)的方法,我們選取R-CNN系列工作作為這一型別的代表。
R-CNN: R-CNN系列的開山之作
Rich feature hierarchies for accurate object detection and semantic segmentation
論文連結:
https://arxiv.org/abs/1311.2524
本文的兩大貢獻:
1)CNN可用於基於區域的定位和分割物體;
2)監督訓練樣本數緊缺時,在額外的資料上預訓練的模型經過fine-tuning可以取得很好的效果。
第一個貢獻影響了之後幾乎所有2-stage方法,而第二個貢獻中用分類任務(Imagenet)中訓練好的模型作為基網路,在檢測問題上fine-tuning的做法也在之後的工作中一直沿用。
傳統的計算機視覺方法常用精心設計的手工特徵(如SIFT, HOG)描述影象,而深度學習的方法則倡導習得特徵,從影象分類任務的經驗來看,CNN網路自動習得的特徵取得的效果已經超出了手工設計的特徵。本篇在區域性區域應用卷積網路,以發揮卷積網路學習高質量特徵的能力。
R-CNN將檢測抽象為兩個過程,一是基於圖片提出若干可能包含物體的區域(即圖片的區域性裁剪,被稱為Region Proposal),文中使用的是Selective Search演算法;二是在提出的這些區域上運行當時表現最好的分類網路(AlexNet),得到每個區域內物體的類別。
另外,文章中的兩個做法值得注意。
一是資料的準備。輸入CNN前,我們需要根據Ground Truth對提出的Region Proposal進行標記,這裡使用的指標是IoU(Intersection over Union,交併比)。IoU計算了兩個區域之交的面積跟它們之並的比,描述了兩個區域的重合程度。
文章中特別提到,IoU閾值的選擇對結果影響顯著,這裡要談兩個threshold,一個用來識別正樣本(如跟ground truth的IoU大於0.5),另一個用來標記負樣本(即背景類,如IoU小於0.1),而介於兩者之間的則為難例(Hard Negatives),若標為正類,則包含了過多的背景資訊,反之又包含了要檢測物體的特徵,因而這些Proposal便被忽略掉。
另一點是位置座標的迴歸(Bounding-Box Regression),這一過程是Region Proposal向Ground Truth調整,實現時加入了log/exp變換來使損失保持在合理的量級上,可以看做一種標準化(Normalization)操作。
小結
R-CNN的想法直接明瞭,即將檢測任務轉化為區域上的分類任務,是深度學習方法在檢測任務上的試水。模型本身存在的問題也很多,如需要訓練三個不同的模型(proposal, classification, regression)、重複計算過多導致的效能問題等。儘管如此,這篇論文的很多做法仍然廣泛地影響著檢測任務上的深度模型革命,後續的很多工作也都是針對改進這一工作而展開,此篇可以稱得上"The First Paper"。
Fast R-CNN: 共享卷積運算
Fast R-CNN
論文連結:
https://arxiv.org/abs/1504.08083
文章指出R-CNN耗時的原因是CNN是在每一個Proposal上單獨進行的,沒有共享計算,便提出將基礎網路在圖片整體上執行完畢後,再傳入R-CNN子網路,共享了大部分計算,故有Fast之名。
上圖是Fast R-CNN的架構。圖片經過feature extractor得到feature map, 同時在原圖上執行Selective Search演算法並將RoI(Region of Interset,實為座標組,可與Region Proposal混用)對映到到feature map上,再對每個RoI進行RoI Pooling操作便得到等長的feature vector,將這些得到的feature vector進行正負樣本的整理(保持一定的正負樣本比例),分batch傳入並行的R-CNN子網路,同時進行分類和迴歸,並將兩者的損失統一起來。
RoI Pooling 是對輸入R-CNN子網路的資料進行準備的關鍵操作。我們得到的區域常常有不同的大小,在對映到feature map上之後,會得到不同大小的特徵張量。RoI Pooling先將RoI等分成目標個數的網格,再在每個網格上進行max pooling,就得到等長的RoI feature vector。
文章最後的討論也有一定的借鑑意義:
multi-loss traing相比單獨訓練classification確有提升
multi-scale相比single-scale精度略有提升,但帶來的時間開銷更大。一定程度上說明CNN結構可以內在地學習尺度不變性
在更多的資料(VOC)上訓練後,精度是有進一步提升的
Softmax分類器比"one vs rest"型的SVM表現略好,引入了類間的競爭
更多的Proposal並不一定帶來精度的提升
小結
Fast R-CNN的這一結構正是檢測任務主流2-stage方法所採用的元結構的雛形。
文章將Proposal, Feature Extractor, Object Classification&Localization統一在一個整體的結構中,並通過共享卷積計算提高特徵利用效率,是最有貢獻的地方。
Faster R-CNN: 兩階段模型的深度化
Faster R-CNN: Towards Real Time Object Detection with Region Proposal Networks
論文連結:
https://arxiv.org/abs/1506.01497
Faster R-CNN是2-stage方法的奠基性工作,提出的RPN網路取代Selective Search演算法使得檢測任務可以由神經網路端到端地完成。粗略的講,Faster R-CNN = RPN + Fast R-CNN,跟RCNN共享卷積計算的特性使得RPN引入的計算量很小,使得Faster R-CNN可以在單個GPU上以5fps的速度執行,而在精度方面達到SOTA(State of the Art,當前最佳)。
本文的主要貢獻是提出Regional Proposal Networks,替代之前的SS演算法。RPN網路將Proposal這一任務建模為二分類(是否為物體)的問題。
第一步是在一個滑動視窗上生成不同大小和長寬比例的anchor box(如上圖右邊部分),取定IoU的閾值,按Ground Truth標定這些anchor box的正負。於是,傳入RPN網路的樣本資料被整理為anchor box(座標)和每個anchor box是否有物體(二分類標籤)。
RPN網路將每個樣本對映為一個概率值和四個座標值,概率值反應這個anchor box有物體的概率,四個座標值用於迴歸定義物體的位置。最後將二分類和座標迴歸的損失統一起來,作為RPN網路的目標訓練。
由RPN得到Region Proposal在根據概率值篩選後經過類似的標記過程,被傳入R-CNN子網路,進行多分類和座標迴歸,同樣用多工損失將二者的損失聯合。
小結
Faster R-CNN的成功之處在於用RPN網路完成了檢測任務的"深度化"。使用滑動視窗生成anchor box的思想也在後來的工作中越來越多地被採用(YOLO v2等)。這項工作奠定了"RPN+RCNN"的兩階段方法元結構,影響了大部分後續工作。
單階段(1-stage)檢測模型
單階段模型沒有中間的區域檢出過程,直接從圖片獲得預測結果,也被成為Region-free方法。
YOLO
You Only Look Once: Unified, Real-Time Object Detection
論文連結:
https://arxiv.org/abs/1506.02640
YOLO是單階段方法的開山之作。它將檢測任務表述成一個統一的、端到端的迴歸問題,並且以只處理一次圖片同時得到位置和分類而得名。
YOLO的主要優點:
快。
全域性處理使得背景錯誤相對少,相比基於區域性(區域)的方法, 如Fast RCNN。
泛化效能好,在藝術作品上做檢測時,YOLO表現比Fast R-CNN好。
YOLO的工作流程如下:
1.準備資料:將圖片縮放,劃分為等分的網格,每個網格按跟Ground Truth的IoU分配到所要預測的樣本。
2.卷積網路:由GoogLeNet更改而來,每個網格對每個類別預測一個條件概率值,並在網格基礎上生成B個box,每個box預測五個迴歸值,四個表徵位置,第五個表徵這個box含有物體(注意不是某一類物體)的概率和位置的準確程度(由IoU表示)。測試時,分數如下計算: