1. 程式人生 > >基於深度學習的目標檢測演算法綜述(三)(截止20180821)

基於深度學習的目標檢測演算法綜述(三)(截止20180821)

參考:https://zhuanlan.zhihu.com/p/40102001

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

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

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

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

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

3. 擴充套件應用、綜述

目標檢測在很多計算機視覺領域中已經有了很多成熟的應用,如人臉檢測、行人檢測、影象檢索和視訊監控等。而目標檢測演算法不僅可以應用在普通物體的分類和定位上,在近年也有了很多擴充套件。我們會在後文中介紹其中三篇論文,如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的影響,對如何平衡速度和準確率提出了建議。

3.1 logo檢測:Scalable Object Detection for Stylized Objects

論文連結:https://arxiv.org/pdf/1711.09822.pdf

開原始碼:

錄用資訊:

論文目標:

論文旨在解決對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-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的餘弦距離來進行例項檢索。

演算法效果:

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

3.2 例項分割:Path Aggregation Network for Instance Segmentation

論文連結:https://arxiv.org/abs/1803.01534

開原始碼:

錄用資訊:CVPR2018

論文目標:

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

核心思想:

網路結構如下圖。

圖1 PANet的框架

PANet的框架如圖1所示,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將底層資訊傳遞到決策層只需要不到十層(如圖1綠色虛線所示),但是FPN則需要通過backbone,走完整個ResNet基礎網路,需要走一百多層。具體的Augmented Bottom-up Structure 如圖2所示。

圖2 Augmented Bottom-up Structure

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

2. Adaptive Feature Pooling

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

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

圖3 Adaptive Feature Pooling Structure

3. Fully-connected Fusion

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

圖4 Fully-connected Fusion Structure

演算法效果:

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

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

3.3 目標檢測用於視訊分段:Rethinking the Faster R-CNN Architecture for Temporal Action Localization

論文連結:https://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解決了視訊動作分佈時間跨度較大難以定位的問題,同時通過擴充套件生成候選片段和動作分類的感受野,更有效的利用了視訊上下文時序資訊提升了動作識別效果。

演算法概述

1) Temporal Action Localization

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

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

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

1.生成動作候選區域

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

2.對候選區域分類

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

Segment Proposal Network:

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

 

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

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

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

如圖:

雖然候選區是中間的S區域,但是它依然會強制把前s/2和後s/2的區域加入proposal

文中表示: 推理過程中以0.7為閾值的IoU的proposals做NMS。

在訓練過程中閾值大於0.7選為正樣本,小於0.3為負樣本。用Adam優化器,學習率0.0001

演算法效果:

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

3.4 從零訓練目標檢測網路: 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為例,介紹了論文的網路結構和訓練過程。

上圖示意了訓練時的網路結構,上半部分是要訓練的目標網路,通常是一個精簡的小網路,後面加上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的解析度,訓練時使用支援大解析度輸入的網路進行監督。

演算法效果:

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

 

3.5 調研速度和準確率平衡的綜述:Speed/accuracy trade-offs for modern convolutional object detectors

論文連結:https://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上進行試驗,使得結果具有更高的普適性,同時也能從基礎網路的角度看到了不同網路對於不同演算法準確率和速度的影響。作者還對比了不同影象輸入尺寸在以上這些網路上的表現。最後作者還對比了各個演算法不同的預選框的設定方法,某些網路特定層的特徵解析度的不同等等設定對於網路的影響。可以說作者整個的試驗設計非常系統,非常嚴謹。通過作者的試驗結果,可以從各個角度對於當前目標檢測的網路選擇和引數設定有一個很直觀的認識。

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

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

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

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

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

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

結論:

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