目標檢測框架網絡模型分析(二 雙塔奇兵)

 

 前言

  我很長一段時間一直都在作自動駕駛的物體檢測性能調優,因此想總結整理一些小網絡和檢測框架的經驗。git

  文章會分紅三個部分:github

  第一部分將參照知乎@YaqiLYU 對小網絡(經典網絡)的分析而且結合的本身的理解。算法

  第二部分詳細介紹目前state-of-art的主流檢測框架。數組

       第三部分介紹了目標檢測的問題及解決方案,目標檢測在其餘領域的拓展應用 網絡

 

目標檢測(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端到面向手機端,都涌現出許多好的算法技術,這些算法在開放目標檢測數據集上的檢測效果和性能都很出色。框架

本篇綜述的出發點一方面是但願給檢測方向的入門研究人員提供一個技術概覽,幫助你們快速瞭解目標檢測技術上下文;另外一方面是給工業界應用人員提供一些參考,經過本篇綜述,讀者能夠根據實際業務場景,找到合適的目標檢測方法,在此基礎上改進、優化甚至是進一步創新,解決實際業務問題。函數

本文對其中的26篇論文進行介紹,這26篇論文涵蓋了2013以來,除SSD,YOLO和R-CNN系列以外的,全部引用率相對較高或是筆者認爲具備實際應用價值的論文。R-CNN系列,SSD和YOLO相關的論文詳解資源已經很是多,因此本文再也不贅述。下圖對這些方法進行了分類歸納。性能

1、 背景

 

  

 

  物體檢測的任務是找出圖像或視頻中的感興趣物體,同時檢測出它們的位置和大小,是機器視覺領域的核心問題之一。學習

  物體檢測過程當中有不少不肯定因素,如圖像中物體數量不肯定,物體有不一樣的外觀、形狀、姿態,加之物體成像時會有光照、遮擋等因素的干擾,致使檢測算法有必定的難度。進入深度學習時代以來,物體檢測發展主要集中在兩個方向:two stage算法如R-CNN系列和one stage算法如YOLO、SSD等。二者的主要區別在於two stage算法須要先生成proposal(一個有可能包含待檢物體的預選框),而後進行細粒度的物體檢測。而one stage算法會直接在網絡中提取特徵來預測物體分類和位置。測試

  

  

本篇綜述將主要分爲三個部分:

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

2. 解決方案。這部分論文對物體檢測中遇到的各種問題進行了分析並提出瞭解決方案。

3. 擴展應用、綜述。這部分將就特殊物體檢測和檢測算法在其餘領域的應用等方面進行介紹。

本綜述分三部分,本文介紹第一部分。

1.1.1 R-FCN: Object Detection via Region-based Fully Convolutional Networks

論文連接:

https://arxiv.org/abs/1605.06409

開源代碼:

https://github.com/daijifeng001/R-FCN

錄用信息:CVPR2017

論文目標:

對預測特徵圖引入位置敏感分數圖提加強徵位置信息,提升檢測精度。

核心思想:

一. 背景

Faster R-CNN是首個利用CNN來完成proposals的預測的,以後的不少目標檢測網絡都是藉助了Faster R-CNN的思想。而Faster R-CNN系列的網絡均可以分紅2個部分:

1.Fully Convolutional subnetwork before RoI Layer

2.RoI-wise subnetwork

第1部分就是直接用普通分類網絡的卷積層來提取共享特徵,後接一個RoI Pooling Layer在第1部分的最後一張特徵圖上進行提取針對各個RoIs的特徵圖,最後將全部RoIs的特徵圖都交由第2部分來處理(分類和迴歸)。第二部分一般由全鏈接層組層,最後接2個並行的loss函數:Softmax和smoothL1,分別用來對每個RoI進行分類和迴歸。由此獲得每一個RoI的類別和迴歸結果。其中第1部分的基礎分類網絡計算是全部RoIs共享的,只須要進行一次前向計算便可獲得全部RoIs所對應的特徵圖。

第2部分的RoI-wise subnetwork不是全部RoIs共享的,這一部分的做用就是給每一個RoI進行分類和迴歸。在模型進行預測時基礎網絡不能有效感知位置信息,由於常見的CNN結構是根據分類任務進行設計的,並無針對性的保留圖片中物體的位置信息。而第2部分的全連階層更是一種對於位置信息很是不友好的網絡結構。因爲檢測任務中物體的位置信息是一個很重要的特徵,R-FCN經過提出的位置敏感分數圖(position sensitive score maps)來加強網絡對於位置信息的表達能力,提升檢測效果。

二. 網絡設計

2.1position-sensitive score map

  

 

  

 上圖展現的是R-FCN的網絡結構圖,展現了位置敏感得分圖(position-sensitive score map)的主要設計思想。若是一個RoI含有一個類別c的物體,則將該RoI劃分爲k x k個區域,分別表示該物體的各個相應部位。其每一個相應的部位都由特定的特徵圖對其進行特徵提取。R-FCN在共享卷積層的最後再接上一層卷積層,而該卷積層就是位置敏感得分圖position-sensitive score map。其通道數channels=k x k x (C+1)。C表示物體類別種數再加上1個背景類別,每一個類別都有k x k 個score maps分別對應每一個類別的不一樣位置。每一個通道分別負責某一類的特定位置的特徵提取工做。

2.2 Position-sensitive RoI pooling

位置敏感RoI池化操做了(Position-sensitive RoI pooling)以下圖所示:

 

該操做將每一個RoIs分爲k x k 個小塊。以後提取其不一樣位置的小塊相應特徵圖上的特徵執行池化操做,下圖展現了池化操做的計算方式。

獲得池化後的特徵後,每一個RoIs的特徵都包含每一個類別各個位置上的特徵信息。對於每一個單獨類別來說,將不一樣位置的特徵信息相加便可獲得特徵圖對於該類別的響應,後面便可對該特徵進行相應的分類。

 

 

2.3 position-sensitive regression

在位置框迴歸階段仿照分類的思路,將特徵通道數組合爲4 x k x k 的形式,其中每一個小塊的位置都對應了相應的通道對其進行位置迴歸的特徵提取。最後將不一樣小塊位置的四個迴歸值融合以後便可獲得位置迴歸的響應,進行後續的位置迴歸工做。

三. 網絡訓練

3.1 position-sensitive score map高響應值區域

在訓練的過程當中,當RoIs包涵物體屬於某類別時,損失函數即會使得該RoIs不一樣區域塊所對應的響應通道相應位置的特徵響應儘量的大,下圖展現了這一過程,能夠明顯的看出不一樣位置的特徵圖都只對目標相應位置的區域有明顯的響應,其特徵提取能力是對位置敏感的。

 

 

 

3.2 訓練和測試過程

使用如上的損失函數,對於任意一個RoI,計算它的Softmax損失,和當其不屬於背景時的迴歸損失。由於每一個RoI都被指定屬於某一個GT box或者屬於背景,即先讓GT box選擇與其IoU最大的那個RoI,再對剩餘RoI選擇與GT box的IoU>0.5的進行匹配,而剩下的RoI所有爲背景類別。

 當RoI有了label後loss就能夠計算出來。這裏惟一不一樣的就是爲了減小計算量,做者將全部RoIs的loss值都計算出來後,對其進行排序,並只對最大的128個損失值對應的RoIs進行反向傳播操做,其它的則忽略。

而且訓練策略也是採用的Faster R-CNN中的4-step alternating training進行訓練。在測試的時候,爲了減小RoIs的數量,做者在RPN提取階段就將RPN提取的大約2W個proposals進行過濾:

1.去除超過圖像邊界的proposals

2.使用基於類別機率且閾值IoU=0.3的NMS過濾

3.按照類別機率選擇top-N個proposals

在測試的時候,通常只剩下300個RoIs。而且在R-FCN的輸出300個預測框以後,仍然要對其使用NMS去除冗餘的預測框。

算法效果:

 

上圖比較了Faster-R-CNN 和R-FCN的mAP值和監測速度,採用的基礎網絡爲ResNet-101,測評顯卡爲Tesla K40。

1.1.2 R-FCN-3000 at 30fps: Decoupling Detection and Classification

論文連接:

https://arxiv.org/pdf/1712.01802.pdf

開源代碼:無

錄用信息:無

論文目標:

與YOLO9000(本論述後文會具體介紹YOLO9000)相似,本文的目標也是面向實際應用場景的大規模類別物體的實時檢測。YOLO9000將檢測數據集和分類數據集合並訓練檢測模型,但r-fcn-3000僅採用具備輔助候選框信息的ImageNet數據集訓練檢測分類器。

若是使用包含標註輔助信息(候選框)的大規模分類數據集,如ImageNet數據集,進行物體檢測模型訓練,而後將其應用於實際場景時,檢測效果會是怎樣呢?how would an object detector perform on "detection"datasets if it were trained on classification datasets with bounding-box supervision?

核心思想:

r-fcn-3000是對r-fcn的改進。上文提到,r-fcn的ps卷積核是per class的,假設有C個物體類別,有K*K個ps核,那麼ps卷積層輸出K*K*C個通道,致使檢測的運算複雜度很高,尤爲當要檢測的目標物體類別數較大時,檢測速度會很慢,難以知足實際應用需求。

爲解決以上速度問題,r-fcn-3000提出,將ps卷積核做用在超類上,每一個超類包含多個物體類別,假設超類個數爲SC,那麼ps卷積層輸出K*K*SC個通道。因爲SC遠遠小於C,所以可大大下降運算複雜度。特別地,論文提出,當只使用一個超類時,檢測效果依然不錯。算法網絡結構以下:

上圖能夠看出,與r-fcn相似,r-fcn-3000也使用RPN網絡生成候選框(上圖中虛線迴路);相比r-fcn, r-fcn-3000的網絡結構作了以下改進:

1. r-fcn-3000包含超類(上圖中上半部分)和具體類(上圖中下半部分)兩個卷積分支。

2. 超類卷積分支用於檢測超類物體,包含分類(超類檢測)和迴歸(候選框位置改進)兩個子分支;注意上圖中沒有畫出用於候選框位置改進的bounding-box迴歸子分支;迴歸分支是類別無關的,即只肯定是不是物體。

3. 具體類卷積分支用於分類物體的具體類別機率,包含兩個普通CNN卷積層。

4. 最終的物體檢測輸出機率由超類卷積分支獲得的超類類機率分別乘以具體類卷積分支輸出的具體類別機率獲得。引入超類和具體類兩個卷積分支實現了‘物體檢測’和‘物體分類’的解耦合。超類卷積分支使得網絡能夠檢測出物體是否存在,因爲使用了超類,而不是真實物體類別,大大下降了運算操做數。保證了檢測速度;具體類分支不檢測物體位置,只分類具體物體類別。

超類生成方式:對某個類別j的全部樣本圖像,提取ResNet-101最後一層2018維特徵向量,對全部特徵項向量求均值,做爲該類別的特徵表示。獲得全部類別的特徵表示進行K-means聚類,肯定超類。

算法效果:

在imagenet數據集上,檢測mAP值達到了34.9%。使用nvidia p6000 GPU,對於375x500圖像,檢測速度能夠達到每秒30張。在這種速度下,r-fcn-3000號稱它的檢測準確率高於YOLO 18%。

此外,論文實驗代表,r-fcn-3000進行物體檢測時具備較強的通用性,當使用足夠多的類別進行訓練時,對未知類別的物體檢測時,仍能檢測出該物體位置。以下圖:

 

在訓練類別將近3000時,不使用目標物體進行訓練達到的通用預測mAP爲30.7%,只比使用目標物體進行訓練達到的mAP值低0.3%。

1.1.3 Mask R-CNN

論文連接:

https://arxiv.org/abs/1703.06870

開源代碼:

https://github.com/TuSimple/mx-maskrcnn

錄用信息:CVPR2017

論文目標

1. 解決RoIPooling在Pooling過程當中對RoI區域產生形變,且位置信息提取不精確的問題。

2. 經過改進Faster R-CNN結構完成分割任務。

核心思想:

1. 使用RoIAlign代替RoIPooling,獲得更好的定位效果。

2. 在Faster R-CNN基礎上加上mask分支,增長相應loss,完成像素級分割任務。

1、概述

Mask R-CNN是基於Faster R-CNN的基礎上演進改良而來,不一樣於Faster R-CNN,Mask R-CNN能夠精確到像素級輸出,完成分割任務。此外他們的輸出也有所不一樣。Faster R-CNN輸出爲種類標籤和box座標,而Mask R-CNN則會增長一個輸出,即物體掩膜(object mask)。

2、網絡結構介紹

Mask R-CNN結構以下圖:

Mask R-CNN採用和Faster R-CNN相同的兩個階段,具備相同的第一層(即RPN),第二階段,除了預測種類和bbox迴歸,而且並行的對每一個RoI預測了對應的二值掩膜(binary mask)。

3、Mask R-CNN詳細改進

1. RoIAlign

也就是扣取特徵圖的過程。最原始的RoIPooling比較暴力。如左圖所示,中間較小的紅色虛線框是MegDet給出的ROI,因爲浮點數的影響,這個框並不能徹底對齊到綠色的特徵圖格點上。現有的計算邏輯是把紅色的虛線框拉伸到外圍紅色虛線框,而後計算框中部分特徵格點。最近,Mask-RCNN的提出將這個「硬」過程軟化成了插值流程,即計算格點附近四個點的平均結果。 

Faster R-CNN採用的RoIPooling,這樣的操做可能致使feature map在原圖的對應位置與真實位置有所誤差。以下圖:

[From Face++]

RoIPooling會對區域進行拉伸,致使區域形變。RoIAlign能夠避免形變問題。具體方式是先經過雙線性插值到14 x 14,其次進行雙線性插值獲得藍點的值,最後再經過max Pooling或average pool到7 x 7。

 

2.多任務損失函數

Mask R-CNN的損失函數可表示爲:

 

掩膜分支針對每一個RoI產生一個K x M xM的輸出,即K個M x M的二值的掩膜輸出。其中K爲分類物體的類別數目。依據預測類別輸出,只輸出該類對應的二值掩膜,掩膜分支的損失計算以下示意圖:

 

1. mask branch 預測K個種類的M x M二值掩膜輸出。

2. 依據種類預測分支(Faster R-CNN部分)預測結果:當前RoI的物體種類爲i。

3.RoI的平均二值交叉損失熵(對每一個像素點應用Sigmoid函數)即爲損失Lmask。

此外做者發現使用Sigmoid優於Softmax ,Sigmoid能夠避免類間競爭。

 

體現了在COCO數據集上的表現效果。

1.2 One stage

提到one stage算法就必須提到OverFeat,OverFeat網絡將分類、定位、檢測功能融合在一個網絡之中。隨後的YOLO和SSD網絡,都是很經典的one stage檢測算法。

YOLO論文做者對原始YOLO網絡進行了改進,提出了YOLO9000和YOLOv3。YOLO9000號稱能夠作到更好,更快,更強。其創新點還包括用小規模(指類別)檢測標註數據集 + 大規模分類標註數據集訓練通用物體檢測模型。YOLOv3是做者的一個technical report,主要的工做展現做者在YOLO9000上的改進。另外本綜述還將介紹新論文Object detection at 200 Frames Per Second,這篇論文在YOLO的基礎上進行創新,能在不犧牲太多準確率的狀況下達到200FPS(使用GTX1080)。

SSD算法是一種直接預測bounding box的座標和類別的object detection算法,利用不一樣分辨率卷積層的feature map,能夠針對不一樣scale的物體進行檢測。本篇綜述中主要介紹DSSD(原始做者的改進版本)和DSOD這兩篇論文。

1.2.1 YOLO9000: better, faster, stronger

論文連接:

https://arxiv.org/pdf/1612.08242.pdf

開源代碼:

https://github.com/pjreddie/darknet

https://github.com/zhreshold/mxnet-YOLO MXNet實現

錄用信息:CVPR2017

論文目標:

論文目標是要解決包含大規模物體類別的實際應用場景中的實時目標檢測。實際應用場景中,目標檢測應知足兩個條件:1. 檢測速度知足實際場景需求 2. 覆蓋物體類別知足實際場景需求。實際場景包含不少類別的物體,而這些類別物體的標註數據很難拿到,本論文提出使用小規模(指類別)檢測標註數據集 + 大規模分類標註數據集訓練通用物體檢測模型。

YOLO9000是在YOLO基礎上的改進,相比YOLO,YOLO9000號稱能夠作到更好,更快,更強。下面從這三個方面介紹YOLO9000如何作到這三點。

YOLO相關的論文解讀能夠參考:https://zhuanlan.zhihu.com/p/25236464

1、更好

準確率提高。相比R-CNN系列,YOLOv1的召回率和物體位置檢測率較低,YOLO9000作了以下七點改進對其進行提高。

1.加入BN層。在全部的卷積層後加入BN操做,去掉全部dropout層。

2.使用高分辨率訓練獲得的分類模型pretrain檢測網絡。YOLOv1使用224x224訓練獲得的分類模型pretrain,而YOLO9000直接使用448x448訓練獲得的分類模型pretrain檢測網絡。

3.使用卷積層預測anchor box位置。YOLOv1基於輸入圖像的物理空間劃分紅7x7的網格空間,每一個網格最多對應兩個候選預測框,所以每張圖像最多有98個bounding box,最後接入全鏈接層預測物體框位置。而YOLO9000移除全鏈接層,使用anchor box預測候選框位置,大大增長了每張圖片的候選框個數。這個改進將召回率由81%提升到88%,mAP由69.5%稍微下降到69.2%。同時,因爲去掉了全鏈接層,YOLO9000能夠支持檢測時不一樣分辨率的圖像輸入。

4.kmeans聚類肯定候選框形狀。使用k-means對訓練數據集中的物體框的分辨率和比例進行聚類,肯定anchor box的形狀。爲避免物體大小引發的統計偏差,YOLO9000使用IoU而不是歐氏距離來做爲距離度量方式。

Dimension clusters

以前Anchor Box的尺寸是手動選擇的,因此尺寸還有優化的餘地。 爲了優化,在訓練集(training set)Bounding Boxes上跑了一下k-means聚類,來找到一個比較好的值。 
若是咱們用標準的歐式距離的k-means,尺寸大的框比小框產生更多的錯誤。由於咱們的目的是提升IOU分數,這依賴於Box的大小,因此距離度量的使用: 
這裏寫圖片描述

經過分析實驗結果(Figure 2),左圖:在model複雜性與high recall之間權衡以後,選擇聚類分類數K=5。右圖:是聚類的中心,大多數是高瘦的Box。 
Table1是說明用K-means選擇Anchor Boxes時,當Cluster IOU選擇值爲5時,AVG IOU的值是61,這個值要比不用聚類的方法的60.9要高。選擇值爲9的時候,AVG IOU更有顯著提升。總之就是說明用聚類的方法是有效果的。

5.預測‘候選框相對於圖像的內部偏移’。以往RPN網絡,經過迴歸候選框相對於當前anchor box的偏移來定位候選框的位置,因爲偏移相對於anchor box外部,因此取值範圍是不受限的,致使訓練的時候難以收斂。所以YOLO9000採用與YOLO相似的方式,預測候選框相對於圖像左上角的位置偏移,並將偏移量歸一化到0-1區間,解決了訓練難收斂問題。

用Anchor Box的方法,會讓model變得不穩定,尤爲是在最開始的幾回迭代的時候。大多數不穩定因素產生自預測Box的(x,y)位置的時候。按照以前YOLO的方法,網絡不會預測偏移量,而是根據YOLO中的網格單元的位置來預測座標,這就讓Ground Truth的值介於0到1之間。而爲了讓網絡的結果能落在這一範圍內,網絡使用一個 Logistic Activation來對於網絡預測結果進行限制,讓結果介於0到1之間。 網絡在每個網格單元中預測出5個Bounding Boxes,每一個Bounding Boxes有五個座標值tx,ty,tw,th,t0,他們的關係見下圖(Figure3)。假設一個網格單元對於圖片左上角的偏移量是cx,cy,Bounding Boxes Prior的寬度和高度是pw,ph,那麼預測的結果見下圖右面的公式: 

 

6.使用更精細的特徵。YOLOv1提取13x13的特徵層進行後續物體檢測,對於小物體的檢測效果並不友好。爲解決這個問題,YOLO9000將前一層26x26的特徵與13x13層的特徵進行通道concatenation。如26x26x512的feature map被拆分紅13x13x2048,而後同後面的13x13特徵層進行concatenation。mAP提高1%。

7.多尺度圖像訓練。YOLO9000採用不一樣分辨率的圖像進行模型迭代訓練,加強模型對多尺度圖像的預測魯棒性。

2、更快

YOLOv1的basenet基於GoogleNet改進獲得,計算複雜度大概是VGG16的1/4,但在imagenet上224x224圖像的top-5分類準確率比vgg16低2%。YOLO9000提出一個全新的basenet,號稱darknet-19,包含19個卷積層和5個max pooling層,詳細網絡結構見論文,計算複雜度比YOLOv1進一步減小了34%,imagenet上top-5準確率提高了3.2%。

3、更強

更強是指,在知足實時性需求的前提下,能檢測出的物體類別數更多,範圍更大。YOLO9000提出使用詞樹’wordtree’,將分類數據集和檢測數據集合並,進行模型訓練。反向傳播時,檢測樣本的訓練loss用於計算和更新整個網絡的模型參數;而分類樣本的訓練loss僅用於更新與分類相關的網絡層模型參數。這樣以來,檢測數據集訓練網絡學到如何檢測出物體(是不是物體,位置),而分類數據集使得網絡識別出物體類別。

在訓練的過程當中,當網絡遇到一個來自檢測數據集的圖片與標記信息,那麼就把這些數據用完整的YOLO v2 loss功能反向傳播這個圖片。當網絡遇到一個來自分類數據集的圖片和分類標記信息,只用整個結構中分類部分的loss功能反向傳播這個圖片。 

遇到一個來自分類數據集的圖片和分類標記信息,只用整個結構中分類部分的loss功能反向傳播這個圖片。 
可是檢測數據集只有粗粒度的標記信息,像「貓「、「 狗」之類,而分類數據集的標籤信息則更細粒度,更豐富。好比狗這一類就包括」哈士奇「」牛頭梗「」金毛狗「等等。因此若是想同時在監測數據集與分類數據集上進行訓練,那麼就要用一種一致性的方法融合這些標籤信息。 
再者,用於分類的方法,大可能是用softmax layer方法,softmax意味着分類的類別之間要互相獨立的。而盲目地混合數據集訓練,就會出現好比:檢測數據集的分類信息中」狗「這一分類,在分類數據集合中,就會有的不一樣種類的狗」哈士奇「」牛頭梗「」金毛「這些分類,這兩種數據集之間的分類信息不相互獨立。因此使用一種多標籤的model來混合數據集,假設一個圖片能夠有多個分類信息,並假定分類信息必須是相互獨立的規則能夠被忽略。

訓練一個Extremely Large Scale檢測器。因此訓練的時候使用WordTree混合了COCO檢測數據集與ImageNet中的Top9000類,混合後的數據集對應的WordTree有9418個類。另外一方面,因爲ImageNet數據集太大了,做者爲了平衡一下兩個數據集之間的數據量,經過過採樣(oversampling)COCO數據集中的數據,使COCO數據集與ImageNet數據集之間的數據量比例達到1:4。 

爲了評估這一方法,使用ImageNet Detection Task對訓練結果進行評估。 
評估結果: 
YOLO9000取得19.7mAP。 
在未學習過的156個分類數據上進行測試,mAP達到16.0。 
YOLO9000的mAP比DPM高,並且YOLO有更多先進的特徵,YOLO9000是用部分監督的方式在不一樣訓練集上進行訓練,同時還能檢測9000個物體類別,並保證明時運行。

算法效果:

下圖給出了YOLOv2和對比算法的準確率和運行時間的綜合性能結果。能夠看出YOLOv2在保證準確率的同時,能夠達到超過30fps的圖像檢測速度。相比SSD512和Faster R-CNN(使用ResNet),YOLOv2在準確率和運行性能上都更勝一籌(圖中左邊第一個藍圈)。

 

 

1.2.2 YOLOv3: an incremental improvement

論文連接:

https://arxiv.org/abs/1804.02767

開源代碼:

https://github.com/pjreddie/darknet

錄用信息:無。原文是4頁technical report,2018年4月在arxiv放出。

論文目標:

保證準確率同時,更快。

核心思想:

YOLOv3對YOLO9000進行了改進,v3採用的模型比YOLO9000更大,進一步提升檢測準確率,但速度比YOLO9000稍慢。相比其餘檢測算法,RetinaNet,SSD,DSSD等算法,YOLOv3的綜合性能(準確率&速度)仍然非常最好的。但總的來講,文章的改進主要仍是修修補補,換換網絡,沒有特別的突出創新點。

YOLOv3在Pascal Titan X上處理608x608圖像速度達到20FPS,在 COCO test-dev 上 mAP@0.5 達到 57.9%,與RetinaNet(FocalLoss論文所提出的單階段網絡)的結果相近,而且速度快4倍.

YOLO v3的模型比以前的模型複雜了很多,能夠經過改變模型結構的大小來權衡速度與精度。

速度對好比下:

分類器-類別預測
YOLOv3不使用Softmax對每一個框進行分類,主要考慮因素有兩個:

  1. Softmax使得每一個框分配一個類別(score最大的一個),而對於Open Images這種數據集,目標可能有重疊的類別標籤,所以Softmax不適用於多標籤分類。
  2. Softmax可被獨立的多個logistic分類器替代,且準確率不會降低。
    分類損失採用binary cross-entropy loss.

多尺度預測
每種尺度預測3個box, anchor的設計方式仍然使用聚類,獲得9個聚類中心,將其按照大小均分給3中尺度.

  • 尺度1: 在基礎網絡以後添加一些卷積層再輸出box信息.
  • 尺度2: 從尺度1中的倒數第二層的卷積層上採樣(x2)再與最後一個16x16大小的特徵圖相加,再次經過多個卷積後輸出box信息.相比尺度1變大兩倍.
  • 尺度3: 與尺度2相似,使用了32x32大小的特徵圖.

基礎網絡 Darknet-53
仿ResNet, 與ResNet-101或ResNet-152準確率接近,但速度更快.對好比下:

 

網絡結構以下:

YOLOv3在 mAP0.5mAP0.5 及小目標 APSAPS 上具備不錯的結果,但隨着IOU的增大,性能降低,說明YOLOv3不能很好地與ground truth切合.

邊框預測
做者嘗試了常規的預測方式(Faster R-CNN),然而並不奏效: x,y的偏移做爲box的長寬的線性變換.

 

算法效果:

對320x320的輸入圖像,YOLOv3在保證檢測準確率與SSD一致(mAP=28.2)的前提下,處理每張圖像的時間爲22ms,比SSD快3倍。

值得注意的是,論文提出的darknet-53,是一個比ResNet152綜合性能更好的分類網絡。

 

1.2.3 Object detection at 200 Frames Per Second

論文連接:

https://arxiv.org/abs/1805.06361

開源代碼:無

錄用信息:無

論文目標:

爲了解決檢測算法計算複雜度太高、內存佔用過大的問題,本文提出了一種快而有效的方法,可以在保持高檢測率的同時,達到每秒200幀的檢測速度。

核心思想:

爲了實現又快又強的檢測目標,本文從三個方面提出了創新:網絡結構、損失函數以及訓練數據。在網絡結構中,做者選擇了一種深而窄的網絡結構,並探討了不一樣特徵融合方式帶來的影響。在損失函數設計中,做者提出了蒸餾損失函數以及FM-NMS方法以適應one-stage算法的改進。最後,做者在訓練時同時使用了已標註數據和未標註數據。下面具體介紹下本文在這三方面的創新工做。

1、網絡結構

通常來講,網絡越深越寬,效果也會越好,但同時計算量和參數量也會隨之增長。爲了平衡算法的效果與速度,做者採用了一個深而窄的網絡結構。示意圖以下:

 

說明一下,本文的baseline算法是Tiny-Yolo(Yolo 9000的加速版)。

爲了實現更窄,做者將卷積的通道數作了縮減,從Yolo算法的1024縮減爲了512;爲了實現更寬,做者在最後添加了3個1*1的卷積層。爲了加深理解,建議讀者結合Yolo的網絡結構圖,對比查看。

從上圖中,咱們還能夠看出,做者採用了特徵融合的方式,將前幾層提取的特徵融合到了後面層的特徵圖中。在融合的過程當中,做者並無採起對大尺寸特徵圖作max pooling而後與小尺寸特徵圖作融合的方式,而是採用了stacking方法,即先將大尺寸特徵圖進行resize而後再和小尺寸特徵圖作融合。具體到上圖中,對104*104*64的特徵圖用卷積核數量爲4,大小爲1*1的卷積層進行壓縮,獲得104*104*4的特徵圖,而後作resize獲得13*13*256的輸出。

2、損失函數

蒸餾算法是模型壓縮領域的一個分支。簡單來講,蒸餾算法是用一個複雜網絡(teacher network)學到的東西去輔助訓練一個簡單網絡(student network)。但直接將蒸餾算法應用於one stage的Yolo算法還存在着一些困難。

困難1:對於two stage算法,在第一階段就會去除不少背景RoI,送入檢測網絡的RoI相對較少,而且大部分包含object;而one stage 算法,輸出中包含大量背景RoI。若是直接對輸出進行學習,會致使網絡過於關注背景,而忽視了前景。

鑑於此,本文做者提出objectness scaled distillation,主要考慮了teacher network中輸出的objectness對損失函數的影響。做者認爲只有objectness比較大的才應該對損失函數有貢獻。

爲了更好地理解做者的思路,咱們先回顧一下Yolo算法的損失函數,以下所示:

 

做者提出的蒸餾損失函數以下:

 

困難2:對於檢測算法來講,若是不作NMS,直接將teacher network的預測RoI輸出給student network,會由於某些box有不少的相關預測RoI而致使這些box容易過擬合。

基於特徵的NMS算法(feature map NMS或者簡寫成FM-NMS)
NMS是object detection算法中經常使用的後處理算法,用來去除重複預測框,傳統的NMS算法和網絡結構的訓練是獨立的。若是不作NMS,直接將teacher network的預測框輸出給student network,則會致使student network接收到的object相關的loss會很是大,這樣訓練幾輪之後就會對這些object過擬合了。所以這裏採起了相似NMS算法的feature map NMS進行重複框進行去除。

首先在Yolo算法中,最後的輸出層中每一個grid cell的維度是1*1*(N*(K + 5)),也就是圖中的藍色或綠色三維矩形條,矩形條的長度就是N*(K + 5),其中N表示bbox的數量,K表示分類的類別數,5表示4個座標值和1個objectness score。grid cell的數量就是輸出層的feature map的寬高乘積。FM-NMS算法的假設是假如幾個相鄰的grid cell所預測bbox的類別同樣,那麼這些bbox極有可能預測的是同一個object。基於這樣的假設或者說是觀察到的現象,FM-NMS算法的作法是:每次取3*3個相鄰的grid cell,對這9個grid cell中預測類別相同的bbox的得分(objectness value)進行排序,最後只選擇得分最高的那個bbox傳給後續的student network。Figure4是對2個grid cell作FM-NMS的示意圖。

這裏寫圖片描述

3、訓練數據

鑑於做者使用了蒸餾算法,在訓練時,能夠很是方便地使用已標註數據和未標註數據。若是有標註數據,就使用完整的蒸餾損失函數。若是沒有標註數據,就只使用蒸餾損失函數的distillation loss部分。

算法效果:

 

1.2.4 DSSD: Deconvolutional Single Shot Detector

論文連接:

https://arxiv.org/pdf/1701.06659.pdf

開源代碼:

https://github.com/MTCloudVision/mxnet-DSSD 綜述筆者實現版本

錄用信息:未被會議收錄

論文目標:

大小物體通吃。使用Top-Down網絡結構,解決小物體檢測的問題。

DSSD論文的詳細解讀能夠參見https://zhuanlan.zhihu.com/p/33036037。

DSSD與FPN相似,都是基於Top-Down結構解決小物體檢測,不一樣的是,如FPN的網絡結構只是針對ResNet作了優化,文章中也沒有說起過更換其餘的基礎網絡的實驗結果,普適度不夠。DSSD做者提出一種通用的Top-Down的融合方法,使用vgg和ResNet網絡將高層的語義信息融入到低層網絡的特徵信息中,豐富預測迴歸位置框和分類任務輸入的多尺度特徵圖,以此來提升檢測精度。

筆者認爲,雖然Top-Down結構也許有效,但畢竟DSSD比FPN放出時間更晚一些,且在網絡結構上這並無太大創新,也許這就是本文未被會議收錄的緣由之一。

核心思想:

DSSD是基於SSD的改進,引入了Top-Down結構。下文分別從這兩方面出發,介紹DSSD思想。

1、DSSD之於SSD

DSSD相對於 SSD算法的改進點,總結以下:

1.提出基於Top-Down的網絡結構,用反捲積代替傳統的雙線性插值上採樣。

2.在預測階段引入殘差單元,優化候選框迴歸和分類任務輸入的特徵圖。

3. 採用兩階段訓練方法。

DSSD的網絡結構與SSD對好比下圖所示,以輸入圖像尺寸爲爲例,圖中的上半部分爲SSD-ResNet101的網絡結構,conv3_x層和conv5_x層爲原來的ResNet101中的卷積層,後面的五層是SSD擴展卷積層,原來的SSD算法是將這七層的特徵圖直接輸入到預測階段作框的迴歸任務和分類任務。DSSD是將這七層特徵圖拿出六層(去掉尺寸爲的特徵圖)輸入到反捲積模型裏,輸出修正的特徵圖金字塔,造成一個由特徵圖組成的沙漏結構。最後經預測模塊輸入給框迴歸任務和分類任務作預測。

 

 

DSSD中的D,即反捲積模型,指的是DSSD中高層特徵和低層特徵的融合模塊,其基本結構以下圖所示:

 

 

 

2、DSSD之於FPN和TDM

一樣是採用Top-Down方式,DSSD與FPN 和TDM(這兩篇論文將在本論述後文中詳細介紹)的網絡結構區別以下圖。能夠看出,TDM使用的是concat操做,讓淺層和深層的特徵圖疊在一塊兒。DSSD使用的是Eltw Product(也叫broadcast mul)操做,將淺層和深層的特徵圖在對應的信道上作乘法運算。FPN使用的是Eltw Sum(也叫broadcast add)操做,將淺層和深層的特徵圖在對應的信道上作加法運算。

 

算法效果:

DSSD 當輸入爲513x513的時候在VOC2007數據集賞達到了80.0%mAP。

更詳細的實驗復現和結果對比見:

https://zhuanlan.zhihu.com/p/33036037

1.2.5 DSOD : learning deeply supervised object detectors from scratch

論文連接:

https://arxiv.org/pdf/1708.01241.pdf

開源代碼:

https://github.com/szq0214/DSOD

錄用信息:ICCV2017

 

 

 

未完待續----

相關文章
相關標籤/搜索