上圖簡單描述了物體檢測的發展歷程時間軸。2012年深度學習熱潮興起,接著2013年有學者將深度學習應用到檢測領域,開啟了傳統方法向深度學習的過渡轉變。我將2019年之前的發展視為物體檢測的過去,2019年至2020年看作檢測的現在,2020年以後屬於檢測的未來。
2013年之前檢測方法大多以傳統方法為主,特徵提取加分類器是那些年檢測的重心所在,2013年至2016年是檢測的飛速發展階段,多種神經網絡結構的問世大大改變了檢測算法的格局。
2020年開始,新方向的引出,使得深度學習研究者燃起了新的希望,那麼,在未來多少年內可以真正解決檢測問題(How far from solving)呢,是當下眾多學者所關心的問題。從工業界領域來看,算法的實用性仍有不足,比如自動駕駛中檢測的結果存在不穩定的抖動,遮擋嚴重的場景下檢測效果不佳等。
視覺識別(Visual Recognition)是計算機視覺領域最核心的一環,物體檢測(Object Detection)是其中一個子類。從視覺識別的角度來說,有很多種不同的表現形式,最簡單的方式是bounding-box,這就是本報告所講的檢測任務,還有point的形式(即分割任務)以及key-point形式(即關鍵點檢測任務)。物體檢測算法的評估標準常用AP(Average Precision)作為評價指標,AP會定義precision和recall兩個指標。Precision是指檢測結果的正確率,recall是指檢測的召回率。
每個檢測算法都可調整輸出與groud truth之間匹配的IoU閾值,減小閾值,可以得到更高的recall,但同時precision也會有所下降,以recall為橫軸,precision為縱軸可以畫出一條曲線,AP就相當於對這條曲線求積分。
2014年,COCO數據集引入後,在原來的基礎上提出新的評價標準mmAP,這個評價標準是先對所有類別的AP取平均得到mAP,然後再求0.5~0.95不同IoU閾值(step為0.05)下的mAP的均值得到最終mmAP。
在深度學習之前,傳統方法主要分為特徵提取和分類器設計兩個階段。具體操作為用滑動窗(sliding window)遍歷整張圖像,並對窗內的圖像提取特徵,再進行分類器檢測。
(1)由於要對每一個滑動窗口進行計算,整體計算量很大;(2)求解每個滑動窗時,可能會造成context信息(上下文信息或者全局信息)丟失。特徵提取階段常用的方法有Haar、HOG、LBP、ACF等算子,常用的分類器有SVM、Boosting、Random Forest等。
傳統方法的特徵和分類器之間的關聯較為微弱,但在深度學習中二者之間的聯繫更為緊密。一個卷積神經網絡本身就具備特徵提取能力,同時也具備分類的能力,因此深度學習很好的將特徵和分類器整合在一起發揮更大的價值。
傳統方法的特徵是人工設計的,並且層次較淺,而深度學習網絡的特徵相對就更深一些,因此相對深度學習方法,傳統方法的特徵表達能力較為受限。但是,傳統方法的一個好處在於層次簡單因而方便調試(算法的可解釋性較好)。
以下圖的行人檢測為例,從圖像提取HOG特徵,再把位置點乘上去,就可以得到很像人形的圖片,可解釋並且方便研究人員調試。
總結來看,深度學習之前的傳統檢測方法優缺點如下:
優點
缺點
1. 在CPU上較為有效;
2. 易於調試,可解釋性強;
3. 適用於數據量較少的情況。
1. 在大數據集上的表現性能較為局限;
2. 難以利用GPU來進行並行加速。
2013年-2014年是基於深度學習的物體檢測飛速發展的階段,主要分成兩類:一種是one stage,代表作有Densebox、YOLO、SSD以及RetinaNet等,另一種是two stage,代表作有RCNN系列、RFCN、FPN、MaskRCNN等。
One Stage和Two Stage的不同是,One Stage是給定一張圖,直接分類回歸,Two Stage是給定一張圖,先提出一系列proposal(非背景區域),然後再在proposal上進行分類回歸(對非背景區域進行更細化的檢測)。
One Stage(單階段法)
以Densebox算法為例,它的pipeline較為簡單,圖像經過CNN網絡,在最後的feature map上的每個點直接生成一個框,然後進行回歸。該方法在目標框有重疊(物體遮擋嚴重)時,不能正確的區分重疊的ground truth的歸屬性(算法中不容易進行assign)。
DenseBox的問題在於L2損失對尺度的魯棒性不佳(UnitBox對此進行改進)、ground truth分配問題(SSD對此進行改進)、定位精度不佳(後續引入Two Stage方法進行優化)、誤檢測情況較為常見(後續引入Two Stage方法進行優化)。
YOLO算法的輸入是一張圖片,然後對圖片進行網格化的分割,在每個網格中生成一個類別和兩個目標框,然後將框的分類和回歸統一到一個loss進行學習。Yolo後來又提出v2,v3,v4版本(甚至還出現有些爭議的v5版本)。
SSD檢測算法也是經典檢測算法之一,引入了Anchor概念,在每個點上設置9個anchor,回歸時基於每個anchor分別進行回歸,並將位置坐標回歸問題轉化為框的offset回歸問題。不僅如此,SSD還在多個不同深度的feature map層次上進行anchor的分類回歸,因為較淺的feature map上的anchor更容易關注小物體。
然而,較淺的feature map的語義信息較少,這點在後續的DSSD、RON、RetinaNet中進行了改進,比如在工業界常用的RetinaNet雖然也是多層次特徵,但是相比SSD,採用了先下採樣再上採樣的方法,語義信息也得到了保證。
對one stage方法的總結, one stage方法主要關注三點:
2.feature信息流的設計(多層次特徵融合);
3.loss的設計以及sample(隨機採樣或者難例挖掘等)的設計。
Two stage精度高但是整體算法很複雜計算量大,因此該類的方法主要是在加速方面進行改進。RCNN算法在當時的檢測領域是開創性的工作,當然也存在很多問題,如速度極慢以及沒有端到端的優化。之後便相繼提出了fast rcnn和faster rcnn,以softmax代替svm分類器,以RPN神經網絡代替原始proposal生成網絡。
之後,RFCN網絡繼續對速度進行優化,通過復用計算實現減小計算量的目的。在RFCN之後提出了Deformable Convolutional Networks,在網格上增添了一個可調整大小的offset,可以根據目的自適應的調整感受野,從而使得卷積的信息更為充分。
在Two Stage中還存在一個經典工作——FPN,現在FPN已經是一種非常常用的網絡設計方式。後來提出的MaskRCNN,解決了ROIPooling的對齊問題並實現了多任務學習的目標(分類、檢測、分割)。
總結來說,two stage方法主要關注兩點:速度和性能。
2017年之後物體檢測任務越走越難,陷入一個小低谷,已有的解決方法都較為成熟了,但實用性仍然不足。物體檢測器的pipeline如下圖所示,我們從這個框架的每個細節進行分析介紹。
Backbone 在早期的論文中,基本所有的backbone都是基於分類任務設計的,分類任務相比檢測任務對特徵的解析度要求不高,其好處在於感受域很大,但空間上的損失也會很多,這對檢測很不友好。
如果為了得到更多stage的高解析度的feature,可以在網絡添加額外的層(DetNet算法,如下圖的最後兩個16x層),但是這又會出現這些新層的隨機初始化的問題。
Head 如何設計一個更好更快的head進行檢測。Light head RCNN從head通道上入手,通過減少channel數來提升速度,當然之後還有ThunderNet的繼續改進等。
Pretraining 在分類任務上的預訓練遷移到檢測上會有很多問題,因此引入專門針對檢測而設計的數據集——Objects365,該數據集量級為69萬張圖,V2版本有大約200萬張圖,每個檢測框都會完整地進行標註,這對訓練目標檢測網絡來說較為友好。同時,如果在檢測任務上預訓練再遷移到檢測,還可以把head預訓練,這也是通過預訓練來提高性能的重要的點。
Scale 以人臉檢測為例,人臉的尺度變化非常大。在之前的工作中,我們可以通過像SSD、FPN那種,採用多層feature來融合預測或者直接在圖像預處理上進行縮放到不同尺度來訓練。SFace算法是對於處理人臉檢測任務中尺度變化較為有效的方法,其將anchor-based和anchor-free兩種方法結合,前者可以對一些標準尺寸的人臉表現良好,後者可以對一些非標準的人臉進行自適應。
Batchsize 早期的工作如R-CNN、Faster RCNN、RetinaNet、Mask RCNN等都會將batchsize設定的很小,但這也會引出很多問題,比如小batchsize會導致訓練時間增加、統計不準確、正負樣本不均衡等。於是2018年,有人提出了MegDet算法解決了batchsize較小的問題。
Crowd 以密集場景的行人檢測為例,遮擋問題非常嚴重,如何採用更好的策略解決遮擋下的檢測問題也是目標檢測領域很有意思的話題。
現在的物體檢測方向可以從3個角度描述:
(3)more category,即更多的檢測種類。對於upper bound,課中主要介紹了MegDetV2和EfficientDet兩篇工作,前者融合檢測和分割任務,後者是用NAS搜索網絡。
對於few shot,有些類別物體天生數據量少,因此希望用較少的數據量(小樣本)得到較好的檢測性能。Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector這篇論文提出了一個通用的小樣本目標檢測模型,不需要重新訓練或者fine-tuning就能識別新種類的目標。這類領域有很多相關工作可以參考。
對於more category,如何在更多的種類信息下還能保持高的性能以及甚至讓多種類信息反哺檢測,也是研究的熱點方向。要真正解決物體檢測問題,還要多遠?雖然在物體檢測方面我們已經做了很多研究工作,但實際上還有很長一段路要走。在未來的研究中,我們希望mmAP能達到90以上的精度,FP(false positive)也能得到較好的處理。如何對大尺度的數據集進行處理,如何進行半監督訓練和自監督訓練,如何更好對上下文信息進行理解,如何設計新的pipeline都是值得研究的問題。點擊『閱讀原文』觀看公開課視頻