DSSD:Deconvolutional Single Shot Detector 解析與實踐

本文解析DSSD (arxiv.org/abs/1701.0665) 論文思想,基於MXNet實現了該演算法。此外,我們將BeyondSkip Connections: Top-Down Modulation for Object Detection(arxiv.org/abs/1612.0685)一文中的TDM模塊應用於SSD之上,並將DSSD效果與SSD+TDM效果進行了對比。MXNet版本的DSSD和SSD+TDM代碼:github.com/MTCloudVisio

本文主要包括以下幾部分:DSSD演算法思想,DSSD網路結構設計,模型訓練方法,以及效果復現和對比。

一、DSSD演算法思想

DSSD是對SSD演算法的優化改進,主要改進點如下:

1)提出基於top down的網路結構,用反卷積代替傳統的雙線性插值上採樣。

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

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

主要解決問題:

卷積神經網路在結構上存在固有的問題:高層網路感受野比較大,語義信息表徵能力強,但是解析度低,幾何細節信息表徵能力弱。低層網路感受野比較小,幾何細節信息表徵能力強,雖然解析度高,但語義信息表徵能力弱。SSD採用多尺度的特徵圖來預測物體,使用具有較大感受野的高層特徵信息預測大物體,具有較小感受野的低層特徵信息預測小物體。這樣就帶來一個問題:使用的低層網路的特徵信息預測小物體時,由於缺乏高層語義特徵,導致SSD對於小物體的檢測效果較差。而解決這個問題的思路就是對高層語意信息和低層細節信息進行融合。作者採用Top Down的網路結構進行高低層特徵的融合併且改進了傳統上採樣的結構。

雖然Top Down的方法來豐富特徵信息的思想很容易理解,但是大多數論文中所說的特徵圖金字塔的構造方式各不相同,只是針對於特定的網路結構來做優化,比如FPN的網路結構只是針對resnet做了優化,文章中也沒有提及過更換其他的基礎網路的實驗結果,普適度不夠。DSSD作者提出一種通用的Top Down的融合方法,使用vgg和resnet網路,以及不同大小的訓練圖片尺寸來驗證演算法的通用型,將高層的語義信息融入到低層網路的特徵信息中,豐富預測回歸位置框和分類任務輸入的多尺度特徵圖,以此來提高檢測精度。在提取出多尺度特徵圖之後,作者提出由殘差單元組成的預測模塊,進一步提取深度的特徵最後輸入給框回歸任務和分類任務。除了DSSD外,另外兩篇文章FPN: Feature Pyramid Networks

for Object Detection(以下簡稱FPN)和Beyond

Skip Connections: Top-Down Modulation for Object Detection(以下簡稱TDM),也利用了Top Down融合的思想。

下圖給出了Google TDM、DSSD和FPN的Top Down網路結構,在特徵圖信道融合的步驟中,他們用了不同的方法:Google TDM使用的是concat操作,讓淺層和深層的特徵圖疊在一起。DSSD使用的是Eltw Product(也叫broadcast mul)操作,將淺層和深層的特徵圖在對應的信道上做乘法運算。FPN使用的是Eltw Sum(也叫broadcast add)操作,將淺層和深層的特徵圖在對應的信道上做加法運算。

二、網路結構設計

1. 總體結構

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

2. 反卷積模型

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

高層的特徵圖的尺寸為2H*2W*D,低層將要反卷積的特徵圖尺寸為H*W*512,這裡有幾點注意事項:

1) 高層特徵圖的通道數將會被捨棄,在反卷積模型中,所有卷積和反卷積操作,卷積個數都依賴於輸入的低層特徵圖的通道數。

2) BN操作放在卷積層和激活層之間。

3) 之前一些方法的上採樣都是通過雙線性插值來實現的,DSSD是通過反卷積層來學習得到的上採樣特徵圖(註:本條是根據原論文描述得來,具體實現過程中存在一定問題,會在下文中詳細描述)。

4) 高層特徵圖與低層特徵圖在通道融合的時候,使用了broadcast mul,DSSD作者也使用過broadcast add,結果發現通道之間相乘比相加可以提升0.2%個map,但是推理速度像素相加要略快於相乘。

5)在SSD中一些網路如(vgg)的低層特徵圖需要增加normalization的操作處理,因為 它的feature scale和其他層不同,如果混在一起訓練,在實踐過程中會很難訓練(容易訓飛),具體原理詳見Liu Wei另外一篇論文 ICLR 2016, ParseNet:Looking wider to see better 。在DSSD進行高低層特徵融合時同樣要注意這個問題,低層特徵必要的時候需要增normalization處理。

conv4_3 權重分布

conv7權重分布

vgg各層均值和方差

3. 預測模型

預測模型是在框回歸任務、分類任務之前和反卷積模型之後添加的網路結構。

預測模型結構如上圖所示,(a)為SSD使用的方法,直接提取出網路中的多尺度特徵圖做分類和框回歸的預測;(b)為是resnet殘差單元的網路結構;(c)為作者改進的只含一個殘差單元的預測模型,在殘差旁路將原來的特徵圖用的卷積核做處理後與網路主幹道的特徵圖做通道間加法;(d)為只含兩個殘差單元的預測模型。

在訓練階段,DSSD作者使用兩段訓練方法(詳見下文),對比了上圖四種預測方式的實驗結果,最後確定採用結果(c)。因此在預測階段,作者使用的是(c)的方式來對特徵圖做的處理。

三、模型訓練方法

1. SSD的default box的優化方式

實驗時,使用SSD模型初始化 DSSD網路,但是對於default box選取的長寬比例,作者在論文中做了詳細的分析和改進。為了得到PASCAL VOC 2007和2012 trainval圖片里各個物體對應的真實位置框的長寬比例,作者用K-means對這些真是框內區域面積的平方根作為特徵做了一個聚類分析,做聚類的時候增加聚類的個數來提升聚類的準確度,最後確定七類的時候收斂的錯誤率最低如下圖所示:

因為SSD訓練時使用的訓練圖片會重新調整比例變成方形的尺寸如()或者,但是在大多數的訓練圖片都是比較寬的圖片,所以相應的真實框的寬度會變小一點。通過這種聚類實驗最後確定了預測使用的default box的長寬比例為1、1.6、2和3,作為每一個特徵圖的default

box所使用的長寬比例。

2. DSSD訓練方法

DSSD作者在caffe的框架中將SSD的基礎網路改成resnet101然後重新訓練了一個新的SSD模型,以VOC的數據集為例,訓練集使用的數據是VOC2007和VOC2012的trainval數據集,測試用的是07的測試集,訓練時一共迭代了70k次,使用學習率為1e-3在前40k次iterations,然後調整學習率為1e-4、1e-5再分別訓練20k次、10k次iterations。然後用用訓練好的SSD模型來初始化DSSD網路。訓練DSSD的過程分為兩個階段,第一個階段,載入SSD模型初始化DSSD網路,並凍結SSD網路的參數,然後只增加反卷積模型(不添加預測模型),在這樣的條件下只訓練反卷積模型,設置學習率為1e-3、1e-4分別迭代20k次和10k次;第二個階段,fine-tune第一階段的模型,解凍第一階段訓練時候凍結的所有參數,並添加預測模型,設置學習率為1e-3、1e-4再分別訓練20k次、20k次iterations。

註:我們的實驗結果表明上述兩階段訓練方法並沒有得到提升,反而不凍結網路參數,直接訓練網路效果更好,比原版SSD提升更多。具體見實驗結果部分。

3. 網路結構配置策略

此方法主要是來驗證反卷積模塊和預測模型對於檢測性能的作用,作者先是訓練了一個輸入圖像為321*321的resnet101-SSD模型,它的map為76.4%。再加入了不同的預測模型結構((b)(c)(d)這三種,使用之後的map分別為76.9%,77.1%,77.0%)以後效果確實變好了,作者發現預測模型(c)的map是最高的,所以確定並選取只含一層殘差單元的模型結構來做候選框回歸和分類任務,並在之後的輸入為512的DSSD模型中,無論是訓練VOC的數據集還是coco的數據集,都使用預測模型(c)來做實驗。最後又fine-tune整個模型訓練反卷積模型來討論反卷積模型中特徵圖通道融合是使用相加還是相乘的效果好,實驗結果如下圖所示,可以看出信道相乘稍微好一些。圖中最後一行為使用approximate bilinear pooling的結果。

四、本文復現結果

我們在MXNet上實現了DSSD演算法,同時在SSD網路基礎上添加了Beyond Skip Connections: Top-Down Modulation for Object Detection(https://arxiv.org/abs/1612.06851)中TDM模塊,對比了DSSD和SSD+TMD的檢測效果。演算法實現過程中,為了實用價值,確保推理速度,我們對原文提出的網路進行了適當的改進,具體細節如下。

1. 演算法復現細節

本文採用的DSSD論文中的設置:

  • 在原始版本SSD中vgg16的conv4_3需要使用L2正則化來處理,因為這一層的梯度過大,容易引起loss=NAN,導致模型不能收斂。
  • DSSD作者建議推理階段合併BN層到conv層,公式如下所示,即將BN層合併到相鄰的卷積層,可以加快計算速度1.2-1.5倍,這個設置本文沒有驗證,後續會實現。

本文改動設置:

  • DSSD網路中以resnet101為基礎的網路最低層預測層以及之後延伸出去的預測層通道數均為非常臃腫的1024,這樣雖然map很高,但是網路速度非常慢模型大小也到了驚人的1.5G以上。我們在實現過程中主要是基於實用性的考慮沒有把網路變得這麼重,而將六層特徵圖的通道數改為[1024,2048,512,256,256,128],這樣做的主要意義在於驗證演算法的普適性,觀察該演算法在其他參數甚至其它網路下是否同樣有效。在使用vgg16網路時,七層特徵圖的通道數採用[512, 1024, 512, 256,256, 256, 256]。同時我們沒有設置DSSD的default box的長寬比,仍然使用SSD的長寬比,並且減少了一些[3,1./3]的比例。
  • DSSD文中在特徵融合時將上採樣替換成了反卷積。我們為了對比反卷積是否對演算法起到了正向作用,採用了另外兩種top-down結構中所用到的上採樣方法,即FPN: Feature Pyramid Networks for Object Detection和Beyond Skip Connections:

    Top-Down Modulation for Object Detection採用的都是最臨近插值法。
  • 我們將Beyond Skip Connections文中的TDM模塊加到SSD網路中,作為DSSD的對比。Beyond Skip Connections論文中所提到的方法是在faster rcnn網路中實現的,這裡我們將它的「調製」的思想實現到SSD中,即SSD+TMD。同時,SSD+TMD中採用的上採樣方法也是FPN和TDM中採用的最鄰近差值法。

訓練參數設置:

  • 訓練共迭代240個epoch,每80個epoch學習率衰減10倍,初始學習率設為2e-3,其他超參數設置和SSD一致。(註:此處指的是最早版本的SSD,由於最新版本的SSD網路過於臃腫,推理速度較慢,不在本文討論範圍內)。

2. 實驗結果

本實驗沒有採用論文裡面最重的網路,而是為了實用性,對網路設置進行了適當改進(見演算法復現細節)。本實驗的意義主要在於去驗證論文演算法思想的有效性,並非復現論文中提到的map,因此以下結果在voc2007 test 數據中的map值比原論文中提到的map要低。

其中:

  • SSD_min_loss為初始化DSSD模型訓練所使用SSD模型,選取的是模型訓練loss最小情況下對應的SSD模型。
  • DSSD*為使用SSD初始化網路,但是不凍結SSD參數得到的DSSD模型。
  • DSSD_stage1為採用論文訓練方法的第一階段訓練,凍結SSD所有參數,添加反卷積結構訓練得到的模型。
  • DSSD_stage2為採用論文訓練方法的第二階段訓練,解凍第一階段的參數並添加預測模型結構得到的模型。
  • DSSD+TDM為將google TDM模塊應用於SSD網路得到的模型,使用 imagenet模型初始化。

3. 結論

相比SSD,DSSD演算法確實可以帶來提升,但是本文驗證結果表明,以下幾點和論文結論不符。

a) 論文中提到SSD+resnet101+321效果不如SSD+vgg16+300好,但我們的實驗結果顯示SSD+resnet101+321 結果更好。但是DSSD+resnet101+321的結果不如 DSSD+vgg16+300的結果好。

b) 論文中採用兩階段訓練,我們嚴格按照論文參數進行訓練,得到提升很有限,而且訓練十分耗時。後來我們採用不凍結參數,直接訓練,該方法得到的提升要高於原文中的兩階段訓練法。時間也要快將近三倍。

c) 我們同時對比了Beyond Skip Connections: Top-Down Modulation for Object Detection一文中的TDM結構。發現vgg上提升效果要高於論文中的反卷積模塊的效果,且訓練速度和顯存使用都要優於DSSD。

此外, 我們的實驗結果表明,Backbone網路為vgg16-512時,Google TDM結合在SSD上的效果優於DSSD。

本文作者:元潤一,計算機視覺演算法實習生;劉旭,計算機視覺工程師,美圖雲視覺技術部門。

轉載請註明出處。

推薦閱讀:

MXnet初體驗之inception-resnet-v2從Model到Predict
MXNet的動態圖介面Gluon
AI 從業者該如何選擇深度學習開源框架丨硬創公開課
國內哪些公司在用caffe、torch、TensorFlow、paddle等框架,哪些在用自研框架?

TAG:深度学习DeepLearning | 目标检测 | mxnet |