SqueezeDet:一種應用於自動駕駛實時目標檢測中的標準、小型、低功耗的全卷積神經網絡(二)

論文原文:SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real-Time Object Detection for Autonomous Driving
源代碼:https://github.com/BichenWuUCB/squeezeDet
論文翻譯:XJTU_Ironboy
時間:2017年8月

3. 方法描述

3.1 檢測管道(Detection Pipeline)

  受到YOLO(You Only Look Once)的啓發,我們採用單級的檢測管道(detection pipeline),把 region proposition和分類器同時放在一個單獨的網絡中去實現,正如我們在圖1所示:一個卷積神經網絡首先將一張圖片作爲輸入,並且從圖片中提取一個低分辨率、高維度的特徵圖,然後這個特徵圖輸入到ConvDet中,來計算在W×H 空間中均勻分佈網格的邊界框,此處,W和H是沿水平軸和垂直軸的網格數。
這裏寫圖片描述
圖1 SqueezeDet detection pipeline。一個卷積神經網絡從輸入圖片中提取一個特徵圖,並且將其輸入到ConvDet層中,然後ConvDet層計算在W×H空間中均勻分佈網格的邊界框,每個邊界框和一個置信評分、C個條件分類概率相聯繫,然後我們保留前N個具有最高置信評分的邊界框,並且使用NMS(非最大值抑制)過濾得到最後的檢測結果。

  每個邊界框和C+1個值相聯繫,其中C是用來分類的概率向量,另外一個值是置信評分(表徵邊界框中實際包含一個對象的概率)。和YOLO相似,我們將置信評分理解爲一個高的置信評分意味着邊界框中存在對象的概率較高,預測情況與真實情況吻合程度較高。其他的C個值是假定邊界框中有對象存在時該對象的條件分類概率,更正式地說,我們定義這個條件概率爲:Pr(classc|Object)c[0,1] ,我們將條件概率最大的種類作爲這個邊界框的標籤(lable),並且將maxcPr(classc|Object)Pr(Object)IOUpredtruth 作爲計算邊界框置信度評分的度量。
  最後我們保留前N個具有最高置信評分的邊界框,使用NMS(非最大值抑制)的方法過濾多餘的邊界框以獲得最終的檢測結果。在整個訓練過程中,整個檢測管道(detection pipeline)僅由一個神經網絡的一個前向傳遞組成,後期處理很少。

3.2 ConvDet

  SqueezeDet 的檢測管道(detection pipeline)是受YOLO的啓發而提出的。但是正如我們在這節所描述,ConvDet層的設計使得SqueezeDetYOLO相比,能夠在更少的模型參數下生成成千上萬張 region proposals
  ConvDet層實際上是用來訓練輸出邊界框座標和分類概率的一個卷積層,它的工作原理類似一個滑動窗口, 在特徵圖上的每個空間位置移動,在每一個位置,它會計算K x (4+1+C) 個值來對邊界框預測情況進行編碼。此處,K是具有預先選定形狀的引用邊界框的數目。使用Girshick 提出的概念,我們稱這些引用邊界框爲錨(anchor) ,特徵圖的每一個位置在原圖上對應一個網格,所以每個anchor可由四個標量來描述(xˆi,yˆj,wˆk,hˆk) 。此處,xˆi,yˆj 是網格中心(i , j)的座標,wˆk,hˆk 是引用邊界框的寬和高。我們用參考文獻[2]中所描述的方法來選定符合數據分佈的引用邊界框的形狀。
對於每一個anchor( i, j, k),我們計算四個相關的座標(δxijk,δyijk,δwijk,δhijk) 來將anchor轉換成可預測的邊界框,正如圖2所示,這種轉換由以下的數學公式來描述:


這裏寫圖片描述
其中 xG,yG,wG,hG 是預測邊界框框的座標。

  正如前面的解釋,對於每個anchor的其他C+1個輸出實質是將置信評分和分類概率進行了編碼。
這裏寫圖片描述
圖2 邊界框轉換,每一個網格中心都有已經確定形狀的K個anchor,然後使用 ConvDet 層計算的相對座標將每個錨點轉換爲新的位置和形狀。每一個anchor與一個置信評分和分類概率聯繫。

  ConvDetFaster R-CNNRPN的最後一層相似。主要的區別就是,RPN 被認爲是一個很弱的檢測器,它只能檢測目標是否存在並且爲這個對象生成邊界框,分類就交給了全連接層(全連接層被視爲是一種很強的分類器),但實際上,卷積層也是足夠強大,可以同時檢測、定位和分類對象。
  爲了簡單起見,我們將YOLO的檢測層視爲FcDet(只計算最後兩個全連接層),與 FcDet 相比, ConvDet 層具有數量較少的參數, 並且仍然能夠生成更高空間分辨率的區域方案, ConvDetFcDet的對比在圖3中。
  假定輸入的特徵圖的尺寸是(Wf,Hf,Chf) ,其分別是長、寬、通道數,ConvDet的濾波器的寬和高爲(Fw,Fh) ,通過適當的padding/strides策略, 可以使得ConvDet 的輸出與特徵保持相同的空間維度。爲了去計算每個引用網格的K×(4+1+C) 個輸出,ConvDet層需要的參數的數量是Fw×Fh×Chf×K×(C+5)
   FcDet 是由兩個全連接層組成。假定Fc1 層的輸出特徵圖的數量記爲Ffc1 ,則Fc1層參數的數量爲Wf×Hf×Chf×Ffc1 ,第二個全連接層生成C個分類概率、K×(4+1) 個邊界框和給每一個W×H 的網格生成的置信評分,因此Fc2 層參數的數量爲Ffc1×W0×H0×(5K+C) ,兩層參數的總的數量爲Ffc1×(Wf×Hf×Chf+W0×H0×(5K+C))

這裏寫圖片描述

  在YOLO中,其輸入特徵圖的尺寸是7×7×1024Ffc1=4096 , K=2 , C=20 , W=H=7 ,因此這兩層全連接層的總數量大約是212×106 ,如果我們保持特徵圖的大小,輸出網格的數量,分類數目和anchor不變,並且使用3 x 3的ConvDet,將需要0.46×106 個參數,比FcDet小460倍, RPNConvDetFcDet的具體描述在圖3中,其對比結果的總結在上面的表1中。

3.3 訓練方法

  和 Faster R-CNN不一樣,Faster R-CNN需要部署一個(4-step)的交替訓練策略(來訓練RPN)和探測器網絡,而我們的SqeezeDet檢測網絡和YOLO相似,可以實現端對端訓練。
  爲了訓練ConvDet層來學習檢測、定位、分類,我們定義了一個多任務的損失函數:

這裏寫圖片描述

  這損失函數的第一部分是邊界框迴歸函數,各變量的微分形式對應於位於網格中心(ij)anchor-k 的相對座標,它們是ConvDet層的輸出,對應於真實情況的邊界框可以如下計算:

這裏寫圖片描述

  這個等式其實是第一個等式的反變換,各個變量表示的是對應於真實情況的邊界框的座標。在訓練過程中, 我們將真實邊界框與所有的錨點(anchor)進行比較, 並將它們分配給具有最大重疊 (IOU) 的anchor。原因是, 我們要選擇 “最接近” 的anchor匹配的真實邊界框, 這樣的轉換需要減少到最低。如果在位置(ij) 上的第K個anchor與真實邊界框有最大的重疊,那麼相應的Iijk 評價爲1,否則爲0。這樣, 我們只需要包括由 “responsible” 的anchor產生的損失。由於每個圖像可以有多個對象, 因此我們通過將它除以對象數來規範化損失。

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

圖3 和RPN相比,YOLO的ConvDet和Detection 層。Activations 表示爲藍色立方體,層 (及其參數) 表示爲橙色的。Activations 和參數尺寸也被標註。

  這個損失函數的第二部分是置信評分迴歸函數,γijkConvDet層的輸出,表示在位置(ij) 上的第K個anchor的置信評分的預測值,γijk 是通過計算預測邊界框和真實邊界框之間的重疊部分中得到的。和上面相同,我們只包括由anchor產生的損失與真實情況的最大重疊。對於那些在檢測中不可信的anchor,我們用I¯ijkγ2ijk 項來懲罰他們,其中I¯ijk=1Iijk 。通常情況下,有大量的anchor沒有包括任何對象,爲了平衡他們的影響,我們引入了λ+confλconf 項來調整這兩個損失函數的權重,通過定義可以,置信評分的取值範圍是[0,1]。爲了保證γijk 的值能落入這個區間,我們將ConvDet層的輸出通過一個sigmoid函數來使其標準化。
  這個損失函數的最後一部分是分類的交叉熵函數(cross entropy),lcG 是真實標籤,pc 是網絡預測,我們用softmax來使相應的ConvDet層的輸出標準化來保證pc 的值都落在[0,1]。
  公式2中的超參數都是經過實際賦值的,在我們的實驗中,λbbox=5λ+conf=75λconf=100 ,損失函數使用BP算法進行優化。

3.4 神經網絡結構設計

  在這節之前,我們已經介紹了檢測管道、ConvDet層、端對端的訓練方法。這些方法都是通用的,並且和各種不同的CNN結構,包括 VGG16ResNet等等。當選擇核心的CNN結構的時候,我們的關注點主要在於模型的大小和能量利用效率,那麼SqueezeNet是我們的首選。
   Model size: SqueezeNet的建立基於Fire模塊(由一個作爲輸入的squeeze層和兩個並聯作爲輸出的expand層構成),其中squeeze層是由1 x 1的卷積層構成,其作用是將具有大的通道數的輸入張量壓縮成同樣batch和空間維度,但具有更少通道數的輸出張量。而expand層是由1 x 1的卷積核與3 x 3的卷積核混合而成,他們將前面壓縮的張量作爲輸入,重新恢復其中的豐富特徵,並且輸出一個具有更大通道數的 activation tensor ,squeeze層和expand層交替使用的方法在不損失較大準確度的情況下非常高效地降低了模型的參數量。
   Energy efficiency: 在神經網絡前向運行過程中,不同的操作對能耗的需求是不一樣的。其中資源消耗最大的是DRAM的連接,它是SRAM能量消耗的100倍並且執行浮點運算,因此我們儘可能希望減少DRAM的連接。
   減少DRAM連接的最簡單的方法是使用小的模型,從而減少參數的存儲。一個減少模型參數的高效的方法是儘可能使用卷積層而不是全連接層,卷積層的參數只需要訪問一次, 並可在輸入數據 (如果 batch>1) 的所有鄰區重複使用。然而,全連接層只在“batch”的維度下才能重複使用參數,它的每個參數僅在輸入數據的一個鄰域中使用。除了模型大小之外,另一個很重要的方面是控制中間激活層的大小。假定計算硬件的SRAM的大小是16MB,SqueezeNet模型的大小是5MB,如果任何兩個連續層的激活輸出的總大小小於11MB,則所有內存訪問都可以在 SRAM 中完成, 不需要 DRAM 訪問。詳細的能效討論將在本文末尾的補充材料提供(不予翻譯,可參考原文文末,望見諒)。
  在這篇論文中,我們採用了兩種版本的SqueezeNet結構。第一種結構是SqueezeNet v1.1模型,模型大小是4.72MB, 在ImageNet top-5上的準確度超過80.3%。第二個是一個更強大版本的SqueezeNet結構,它的擠壓比是0.75,模型大小是19MB,在ImageNet top-5上的準確度爲86%。在本論文中,我們把第一種結構稱爲SqueezeNet,第二種結構是SqueezeNet+。我們預先在ImageNet分類數據庫中訓練了這兩種結構,並且把兩個隨機初始化權重的fire模塊放在預先訓練的模型的最上層,然後將它和ConvDet層連接。

由於本論文較長,中文翻譯分爲幾個部分連載:
SqueezeDet:一種應用於自動駕駛實時目標檢測中的標準、小型、低功耗的全卷積神經網絡(一)
SqueezeDet:一種應用於自動駕駛實時目標檢測中的標準、小型、低功耗的全卷積神經網絡(三)

注:第一次寫博客,且水平有限,有些地方翻譯的很不到位,望諒解!
如有問題需要討論,可發送問題到我的郵箱:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章