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

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

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

本章是《乾貨 | 目標檢測入門,看這篇就夠了》的第二篇連載。想回顧上一篇的內容,歡迎搭電梯直達:

格靈深瞳DeepGlint:乾貨 | 目標檢測入門,看這篇就夠了zhuanlan.zhihu.com圖標

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

文章結構

檢測模型的評測指標

目標檢測模型本源上可以用統計推斷的框架描述,我們關注其犯第一類錯誤和第二類錯誤的概率,通常用準確率和召回率來描述。準確率描述了模型有多准,即在預測為正例的結果中,有多少是真正例;召回率則描述了模型有多全,即在為真的樣本中,有多少被我們的模型預測為正例。不同的任務,對兩類錯誤有不同的偏好,常常在某一類錯誤不多於一定閾值的情況下,努力減少另一類錯誤。在檢測中,mAP(mean Average Precision)作為一個統一的指標將這兩種錯誤兼顧考慮。

具體地,對於每張圖片,檢測模型輸出多個預測框(常常遠超真實框的個數),我們使用IoU(Intersection Over Union,交並比)來標記預測框是否為預測正確。標記完成後,隨著預測框的增多,召回率總會提升,在不同的召回率水平下對準確率做平均,即得到AP,最後再對所有類別按其所佔比例做平均,即得到mAP。

在較早的Pascal VOC數據集上,常採用固定的一個IoU閾值(如0.5, 0.75)來計算mAP,現階段較為權威的MS COCO數據集上,對不同的IoU閾值(0.5-0.95,0.05為步長)分別計算AP,再綜合平均,並且給出了不同大小物體分別的AP表現,對定位準確的模型給予獎勵並全面地展現不同大小物體上檢測演算法的性能,更為科學合理。

在實踐中,我們不僅關注檢測模型的精度,還關注其運行的速度,常常用FPS(Frame Per Second,每秒幀率)來表示檢測模型能夠在指定硬體上每秒處理圖片的張數。通常來講,在單塊GPU上,兩階段方法的FPS一般在個位數,而單階段方法可以達到數十。現在檢測模型運行的平台並不統一,實踐中也不能部署較為昂貴的GPU進行推斷。事實上,很多文章並沒有嚴謹討論其提出模型的速度表現(加了較多的trick以使精度達到SOTA),另外,考慮到目前移動端專用晶元的發展速度和研究進展,速度方面的指標可能較難形成統一的參考標準,需要謹慎看待文章中彙報的測試結果。

標準評測數據集

Pascal VOC(Pascal Visual Object Classes)

自2005年起每年舉辦一次比賽,最開始只有4類,到2007年擴充為20個類,共有兩個常用的版本:2007和2012。學術界常用5k的trainval2007和16k的trainval2012作為訓練集(07+12),test2007作為測試集,用10k的trainval2007+test2007和和16k的trainval2012作為訓練集(07++12),test2012作為測試集,分別彙報結果。

Pascal VOC對早期檢測工作起到了重要的推動作用,目前提升的空間相對有限,權威評測集的交接棒也逐漸傳給了下面要介紹的COCO。

MS COCO(Common Objects in COntext)

檢測任務在COCO數據集上的進展

COCO數據集收集了大量包含常見物體的日常場景圖片,並提供像素級的實例標註以更精確地評估檢測和分割演算法的效果,致力於推動場景理解的研究進展。依託這一數據集,每年舉辦一次比賽,現已涵蓋檢測、分割、關鍵點識別、注釋等機器視覺的中心任務,是繼ImageNet Chanllenge以來最有影響力的學術競賽之一。

iconic與non-iconic圖片對比

相比ImageNet,COCO更加偏好目標與其場景共同出現的圖片,即non-iconic images。這樣的圖片能夠反映視覺上的語義,更符合圖像理解的任務要求。而相對的iconic images則更適合淺語義的圖像分類等任務。

COCO的檢測任務共含有80個類,在2014年發布的數據規模分train/val/test分別為80k/40k/40k,學術界較為通用的劃分是使用train和35k的val子集作為訓練集(trainval35k),使用剩餘的val作為測試集(minival),同時向官方的evaluation server提交結果(test-dev)。除此之外,COCO官方也保留一部分test數據作為比賽的評測集。

COCO數據集分布

在分布方面,COCO的每個類含有更多實例,分布也較為均衡(上圖a),每張圖片包含更多類和更多的實例(上圖b和c,均為直方圖,每張圖片平均分別含3.3個類和7.7個實例),相比Pascal VOC,COCO還含有更多的小物體(下圖,橫軸是物體占圖片的比例)。

COCO數據集物體大小分布

如本文第一節所述,COCO提供的評測標準更為精細化,提供的API不僅包含了可視化、評測數據的功能,還有對模型的錯誤來源分析腳本,能夠更清晰地展現演算法的不足之處。COCO所建立的這些標準也逐漸被學術界認可,成為通用的評測標準。您可以在這裡找到目前檢測任務的LeaderBoard。

錯誤來源分解,詳見http://cocodataset.org/#detections-eval

Cityscapes

Cityscapes數據示例

Cityscapes數據集專註於現代城市道路場景的理解,提供了30個類的像素級標註,是自動駕駛方向較為權威的評測集。

檢測模型中的Bells and wisthles

本節介紹常見的提升檢測模型性能的技巧,它們常作為trick在比賽中應用。其實,這樣的名稱有失公允,部分工作反映了作者對檢測模型有啟發意義的觀察,有些具有成為檢測模型標準組件的潛力(如果在早期的工作中即被應用則可能成為通用做法)。讀者將它們都看作學術界對解決這一問題的努力即可。對研究者,誠實地報告所引用的其他工作並添加有說服力的消融實驗(ablation expriments)以支撐自己工作的原創性和貢獻之處,則是值得倡導的行為。

Data augmentation 數據增強

數據增強是增加深度模型魯棒性和泛化性能的常用手段,隨機翻轉、隨機裁剪、添加雜訊等也被引入到檢測任務的訓練中來,其信念是通過數據的一般性來迫使模型學習到諸如對稱不變性、旋轉不變性等更一般的表示。通常需要注意標註的相應變換,並且會大幅增加訓練的時間。個人認為數據(監督信息)的適時傳入可能是更有潛力的方向。

Multi-scale Training/Testing 多尺度訓練/測試

輸入圖片的尺寸對檢測模型的性能影響相當明顯,事實上,多尺度是提升精度最明顯的技巧之一。在基礎網路部分常常會生成比原圖小數十倍的特徵圖,導致小物體的特徵描述不容易被檢測網路捕捉。通過輸入更大、更多尺寸的圖片進行訓練,能夠在一定程度上提高檢測模型對物體大小的魯棒性,僅在測試階段引入多尺度,也可享受大尺寸和多尺寸帶來的增益。

multi-scale training/testing最早見於[1],訓練時,預先定義幾個固定的尺度,每個epoch隨機選擇一個尺度進行訓練。測試時,生成幾個不同尺度的feature map,對每個Region Proposal,在不同的feature map上也有不同的尺度,我們選擇最接近某一固定尺寸(即檢測頭部的輸入尺寸)的Region Proposal作為後續的輸入。在[2]中,選擇單一尺度的方式被Maxout(element-wise max,逐元素取最大)取代:隨機選兩個相鄰尺度,經過Pooling後使用Maxout進行合併,如下圖所示。

使用Maxout合併feature vector

近期的工作如FPN等已經嘗試在不同尺度的特徵圖上進行檢測,但多尺度訓練/測試仍作為一種提升性能的有效技巧被應用在MS COCO等比賽中。

Global Context 全局語境

這一技巧在ResNet的工作[3]中提出,做法是把整張圖片作為一個RoI,對其進行RoI Pooling並將得到的feature vector拼接於每個RoI的feature vector上,作為一種輔助信息傳入之後的R-CNN子網路。目前,也有把相鄰尺度上的RoI互相作為context共同傳入的做法。

Box Refinement/Voting 預測框微調/投票法

微調法和投票法由工作[4]提出,前者也被稱為Iterative Localization。微調法最初是在SS演算法得到的Region Proposal基礎上用檢測頭部進行多次迭代得到一系列box,在ResNet的工作中,作者將輸入R-CNN子網路的Region Proposal和R-CNN子網路得到的預測框共同進行NMS(見下面小節)後處理,最後,把跟NMS篩選所得預測框的IoU超過一定閾值的預測框進行按其分數加權的平均,得到最後的預測結果。投票法可以理解為以頂尖篩選出一流,再用一流的結果進行加權投票決策。

OHEM 在線難例挖掘

OHEM(Online Hard negative Example Mining,在線難例挖掘)見於[5]。兩階段檢測模型中,提出的RoI Proposal在輸入R-CNN子網路前,我們有機會對正負樣本(背景類和前景類)的比例進行調整。通常,背景類的RoI Proposal個數要遠遠多於前景類,Fast R-CNN的處理方式是隨機對兩種樣本進行上採樣和下採樣,以使每一batch的正負樣本比例保持在1:3,這一做法緩解了類別比例不均衡的問題,是兩階段方法相比單階段方法具有優勢的地方,也被後來的大多數工作沿用。

OHEM圖解

但在OHEM的工作中,作者提出用R-CNN子網路對RoI Proposal預測的分數來決定每個batch選用的樣本,這樣,輸入R-CNN子網路的RoI Proposal總為其表現不好的樣本,提高了監督學習的效率。實際操作中,維護兩個完全相同的R-CNN子網路,其中一個只進行前向傳播來為RoI Proposal的選擇提供指導,另一個則為正常的R-CNN,參與損失的計算並更新權重,並且將權重複制到前者以使兩個分支權重同步。

OHEM以額外的R-CNN子網路的開銷來改善RoI Proposal的質量,更有效地利用數據的監督信息,成為兩階段模型提升性能的常用部件之一。

Soft NMS 軟化非極大抑制

NMS後處理圖示

NMS(Non-Maximum Suppression,非極大抑制)是檢測模型的標準後處理操作,用於去除重合度(IoU)較高的預測框,只保留預測分數最高的預測框作為檢測輸出。Soft NMS由[6]提出。在傳統的NMS中,跟最高預測分數預測框重合度超出一定閾值的預測框會被直接捨棄,作者認為這樣不利於相鄰物體的檢測。提出的改進方法是根據IoU將預測框的預測分數進行懲罰,最後再按分數過濾。配合Deformable Convnets(將在之後的文章介紹),Soft NMS在MS COCO上取得了當時最佳的表現。演算法改進如下:

Soft-NMS演算法改進

上圖中的 f 即為軟化函數,通常取線性或高斯函數,後者效果稍好一些。當然,在享受這一增益的同時,Soft-NMS也引入了一些超參,對不同的數據集需要試探以確定最佳配置。

RoIAlign RoI對齊

RoIAlign是Mask R-CNN([7])的工作中提出的,針對的問題是RoI在進行Pooling時有不同程度的取整,這影響了實例分割中mask損失的計算。文章採用雙線性插值的方法將RoI的表示精細化,並帶來了較為明顯的性能提升。這一技巧也被後來的一些工作(如light-head R-CNN)沿用。

拾遺

除去上面所列的技巧外,還有一些做法也值得注意:

  • 更好的先驗(YOLOv2):使用聚類方法統計數據中box標註的大小和長寬比,以更好的設置anchor box的生成配置
  • 更好的pre-train模型:檢測模型的基礎網路通常使用ImageNet(通常是ImageNet-1k)上訓練好的模型進行初始化,使用更大的數據集(ImageNet-5k)預訓練基礎網路對精度的提升亦有幫助
  • 超參數的調整:部分工作也發現如NMS中IoU閾值的調整(從0.3到0.5)也有利於精度的提升,但這一方面尚無最佳配置參照

最後,集成(Ensemble)作為通用的手段也被應用在比賽中。

總結

本篇文章里,我們介紹了檢測模型常用的標準評測數據集和訓練模型的技巧,上述內容在溯源和表述方面的不實之處也請讀者評論指出。從下一篇開始,我們將介紹檢測領域較新的趨勢,請持續關注。

Reference

  • [1]: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
  • [2]: Object Detection Networks on Convolutional Feature Maps
  • [3]: Deep Residual Learning for Image Classification
  • [4]: Object Detection via a Multi-region & Semantic Segmentatio-aware CNN Model
  • [5]: Training Region-based Object Detectors with Online Hard Example Mining
  • [6]: Improving Object Detection With One Line of Code
  • [7]: Mask R-CNN

推薦閱讀:

Rocket Training: 一種提升輕量網路性能的訓練方法
【小林的OpenCV基礎課 番外】卷積與濾波
【人工智慧學習總結3】圖像的相似度衡量指標、二值化方法評估指標(二)
Focal Loss for Dense Object Detection解讀
Learning to Segment Every Thing論文導讀

TAG:計算機視覺 | 人工智慧 | 目標檢測 |