乾貨 | 目標檢測入門,看這篇就夠了

關於作者: @李家丞 同濟大學數學系本科在讀,現為格靈深瞳演算法部實習生

作者個人主頁:李家丞|個人主頁|關於我

近年來,深度學習模型逐漸取代傳統機器視覺方法而成為目標檢測領域的主流演算法,本系列文章將回顧早期的經典工作,並對較新的趨勢做一個全景式的介紹,幫助讀者對這一領域建立基本的認識。由於作者學歷尚淺,水平有限,不實和不當之處也請指出和糾正,歡迎大家評論交流。

註:文章將分為五個部分,今天先po上第一部分,後面四部分,我們會慢慢更新。

(一)目標檢測經典模型回顧

(二)目標檢測模型的評測與訓練技巧:

格靈深瞳DeepGlint:目標檢測入門(二):模型的評測與訓練技巧zhuanlan.zhihu.com圖標

(三)目標檢測新趨勢之基礎網路結構演進、分類定位的權衡

(四)目標檢測新趨勢之特徵復用、實時性

(五)目標檢測新趨勢拾遺

——————————————————————————————————————

目標檢測的任務表述

如何從圖像中解析出可供計算機理解的信息,是機器視覺的中心問題。深度學習模型由於其強大的表示能力,加之數據量的積累和計算力的進步,成為機器視覺的熱點研究方向。

那麼,如何理解一張圖片?根據後續任務的需要,有三個主要的層次。

圖像理解的三個層次

一是分類(Classification),即是將圖像結構化為某一類別的信息,用事先確定好的類別(string)或實例ID來描述圖片。這一任務是最簡單、最基礎的圖像理解任務,也是深度學習模型最先取得突破和實現大規模應用的任務。其中,ImageNet是最權威的評測集,每年的ILSVRC催生了大量的優秀深度網路結構,為其他任務提供了基礎。在應用領域,人臉、場景的識別等都可以歸為分類任務。

二是檢測(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

本文的兩大貢獻: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

文章指出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

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

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

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有重疊)。

另一方面,單階段模型只有一次類別預測和位置回歸,卷積運算的共享程度更高,擁有更快的速度和更小的內存佔用。讀者將會在接下來的文章中看到,兩種類型的模型也在互相吸收彼此的優點,這也使得兩者的界限更為模糊。

在下一篇中,我們將介紹檢測模型的評測指標與評測數據集,並總結常用的訓練和建模技巧。

推薦閱讀:

元璟資本田敏:投資醫療,AI雖好但並非全部
飯桌上聊起人工智慧,這是最周全的科普姿勢。
有關AI的利弊,李開復真的說對了嗎?(芥子說物聯 第十二期)
AI與安全
AI重大突破:DeepMind 構建心智理論神經網路讓機器互相理解

TAG:人工智慧演算法 | 目標檢測 | AI技術 |