論文原文: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中,來計算在
圖1 SqueezeDet detection pipeline。一個卷積神經網絡從輸入圖片中提取一個特徵圖,並且將其輸入到ConvDet層中,然後ConvDet層計算在W×H空間中均勻分佈網格的邊界框,每個邊界框和一個置信評分、C個條件分類概率相聯繫,然後我們保留前N個具有最高置信評分的邊界框,並且使用NMS(非最大值抑制)過濾得到最後的檢測結果。
每個邊界框和C+1個值相聯繫,其中C是用來分類的概率向量,另外一個值是置信評分(表徵邊界框中實際包含一個對象的概率)。和YOLO相似,我們將置信評分理解爲一個高的置信評分意味着邊界框中存在對象的概率較高,預測情況與真實情況吻合程度較高。其他的C個值是假定邊界框中有對象存在時該對象的條件分類概率,更正式地說,我們定義這個條件概率爲:
最後我們保留前N個具有最高置信評分的邊界框,使用NMS(非最大值抑制)的方法過濾多餘的邊界框以獲得最終的檢測結果。在整個訓練過程中,整個檢測管道(detection pipeline)僅由一個神經網絡的一個前向傳遞組成,後期處理很少。
3.2 ConvDet
SqueezeDet 的檢測管道(detection pipeline)是受YOLO的啓發而提出的。但是正如我們在這節所描述,ConvDet層的設計使得SqueezeDet與YOLO相比,能夠在更少的模型參數下生成成千上萬張 region proposals。
ConvDet層實際上是用來訓練輸出邊界框座標和分類概率的一個卷積層,它的工作原理類似一個滑動窗口, 在特徵圖上的每個空間位置移動,在每一個位置,它會計算K x (4+1+C) 個值來對邊界框預測情況進行編碼。此處,K是具有預先選定形狀的引用邊界框的數目。使用Girshick 提出的概念,我們稱這些引用邊界框爲錨(anchor) ,特徵圖的每一個位置在原圖上對應一個網格,所以每個anchor可由四個標量來描述
對於每一個anchor( i, j, k),我們計算四個相關的座標
其中
正如前面的解釋,對於每個anchor的其他C+1個輸出實質是將置信評分和分類概率進行了編碼。
圖2 邊界框轉換,每一個網格中心都有已經確定形狀的K個anchor,然後使用 ConvDet 層計算的相對座標將每個錨點轉換爲新的位置和形狀。每一個anchor與一個置信評分和分類概率聯繫。
ConvDet和Faster R-CNN中RPN的最後一層相似。主要的區別就是,RPN 被認爲是一個很弱的檢測器,它只能檢測目標是否存在並且爲這個對象生成邊界框,分類就交給了全連接層(全連接層被視爲是一種很強的分類器),但實際上,卷積層也是足夠強大,可以同時檢測、定位和分類對象。
爲了簡單起見,我們將YOLO的檢測層視爲FcDet(只計算最後兩個全連接層),與 FcDet 相比, ConvDet 層具有數量較少的參數, 並且仍然能夠生成更高空間分辨率的區域方案, ConvDet 和 FcDet的對比在圖3中。
假定輸入的特徵圖的尺寸是
FcDet 是由兩個全連接層組成。假定
在YOLO中,其輸入特徵圖的尺寸是
3.3 訓練方法
和 Faster R-CNN不一樣,Faster R-CNN需要部署一個(4-step)的交替訓練策略(來訓練RPN)和探測器網絡,而我們的SqeezeDet檢測網絡和YOLO相似,可以實現端對端訓練。
爲了訓練ConvDet層來學習檢測、定位、分類,我們定義了一個多任務的損失函數:
這損失函數的第一部分是邊界框迴歸函數,各變量的微分形式對應於位於網格中心
這個等式其實是第一個等式的反變換,各個變量表示的是對應於真實情況的邊界框的座標。在訓練過程中, 我們將真實邊界框與所有的錨點(anchor)進行比較, 並將它們分配給具有最大重疊 (IOU) 的anchor。原因是, 我們要選擇 “最接近” 的anchor匹配的真實邊界框, 這樣的轉換需要減少到最低。如果在位置
圖3 和RPN相比,YOLO的ConvDet和Detection 層。Activations 表示爲藍色立方體,層 (及其參數) 表示爲橙色的。Activations 和參數尺寸也被標註。
這個損失函數的第二部分是置信評分迴歸函數,
這個損失函數的最後一部分是分類的交叉熵函數(cross entropy),
公式2中的超參數都是經過實際賦值的,在我們的實驗中,
3.4 神經網絡結構設計
在這節之前,我們已經介紹了檢測管道、ConvDet層、端對端的訓練方法。這些方法都是通用的,並且和各種不同的CNN結構,包括 VGG16、ResNet等等。當選擇核心的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]