1. 程式人生 > >乾貨 | 基於深度學習的目標檢測演算法綜述

乾貨 | 基於深度學習的目標檢測演算法綜述

Original url:

精品文章,第一時間送達

來源:美圖雲視覺技術部

轉自:美團技術,未經允許不得二次轉載

目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技術。從最初 2013 年提出的 R-CNN、OverFeat,到後面的 Fast/Faster R-CNN、SSD、YOLO 系列,再到 2018 年最近的 Pelee。短短不到五年時間,基於深度學習的目標檢測技術,在網路結構上,從 two stage 到 one stage,從 bottom-up only 到 Top-Down,從 single scale network 到 feature pyramid network,從面向 PC 端到面向手機端,都湧現出許多好的演算法技術,這些演算法在開放目標檢測資料集上的檢測效果和效能都很出色。

基於深度學習的目標檢測演算法綜述分為三部分:

1. Two/One stage 演算法改進。這部分將主要總結在 two/one stage 經典網路上改進的系列論文,包括 Faster R-CNN、YOLO、SSD 等經典論文的升級版本。

2. 解決方案。這部分我們歸納總結了目標檢測的常見問題和近期論文提出的解決方案。

3. 擴充套件應用、綜述。這部分我們會介紹檢測演算法的擴充套件和其他綜述類論文。

圖 1

基於深度學習的目標檢測演算法綜述(一)介紹了 Two/One stage 演算法改進,基於深度學習的目標檢測演算法綜述(二)我們歸納總結了目標檢測的常見問題和近期論文提出的解決方案。本篇文章是基於深度學習的目標檢測演算法綜述的最後部分。在這裡,我們會介紹目標檢測演算法的擴充套件應用,每個方向給出 1 篇代表論文,同時,最後給出 google 發表在 CVPR2017 上的目標檢測演算法效果和效能評估論文。

目標檢測在很多計算機視覺領域中已經有了很多成熟的應用,如人臉檢測、行人檢測、影象檢索和視訊監控等。而目標檢測演算法不僅可以應用在普通物體的分類和定位上,在近年也有了很多擴充套件。我們會在後文中介紹其中三篇論文,如 logo 檢測論文“Scalable Object Detection for Stylized Objects”、通過改進的 Top-Down 結構提升識別和分割效果的論文“Path Aggregation Network for Instance Segmentation”以及把目標檢測思想用於視訊分段的“Rethinking the Faster R-CNN Architecture for Temporal Action Localization

”。

論文"Mimicking Very Efficient Network for Object Detection"借鑑知識蒸餾思想,在訓練過程中用訓練好的大網路作為監督網路指導小網路的引數學習,實現從零開始訓練目標檢測網路。

本綜述中的最後部分我們還介紹了 Google 發表於 CVPR2017 的平衡速度和準確率的論文"Speed/accuracy trade-offs for modern convolutional object detectors",該文用非常大量詳實的實驗探討了常用目標檢測演算法及其各引數設定對於目標檢測 speed 和 accuracy 的影響,對如何平衡速度和準確率提出了建議。

logo 檢測

Scalable Object Detection for Stylized Objects

論文連結:arxiv.org/abs/1711.09822 開原始碼:/ 錄用資訊:/

論文目標

論文旨在解決對 logo 的檢測問題。作者將 e2e 的檢測模型分為兩步,1. 使用 Single Shot Multibox Detector(文中使用 YOLO v2)檢測可能的 logo 位置;2. 使用Triplet Loss訓練的 deep image-similarity network 模型對 logo 進行檢索。

核心思想

Logo 檢測和普通目標檢測的區別,以及分成兩步檢測的原因有:

1. Logo 種類可能很多,如果用 Softmax 分類幾千種物體效果會很差。隨著數量增多,識別效果會很快變差,由於每個分類器不僅要識別是哪個物體而且要識別 Proposal 中是否包含待檢測目標。

2. Logo 更新很快,如果用普通目標檢測,新增新資料後需要重新訓練。

3. Logo 在圖片中一般都有固定的字型、特性,而且相對普通物體更醒目易於觀察。

4. Logo 相比普通物體和背景的關係不大。作者用人臉檢測來做示例,人臉和 logo 檢測類似,都是大量例項檢測。每張人臉都是不同的,但是如果用目標檢測來區分每個人臉是不現實的。只能先做人臉檢測,然後再做人臉檢索。

圖 2

如上圖所示,本文使用的網路為 2-layer 網路。Layer1 是 YOLOv2,通過識別 Logo 來提取框,然後 crop+resize 為 224*224。 作者提出使用 Single Shot Multibox Detector 而非 proposal-based 網路的原因為 logo 檢測需要使用物體的全域性資訊。Layer2 是訓練檢索網路。訓練為典型的 triplet loss 訓練過程:使用兩組相同 logo,一組不同 logo,通過縮小類內 loss、增大類間 loss 來促進收斂網路。Layer2 網路通過 CNN 提取特徵然後經過 L2 歸一化和 FC 層,最終提取 feature vector。檢索資料集的準備過程在訓練完成後進行,使用特定 logo 經過特徵提取和仿射變換操作,製作資料集。最終使用 feature vector 的餘弦距離來進行例項檢索。

圖 3

演算法效果

由於這篇論文針對的是logo檢測的改進,所以測評都是在logo資料集上。Flickrlogos-32為開源的logo資料集,MSR1k和Synth9K為作者自己造的logo資料集。

圖 4

例項分割

Path Aggregation Network for Instance Segmentation

論文連結:arxiv.org/abs/1803.01534 開原始碼:/ 錄用資訊:CVPR2018

論文目標

我們在綜述的第二部分提到,FPN 是目標檢測 Top-Down 結構的一種常見形式。這篇論文通過改進主幹網路 FPN 的結構,縮短了從低層特徵到高層特徵之間的路徑,進一步減少了定位資訊流動的難度,從而同時提升了目標檢測和例項分割的效果。

核心思想

網路結構如下圖。

圖 5:PANet 的框架

PANet 的框架如圖 5 所示,Bottom-up Path 用於增強 Low-layer 的資訊傳播。Adaptive Feature Pooling 允許每個候選區域可以獲取所有特徵層次的資訊,以此用於預測。添加了一個互補分支用於預測 mask。

PANet 的創新點可以總結如下:

a.建立 Bottom-up 增強路徑縮簡訊息路徑,利用 Low-level 特徵中儲存的精確定位訊號,提升特徵金字塔架構。

b.建立 Adaptive Feature Pooling 合併所有特徵層次上每個 proposal 的特徵資訊,避免任意分配結果。

c.使用小型 Fc 層補充 mask 預測,捕獲每個 proposal 的不同檢視,以此與原始的 Mask R-CNN 互補。通過融合這兩個檢視,增加資訊多樣性,能更好的預測 mask。

具體如下:

1. Bottom-up Path Augmentation

高層的神經元主要響應整個物體,其他神經元更傾向於響應區域性紋理資訊。該網路結構通過傳播 low-level 的強響應,增強了整個特徵結構的定位能力。因為對邊緣和例項部分的強響應對於精確定位例項是強指向標。因此論文使用橫向連線將低層和高層的資訊連線起來。使用 bottom-up path 將底層資訊傳遞到決策層只需要不到十層(如圖 5綠色虛線所示),但是 FPN則 需要通過 backbone,走完整個 ResNet 基礎網路,需要走一百多層。具體的 Augmented Bottom-up Structure 如圖 6 所示。

圖 6: Augmented Bottom-up Structure

網路結構在 FPN{P2,P3,P4,P5}後接{N2,N3,N4,N5}(圖 5 a,b 所示),其中 N2 就是 P2 沒有經過任何操作。如圖 6 所示,每個模組通過橫向連線將較高解析度的 Ni 和低解析度的 Pi+1 橫向連線,產生 Ni+1。

2. Adaptive Feature Pooling

FPN 的 proposals 根據其大小分配給不同的特徵層次。這樣尺寸小的 proposal 被分配給 Low-level,而尺寸大的分配給 High-level,但這可能會產生非最優結果。例如兩個只相差 10 個畫素的 proposals 會被分給不同的特徵層次,但實際上它們很相似。因此,特徵的重要性與其所屬的特徵層次並不是強相關。高層次的特徵由更大的感受野產生,獲取了更豐富的語義資訊。小型 proposals 獲取這些特徵可以更好地使用語義資訊做預測。另一方面,低層次特徵有許多細節和定位資訊。基於此,論文提出對每個 proposal 池化所有層次的特徵,然後融合它們做預測。其實現過程如圖 7所示。

將每個候選區域對映到不同的特徵層次,用 RoIAlign 池化不同層次的特徵網格,進一步融合不同層次的特徵網格(逐畫素求最大或者求和)。

圖 7: Adaptive Feature Pooling Structure

3. Fully-connected Fusion

Fc 與 FCN 有不同的屬性,由於區域性感受野和共享引數,FCN 有畫素級預測,而 Fc 對不同空間的預測均是通過一組可變引數實現,因此它的位置敏感度較高。另外 Fc 預測不同空間位置均通過全部 proposals 的全域性資訊實現,這對於區分不同例項和識別屬於同一物件的分離部分很有效。因此考慮將這兩種層的預測結果融合可以達到更好的預測。其實現如圖 8 所示。

圖 8: Fully-connected Fusion Structure

演算法效果

在例項分割方面,使用相同的初始化模型,PANet 比 Mask R-CNN 好了將近 3 個點;在目標檢測方面,使用 renet50 當基礎網路的 PANet 比 coco2016 年的冠軍高了 0.9%,它的 backbone 是 2×ResNet-101+ 3×Inception-ResNet-v2 和推理 tricks。

圖 9: PANet 在 COCO 上的結果圖,其中上側為分割的結果對比表,下側為檢測的結果對比表

目標檢測用於視訊分段

Rethinking the Faster R-CNN Architecture for Temporal Action Localization

論文連結:arxiv.org/abs/1804.07667 開原始碼:/ 錄用資訊:CVPR2018

論文目標

本文借鑑了目標檢測經典演算法 Faster R-CNN 的思想,實現了對視訊動作的定位與識別:

1. 通過 multi-tower network 和 dilated temporal convolutions 方法,提高了動作定位精度(Temporal Action Localization)。

2. 通過擴充套件候選片段感受野,提高視訊中的關鍵動作的識別效果(Temporal context)。

核心思想

1.借鑑了 Faster R-CNN 的思想,將目標檢測的思想從空間域轉化為時間域。採用類似 RPN 層的結構對視訊中動作做初步的定位與識別,然後採用類似 RCNN 的結構對動作實現精確定位及分類。

2. 由於視訊時長從 1s 到 200s 不等,跨度非常大。本文通過 multi-tower network 和 dilated temporal convolutions 解決了視訊動作分佈時間跨度較大難以定位的問題,同時通過擴充套件生成候選片段和動作分類的感受野,更有效的利用了視訊上下文時序資訊提升了動作識別效果。

演算法概述

Temporal Action Localization

即:給定一段未分割的長視訊,演算法需要檢測視訊中的行為開始時間、結束時間及其類別。

action recognition 與 temporal action Localization 之間的關係同 image classfication 與 object detection 之間的關係非常像。本文主要為了解決 Temporal Action Localization 問題,借鑑了 Faster R-CNN 的結構。

圖 10

與目標檢測類似,它包含兩個階段:

1.生成動作候選區域

給定一組幀序列,通常通過二維或者三維卷積網路提取出一組一維特徵圖。之後,將該特徵圖傳輸給一維網路(類似 RPN 層,Segment Proposal Network),返回一組候選片段。

2.對候選區域分類

接著,對於每個候選片段,本論文計算動作類別的概率,並進一步對片段邊界進行迴歸。在這一步,首先使用一維的 SoIPooling(時間維度上做 Pooling,類似空間維度的 RoIPooling),接著使用 DNN 分類器來實現。

Segment Proposal Network:

文中作者採用了 multi-tower 架構。每個 anchor 大小都有一個具備對齊後的感受野的相關網路。

圖 11

可以理解為對於尺度 Feature map 做相應 Pooling 或者空洞卷積(dilated temporal convolutions),作者經過實驗後認為空洞卷積效果更好,時序定位更加準確。

如何有效利用時序上下文(temporal context)

作者在生成動作候選區域及動作種類識別時,認為動作前後資訊對精確定位和動作分類有很大的意義。故強制將前面一段時間和後面一段時間加入候選區。如圖:

圖 12

雖然候選區是中間的 S 區域,但是它依然會強制把前 s/2 和後 s/2 的區域加入 proposal。文中表示: 推理過程中以 0.7 為閾值的 IoU 的 proposals 做 NMS。在訓練過程中閾值大於 0.7 選為正樣本,小於 0.3 為負樣本。用 Adam 優化器,學習率 0.0001。

演算法效果

圖 13

可以看到該方法在提取的片段較少時,有最好的表現。其他方法在提取片段較多時才會有較好表現。

從零訓練目標檢測網路

Mimicking Very Efficient Network for Object Detection

論文連結: http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimicking_Very_Efficient_CVPR_2017_paper.pdf 開原始碼:/ 錄用資訊:CVPR2017

論文目標

這篇論文與本綜述(一)中介紹的 DSOD 的目標一致,都是解決如何有效地「從 0 開始訓練檢測網路」的問題。不同的是,DSOD 旨在提出一種可以實現從頭訓練的檢測網路結構。而本文借鑑知識蒸餾思想,在訓練過程中,用訓練好的大網路作為監督網路指導小網路的引數學習,小網路無需用預訓練模型初始化。訓練得到的小網路模型用於測試。

核心思想

知識蒸餾,用大網路監督小網路的學習,常被用於解決分類任務中的模型壓縮和加速問題。mimic 論文作者將此思想應用於檢測網路的學習任務。

論文以 faster rcnn 為例,介紹了論文的網路結構和訓練過程。

圖 14

上圖示意了訓練時的網路結構,上半部分是要訓練的目標網路,通常是一個精簡的小網路,後面加上 RPN 網路;下半部分是大網路,大網路用已經訓練好的大檢測網路模型進行引數初始化。論文將訓練過程中的監督資訊分成兩部分:來自大網路的監督資訊 mimic supervision 和訓練資料的標註資訊 ground-truth supervision。

作者認為檢測過程分為兩個部分 feature extractor 和 feature decoder,feature 對於大網路和小網路分別作為 basenet 的 faster rcnn,二者的區別僅在於 feature extractor 不同(分別是大網路和小網路),而在提取到特徵後的 feature decoder 是一致的。因此,論文將來自大網路的 mimic supervision 應用於 feature extractor 部分,而將 ground-truth supervision 應用於 feature decoder 部分。

論文將訓練過程分為兩個階段,下面分別介紹這兩個階段的引數學習方法:

1.第一個階段應用 mimic supervision 學習圖中上半部分的目標小網路;小網路隨機初始化引數,大網路用已經訓練好的大檢測網路模型進行引數初始化。訓練過程中,固定大網路引數,使用以下 loss 指導小網路進行引數學習。

其中,u^i 為大網路的 RPN 輸出的第 i 個候選框的特徵,這個特徵是從候選框的對用的 feature map 中直接提取得到的;v^i 是小網路的 RPN 對應的第i個候選框的特徵;變換操作 r() 是用於將 v^i 變換到與 u^i 相同的維度;m_i 是第 i 個候選框特徵的維度。

最小化以上 loss 的過程也就是將大網路的特徵提取能力遷移到小網路的過程。

2.第二個階段應用 ground-truth supervision 進行檢測網路(detection network)的學習和 RPN 網路的精修。對於 faster rcnn,檢測網路跟 RPN 網路共享部分特徵,對共享的特徵層,使用第一階段學到的引數初始化;對檢測網路新增加的卷積層,隨機初始化引數。

論文指出,第二階段如果只用 ground-truth supervision 精修,會損害第一階段學到的網路引數。因此,作者提出使用 softmax 層之前的那層特徵(classification logits)進行 mimic supervision。即上面公式中的 u^i 和 v^i 分別為大小網路的第 i 個 proposal 的 classfication logits,這個階段的 loss 計算包括兩部分 L_m(W)和 L_gt(W),如下所示,其中 L_gt(W)代表分類和位置預測誤差。

以上介紹了大網路到小網路的特徵提取和檢測能力遷移。除此以外,本論文思想還可用於接受大分別率輸入影象的網路的檢測能力遷移至小解析度輸入影象的網路,提升小解析度輸入影象的檢測效果。如下圖所示,基本思想即在最後一個 feature map 輸出讓 RPN 網路之前新增一個 decovolution 層增加 feature map 的解析度,訓練時使用支援大解析度輸入的網路進行監督。

圖 15

演算法效果

下表中 MR_-2 為 Miss Rate on False Positive Per Image,數值越小代表效果越好。其他細節可參見原論文。

圖 16

調研速度和準確率平衡的綜述

Speed/accuracy trade-offs for modern convolutional object detectors

論文連結:arxiv.org/abs/1611.10012 開原始碼:/ 錄用資訊:CVPR2017

論文目標

通過大量實驗對比三種主流檢測演算法在各個情況下的表現。

核心思想

在我們日常的視覺任務中往往有一個大家都會有一個經驗,就是當提高一個網路的複雜度能得到更好的效果,而去精簡一個網路的同時準確度自然會有所損失。更進一步來講,相比於分類任務,目標檢測任務在實際應用的時候更容易受到計算複雜度,記憶體要求等因素的限制。本文用非常大量詳實的實驗探討了最常用的一些目標檢測演算法以及其中各個引數的設定對於目標檢測的 speed 和 accuracy 的影響,以及對於如何以較好的價效比平衡速度和準確率給予了自己的結論。

看這篇論文的作者參與數量就能感覺到做完這些大量的實驗,尤其是在像 coco 這樣很大的資料集上,是非常耗時且花費精力的。在這裡感謝作者的工作為沒有資源和時間去做這些試驗的人給出了很好的指導性的建議。我認為這些建議很多時候在實用的角度來講貢獻一點也不亞於提出一個新的方法。

首先先說一下試驗的背景:用不同的深度學習框架,不同的網路初始化方法,不同的資料增強方法等等訓練相同的演算法,其效能和最終準確率都會有所不同。為了去掉這些因素的影響,作者統一在 tensorflow 的框架上實現了 Faster R-CNN、SSD、RFCN 演算法,並以此為基礎進行試驗,保證了試驗的公平性,其中有部分的引數初始化方法以及優化方法略有不同,在論文中均作了說明。同時為了保證基礎特徵的公平性和豐富程度,作者分別在 VGG16、ResNet-101、Mobilenet、Inception-V2、Inception-V3、Inception-ResNet 上進行試驗,使得結果具有更高的普適性,同時也能從基礎網路的角度看到了不同網路對於不同演算法準確率和速度的影響。作者還對比了不同影象輸入尺寸在以上這些網路上的表現。最後作者還對比了各個演算法不同的預選框的設定方法,某些網路特定層的特徵解析度的不同等等設定對於網路的影響。可以說作者整個的試驗設計非常系統,非常嚴謹。通過作者的試驗結果,可以從各個角度對於當前目標檢測的網路選擇和引數設定有一個很直觀的認識。

整個論文有非常多的試驗結果和結論,如果對於哪方面感興趣的讀者建議還是去仔細檢視原論文的相應部分的圖表和論述。本文這裡就不一一拿出來討論,只抽出一部分試驗結果進行描述。

圖 17

首先整體對比一下不同的網路接入三種檢測演算法後的表現,其中每種網路和演算法的組合對又根據不同的影象輸入尺寸,stride size 畫出了多個點。可以看到 ResNet101 和 Inception-ResNet101(在輸入尺寸等比較小的情況下)是價效比比較高的網路,而 Inceptionv2-3 網路表現平平。也許像 Inceptionv3 這種網路是對於分類任務高度定製的,多尺寸的卷積和的融合影響了物體的位置資訊的表達,不太適合於目標檢測任務。

而檢測演算法方面,Faster R-CNN 系列在 mAP 上穩穩勝出。但是速度相較於 SSD R-FCN 來講也明顯慢一些,但是通過一些引數的設定 FASTER R-CNN 也可以達到很快的速度。

作者對比了輸入不同影象尺寸對網路的影響,可以看到,輸入更大的圖片確實可以明顯的提升 mAP 但是也降低了網路的速度。作者還統計了不同演算法和網路對於不同尺寸的目標預測的表現。結論是 SSD 對於小物體表現非常差,遠低於其他演算法。而在大物體上的表現幾乎一樣,甚至在一些網路上表現更好。所以如果檢測任務當中大部分目標均為大物體,SSD 絕對是一個非常好的選擇,可以達到有快又準的效果。但是如果存在大量的小物體,為了提高召回率還是建議選擇兩階段的檢測演算法比較好。具體試驗結果請檢視原始論文。

圖 18

上圖的實驗結論非常超出我的認知,圖中對比了不同網路在不同演算法上的表現。可以看到 SSD 演算法對於基礎網路的特徵非常不敏感,從結構、計算複雜度、深度差別很大的網路接入 SSD 後 mAP 的變化非常不明顯。而兩階段的檢測器,對於不同的網路 mAP 變化非常大。當基礎網路複雜度比較低的時候 SSD 演算法的價效比要更高一些。而另一方面增大 SSD 基礎網路的複雜度,收益也相當有限,無法達到二階段演算法的準確率。可能 SSD 演算法的主要瓶頸在於演算法結構上,所以提高送入 feature 的質量並沒有特別改善 SSD 的表現。

還有一個很有指導意義的結論是當要優化演算法的速度的時候,減少 proposal 的數量是一個很好的選擇。可以很大程度的加快網路的速度同時精度受到的影響比較小。一個例子是當 Faster R-CNN+Inception-ResNet 組合時,只用 50 個 proposals 與用 300 個 proposals 相比,mAP 相差無幾,但是速度提升了三倍之多,這裡原文中有更詳細的討論。

結論

圖 19

本文通過大量實驗對比了影響目標檢測演算法速度和準確性各項因素的作用,可以幫助從業者在實際應用中選擇更合適的目標檢測演算法。

(完)