干貨 | 目標檢測入門,看這篇就夠了(目標檢測經典模型回顧)
兩階段(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網絡結構
R-CNN將檢測抽象為兩個過程,一是基于圖片提出若干可能包含物體的區域(即圖片的局部裁剪,被稱為Region Proposal),文中使用的是Selective Search算法;二是在提出的這些區域上運行當時表現最好的分類網絡(AlexNet),得到每個區域內物體的類別。
另外,文章中的兩個做法值得注意。
IoU的計算
一是數據的準備。輸入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網絡結構
上圖是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圖示,來源:https://blog.deepsense.ai/region-of-interest-pooling-explained/
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這一任務建模為二分類(是否為物體)的問題。
Faster R-CNN網絡結構
第一步是在一個滑動窗口上生成不同大小和長寬比例的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網絡結構
YOLO的工作流程如下:
1.準備數據:將圖片縮放,劃分為等分的網格,每個網格按跟Ground Truth的IoU分配到所要預測的樣本。
2.卷積網絡:由GoogLeNet更改而來,每個網格對每個類別預測一個條件概率值,并在網格基礎上生成B個box,每個box預測五個回歸值,四個表征位置,第五個表征這個box含有物體(注意不是某一類物體)的概率和位置的準確程度(由IoU表示)。測試時,分數如下計算:
等式左邊第一項由網格預測,后兩項由每個box預測,以條件概率的方式得到每個box含有不同類別物體的分數。 因而,卷積網絡共輸出的預測值個數為S×S×(B×5+C),其中S為網格數,B為每個網格生成box個數,C為類別數。
3.后處理:使用NMS(Non-Maximum Suppression,非極大抑制)過濾得到最后的預測框
損失函數的設計
YOLO的損失函數分解,來源:https://zhuanlan.zhihu.com/p/24916786
損失函數被分為三部分:坐標誤差、物體誤差、類別誤差。為了平衡類別不均衡和大小物體等帶來的影響,損失函數中添加了權重并將長寬取根號。
小結
YOLO提出了單階段的新思路,相比兩階段方法,其速度優勢明顯,實時的特性令人印象深刻。但YOLO本身也存在一些問題,如劃分網格較為粗糙,每個網格生成的box個數等限制了對小尺度物體和相近物體的檢測。
SSD: Single Shot Multibox Detector
SSD: Single Shot Multibox Detector
論文鏈接:
https://arxiv.org/abs/1512.02325
SSD網絡結構
SSD相比YOLO有以下突出的特點:
-
多尺度的feature map:基于VGG的不同卷積段,輸出feature map到回歸器中。這一點試圖提升小物體的檢測精度。
-
更多的anchor box,每個網格點生成不同大小和長寬比例的box,并將類別預測概率基于box預測(YOLO是在網格上),得到的輸出值個數為(C+4)×k×m×n,其中C為類別數,k為box個數,m×n為feature map的大小。
小結
SSD是單階段模型早期的集大成者,達到跟接近兩階段模型精度的同時,擁有比兩階段模型快一個數量級的速度。后續的單階段模型工作大多基于SSD改進展開。
檢測模型基本特點
最后,我們對檢測模型的基本特征做一個簡單的歸納。
兩階段檢測模型Pipeline,來源:https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/
檢測模型整體上由基礎網絡(Backbone Network)和檢測頭部(Detection Head)構成。前者作為特征提取器,給出圖像不同大小、不同抽象層次的表示;后者則依據這些表示和監督信息學習類別和位置關聯。檢測頭部負責的類別預測和位置回歸兩個任務常常是并行進行的,構成多任務的損失進行聯合訓練。
檢測模型頭部并行的分支,來源同上
相比單階段,兩階段檢測模型通常含有一個串行的頭部結構,即完成前背景分類和回歸后,把中間結果作為RCNN頭部的輸入再進行一次多分類和位置回歸。這種設計帶來了一些優點:
-
對檢測任務的解構,先進行前背景的分類,再進行物體的分類,這種解構使得監督信息在不同階段對網絡參數的學習進行指導
-
RPN網絡為RCNN網絡提供良好的先驗,并有機會整理樣本的比例,減輕RCNN網絡的學習負擔
這種設計的缺點也很明顯:中間結果常常帶來空間開銷,而串行的方式也使得推斷速度無法跟單階段相比;級聯的位置回歸則會導致RCNN部分的重復計算(如兩個RoI有重疊)。
另一方面,單階段模型只有一次類別預測和位置回歸,卷積運算的共享程度更高,擁有更快的速度和更小的內存占用。讀者將會在接下來的文章中看到,兩種類型的模型也在互相吸收彼此的優點,這也使得兩者的界限更為模糊。

責任編輯:售電衡衡
-
權威發布 | 新能源汽車產業頂層設計落地:鼓勵“光儲充放”,有序推進氫燃料供給體系建設
2020-11-03新能源,汽車,產業,設計 -
中國自主研制的“人造太陽”重力支撐設備正式啟運
2020-09-14核聚變,ITER,核電 -
探索 | 既耗能又可供能的數據中心 打造融合型綜合能源系統
2020-06-16綜合能源服務,新能源消納,能源互聯網
-
新基建助推 數據中心建設將迎爆發期
2020-06-16數據中心,能源互聯網,電力新基建 -
泛在電力物聯網建設下看電網企業數據變現之路
2019-11-12泛在電力物聯網 -
泛在電力物聯網建設典型實踐案例
2019-10-15泛在電力物聯網案例
-
權威發布 | 新能源汽車產業頂層設計落地:鼓勵“光儲充放”,有序推進氫燃料供給體系建設
2020-11-03新能源,汽車,產業,設計 -
中國自主研制的“人造太陽”重力支撐設備正式啟運
2020-09-14核聚變,ITER,核電 -
能源革命和電改政策紅利將長期助力儲能行業發展
-
探索 | 既耗能又可供能的數據中心 打造融合型綜合能源系統
2020-06-16綜合能源服務,新能源消納,能源互聯網 -
5G新基建助力智能電網發展
2020-06-125G,智能電網,配電網 -
從智能電網到智能城市