hourglass论文_DSSD(1)_论文_arxiv2017
本筆記記錄DSSD,spotlight為:
1 把SSD中VGG16的backbone替換為Resnet-101,fig 1;
2 將de-conv添加至特征金字塔層的生成上,為檢測模型引入了上下文信息,fig 1、3;
3 設計了新的pred模塊(fig 2),de-conv模塊(fig 1、3)結構;
理解了fig 1、2、3后,就很容易理解DSSD了, 論文整體上也不難,git上找到的代碼時基于mxnet_SSD復現的,作者寫的挺好的,佩服~~~
名詞定義:
1 Residual-101:作者將殘差網絡表示為Residual,我在筆記中寫為Resnet;
2 DSSD:De-conv single shot detector,本文提出的目標檢測算法;
Abstract
1 DSSD將輔助的上下文信息(additional context)加入了SSD中,主要為兩個spotlight:
1.1 把SSD中VGG16的backbone替換為Resnet-101,主干網提特征能力更強了;
1.2 將de-conv添加至特征金字塔層的生成上,為模型引入了上下文信息,有利于小尺度目標的檢測,結合fig 1,和segNet、U-net操作有點類似;---- 增加上下文信息的方式就是增加了一個de-conv層的concate;
2 作者提到,兩個spotlight嘴上說說容易,但實現 + work卻不容易,文中改進了前向傳播中de-conv的結合方式(fig 1、3),全新的pred模塊(fig 2),最終性能就提上來了;
3 DSSD-513 x 513在VOC2007 / 2012 / COCO mAP:81.5% / 80.0% / 33.2%,性能優于曾經的sota R-FCN;
1. Introduction
本文將上下文信息引入目標檢測,最終在PASCAL VOC上單模型取得了sota,速度快,精度高,具體兩個操作:
1 把SSD中VGG16的backbone替換為Residual-101;
2 將de-conv添加至特征金字塔層的生成上,為模型引入了上下文信息,有利于小尺度目標的檢測;
DSSD改進了網絡中de-conv與主干網的結合方式(fig 1、3),全新的pred模塊(fig 2),最終性能就棒棒噠啦;
近兩年,滑窗方案又重新在目標檢測領域占據了一席之地,傳統滑窗方案如adaboost人臉檢測,將圖像縮放成圖像金字塔層,再用固定尺度窗口在金字塔上走一波,提特征再分類;RCNN等方案就厲害點,利用selective search方案,對比無腦滑窗能更有效地提取到潛在目標區域,再將該區域縮放至固定尺度后,提取固定維度特征;RCNN中,使用selective search能得到更稀疏的潛在目標區域,召回率高,對比無腦滑窗方案,也能獲取更少的proposals,以及更高的精度;后續的SVM階段,需要對每個proposals提取的特征做分類,并用線性回歸器回歸proposals的相對位置;Fast RCNN還更近了一步,將bbox reg + cls做成了multi-task,共享了特征提取過程;
YOLO:將圖像劃分為7 x 7 grid,直接在整個全局feature map上通過fc全連接層同時預測多個目標的cls score、bbox loc,在每個grid內同時完成bbox cls + reg,速度十分快,精度稍弱;
SSD:將YOLO中直接在feature map上同時預測目標的cls score、bbox loc思想引入,將frcnn中anchor思想(SSD中稱為default box)引入,并將單層feature map上預測目標的方案改為multi-layer feature map上預測的方案,最終速度快,精度高,和frcnn一樣,屬于劃時代的目標檢測方案;
若希望在SSD基礎上更上一層樓,兩條路:backbone性能加強,提的特征更牛逼;增加上下文信息,提升feature map分辨率,卻保持和原方案盡量一致的感受野尺度,方便小尺度目標檢測,那么DSSD就是兩點(又重復了遍,好煩~):
1 把SSD中VGG16的backbone替換為Residual-101;
2 hourglass結構的網絡,現階段在語義分割、人體姿態估計中取得了非常好的效果,也是對encoder-decoder的一種拓展,encoder對輸入圖像編碼,decoder對encoder編碼結果做解碼,最終的輸出可以認為是對輸入圖像在另一種維度上的表達,二者等價地描述了輸入圖像(可以通過圖像的傅里葉變換作類比);
作者提到,以上兩個提升點嘴上說說容易,但實現 + work卻不容易,文中改進了前向傳播中de-conv的結合方式(fig 1、3),全新的pred模塊(fig 2),最終性能就提上來了;
2. Related Work
RCNN / SPPnet / Fast R-CNN / Faster R-CNN / RFCN / YOLO:共同點:在單層top-most feature map上預測所有尺度、長寬比的目標,但要單層feature map有這么強的覆蓋能力,有點為難它了;
那么就需要結合multi-layers上的特征,輔助多尺度目標檢測的精度了;
方案1:將multi-layers上的多層特征做combine,使用combined后的特征做目標檢測;
ION:在VGGNet上獲取multi-layers上的多層特征,combine前先對所有特征做L2 norm,再通過proposals在combined后的特征上提取roi pooling的特征;
HyperNet:與ION類似,使用combined features生成proposals,并基于該proposals進一步在features map上提取roi pooling的特征;
優點:roi pooling得到的特征來自于multi-layer的feature map上,明顯比來自單層feature map上的特征判別性更強,自然更加利于bbox reg + cls;
缺點:combined后的特征參數太多,消耗內存,影響模型的速度;---- 我沒get到這個點,concate雖然增加了模型參數,但可以連接類似conv 1x1方式降低模型參數啊,
方案2:使用特征金字塔上的多層feature map,分別用于預測不同尺度的目標;特征金字塔上不同特征層有不同尺度的感受野,一般操作就是高層預測大尺度目標,低層預測小尺度目標;
SSD:在特征金字塔的不同特征層上通過不同尺度的default box,使得各特征層用于檢測不同尺度范圍內的目標;
MSCNN:對比SSD,做了更細致、更嚴格的特征金字塔上各個分支檢測目標尺度的劃分,并使用de-conv操作提升了feature map的分辨率,使得提取到的特征更具有魯棒性,再做proposals、pooled features的生成;
SSD、MSCNN共同的缺點:僅使用單個淺層feature map上的特征,如conv4-3,預測小尺度目標,該特征層雖然分辨率大,目標的細節信息多,但因為缺乏足夠的語義信息,感受野小,并不能保證小尺度目標的高召回;如果使用更密集的anchor設置,召回是高了,精度卻又低了;
一種解決方案:使用de-conv、skip connection操作,predict特征層就得到了更多的語義信息和多尺度感受野,進而方便小尺度目標的檢測;
方案3:將上下文信息引入到特征提取步驟,特征信息更多樣化,更有利于目標檢測;
Multi-Region CNN:pooled features不僅來源于proposals本身,而且來源于其他pre-defined regions,如中心、邊緣區域、上下文區域等;
DSSD受啟發于語義分割、人體姿態估計中類似encoder-decoder的hourglass結構,采用了類似方案完成目標檢測,de-conv操作不僅解決了feature map分辨率隨網絡層數加深逐漸降低的問題,還額外引入了上下文信息以輔助目標檢測;
3. Deconvolutional Single Shot Detection
1 回顧下SSD;
2 介紹Resnet-101 + SSD + 全新pred module提升訓練效率的方案;
3 引入de-conv,在DSSD內生成hourglass network;
4 引入de-conv module,將semantic上下文信息引入DSSD,輔助小尺度目標的檢測;
SSD
SSD網絡結構如fig 1,在分類模型的backbone上,最高層的conv5_x后繼續擴充若干conv layers,backebone白色表示,附加的conv layers藍色表示;
在特征金字塔的多層分支上做bbox cls + reg操作,用于預測bbox的cls scores + offsets;具體實現上就是使用 3 x 3 x N channels的conv操作,分別用于具體類別得分(each category score),bbox的回歸偏移參數(each dimension of the bbox that is regressed);
最后通過NMS做后處理,得到最終檢測結果,經典SSD使用VGG作為backbone;
Using Residual101 in place of VGG
本文的第一個spotlight:改backbone:VGG -> Resnet-101,目標很明確:網絡提特征能力更強了;
fig 1中就是SSD + Resnet-101的結構,在conv5_x后自定義了若干conv層,從conv3_x、conv5_x、5個自定義層中預測bbox,但作者實驗中發現并沒有對于原生態的SSD + VGG帶來性能的提升;
具體如table 4,PASCAL VOC 2007 test上,321 x 321輸入的SSD + Resnet-101,mAP:76.4%,比table 3中300 x 300輸入的原生態SSD + VGG,mAP:77.5%性能還弱;
那么有了下文介紹的全新pred module + de-conv模塊,性能就蹭蹭蹭地上來了;
Prediction module
原生態SSD中,將目標函數直接應用于各個預測bbox的feature map上,并對conv4-3層做了L2正則化處理(和MSCNN類似),主要原因是conv4-3上梯度量級大于其它層,避免conv4-3的loss占據主導,淹沒了其他層上的loss;
MSCNN中有提到:把每個檢測分支的性能都弄得棒棒噠,整體性能就會有提升;
那么DSSD就嘗試了fig 2(b)、(c)、(d)三種方案,四種方案的區別看圖即可,(a):原生態SSD;
最終結果如table 4,可以發現pm(c)相對來說,性能最優,速度也最快,是最佳trade-off;
Deconvolutional SSD
DSSD在原生態SSD后引入了de-conv操作,構成了fig 1中的asymmetric hourglass結構,目的:引入high-level context信息,輔助目標檢測;
那么如fig 1,DSSD基于SSD + Resnet-101做改進,后接各種de-conv層,逐步提升feature map分辨率,此外,還使用到了skip connection以增強特征的提取能力,整體就類似hourglass結構了;
作者提到了hourglass中decoder層數比較淺,不是對稱性結構,原因有二:
1 目標檢測是后續很多任務的基礎性工作,速度就很關鍵了,如果使用完全對稱的hourglass結構,運行時間就加倍了,與希望建立快速的目標檢測算法之目的相違背;
2 在ILSVRC CLS-LOC數據集的分類任務上,目前沒有包含decoder stage的預訓練模型供DSSD使用,主要原因是分類任務只包含全圖標簽,并沒有目標檢測的子區域標簽;而當前訓練操作都使用到了遷移學習的路子,在ILSVRC CLS-LOC數據集的分類任務上預訓練的分類器,確實是能解決DSSD的遷移學習問題(如backbone,pm),即使有部分參數做隨機初始化也能保證高精度、更快收斂速度;但因為整個DSSD無法使用到分類數據的標簽,decoder就必須完全隨機初始化,又增加了不少模型參數,這樣整體上就很難通過訓練得到好的結果了;
另一方面,de-conv其實計算量是比較大的,如果decoder設計得太深,耗時就加大了;
Deconvolution Module
fig 1中的反卷積模塊,如fig 3中所示,特點如下:
1 每個conv操作后接一個bn層;
2 使用de-conv操作代替雙線性插值上采樣操作;
3 測試了不同的combine方案:element-wise sum / product,從table 4中可知,product方案精度最高;
Training
DSSD采用與SSD類似的訓練策略,gt bbox與default box的匹配方式與SSD一致:
1 與該gt bbox最匹配的default box為正樣本;
2 與該gt bbox IoU > thres的default box為正樣本;
難例挖掘:未被匹配的負default box中,基于其confidence loss,篩選難負default box,使得正負樣本比例為1:3;
目標函數:loc loss:Smooth L1;confi loss:Softmax;
DSSD未使用Fast / Faster RCNN中的feature / pixel resampling操作(暫還不了解),那么就依賴于SSD的數據增強操作:
1 從原圖randomly crop子圖像;
2 random photometric distortion;
3 對1中crop的子圖像做random flipping;
4 random expansion augmentation;---- 對小尺度目標檢測很有效,DSSD也有使用;
原生態SSD中,使用到了aspect ratios:2、3的bbox設置,DSSD與yolo9000做法類似,為得到PASCAL VOC 2007 / 2012 trainval上bbox長寬比的先驗,對bbox的長寬比做了個k-means聚類(square root of box area as the feature),實現方式:先設置k = 2,如果error能提升20%,就k += 1(我還沒理解這個error指什么。。。);最終結果如table 1;
SSD輸入圖像是縮放后的正方形圖像,而原圖一般都是W > H的,因此原圖縮放至正方形后,從table 1中可以發現,大部分bbox都成為了 “狹長型” bbox,且長寬比在1 ~ 3范圍內,最終SSD使用了(1.6, 2.0, 3.0)三個長寬比的設置;
4. Experiments
Base network
DSSD使用Resnet-101做backbone,Resnet-101先在ILSVRC CLS-LOC上來一波pretrain(不是常規的ImageNet);與R-FCN類似,conv5不使用pooling / stride = 2的conv操作(也即,使用stride = 1的conv操作),提升圖像分辨率,從而其stride從32 pix減為16 pix,再利用空洞卷積將stride = 1改為stride = 2,以提升conv 5上的感受野(conv5 stage上所有kernel size > 1 的conv都使用該操作);
再與SSD類似,在SSD + Resnet-101之后,添加若干自定義conv層(fig 1中藍色塊,其實都是Residual blocks)以逐步降低feature map尺度;其他方面DSSD與SSD類似,預測分支改為PM(c)的殘差結構;
table 2對比了兩個backbone:VGG、Resnet-101間,各個預測分支的差異,depth表示對應層的位置,計算depth只考慮了conv + pooling層;
Resnet-101包含101層,但為了檢測小尺度目標,同樣也需要在高分辨率的feature map上做預測,因此DSSD選擇了處于第23層的conv3_x,如果進一步考慮使用kernel size > 1的特征層,可能就只能選擇第9層feature map了,此時其感受野就太小了,甚至還比不上VGG中的conv4_3層,就根本無法得到高質量的預測結果了;
PASCAL VOC 2007
訓練集:2007 + 2012 trainval,測試集:2007 test,實驗中先訓練一個SSD模型,再將其作為pre-trained模型訓練DSSD,并繼續分為兩個stage:
stage-1:固定所有原生態SSD的參數,僅訓練DSSD中新增的conv層參數;
stage-2:finetune整個DSSD的參數;
結果如table 3,SSD300*,SSD512*是使用了新的數據增強方案得到的檢測結果,增加Resnet-101作為backbone有兩個好處:1 模型的收斂速度更快,對比VGG,一半的迭代次數就可以收斂;2 SSD513性能高于SSD512* 1%以上,但SSD321上無優勢;
作者提到,DSSD513性能優于SSD513的原因在于,Resnet-101需要輸入更大尺度的圖像,因為Resnet-101比VGG在深層包含更強大的空間信息;并通過增加skip connection + de-conv操作后,DSSD321、DSSD513性能優于SSD;DSSD513性能優于另兩個使用上下文信息的MRCNN、ION,且其不需要專門規劃所包含的上下文區域,且DSSD513單模型精度就強于sota的R-FCN;
從fig 4中可知,對比SSD,DSSD在小尺度目標、強上下文關聯的目標上,檢測性能更好,如空中的飛機,草坪上的羊等,充分證明了DSSD結合上下文信息的有效性;
Ablation Study on VOC2007
table 4就是DSSD在VOC2007 test上完成的消融實驗,PM = Prediction module;DM = De-conv module;
1 原生態SSD + Resnet-101主干網 + 321 pix輸入:mAP:76.4%,性能不如原生態SSD + VGG;
2 增加PM模塊后性能就逐步提升了,其中PM(c)性能最優,在最終的預測分支前增加了一個殘差模塊,這么做的原因:避免DSSD目標函數的loss直接傳回Resnet-101的主干網中,跟MSCNN中操作類似;
3 增加DM,element wise-product操作性能最好,作者也嘗試了雙線性插值上采樣替代de-conv的方法,發現訓練速度太慢了,loss比較難以收斂,;
4 stage-2:在增加DM模塊后,再做一次DSSD全局參數的fine-tune,發現性能竟然下降了;
PASCAL VOC 2012
訓練集:07++12,VOC2007 trainval + VOC2007 test + VOC2012 trainval;
測試集:VOC2012 test
DSSD同樣使用SSD作為pre-trained模型,但從table 4中可知,僅需訓練stage-1即可;
結果如table 5,DSSD依然sota,且DSSD僅使用單模型,無模型ensemble,無multiple cropping、額外的訓練數據(如COCO)等bug型操作;
COCO
DSSD同樣使用SSD作為pre-trained模型,同樣僅訓練stage-1中新增的DSSD層參數;
從table 6中可知:
1 SSD300*優于Faster R-CNN、ION,將VGG替換為Resnet-101后,性能25.1% -> 28.0%;SSD321-Resnet-101在IoU:0.75時,對SSD300*(29.3% vs. 25.8%),優勢明顯;IoU:0.5時,45.4% vs. 43.1%,Area L:49.3% vs. 41.4%,說明Resnet-101對大尺度目標的檢出性能上貢獻更大;
2 DSSD321對比SSD321,在Area S上7.4% vs. 6.2%,看來de-conv操作還是有用的;
3 SSD513-Resnet-101優于sota的R-FCN(31.2% vs. 29.9%),但DSSD513當之無愧,33.2%;
Inference Time
為加速inference速度,在inference階段文中使用以下方式替換了bn層操作:
公式(1)是bn的標準操作,conv的輸出(wx + b),減均值,除方差的平方根(就是標準差啦,ε 防止分母為0),做完scale后,再新增一個shrift參數(scale、shift參數是訓練中學習得到的,如果理解bn操作的話,應該明白這兩個參數指的是啥。。。),這樣就完成了輸出的正則化操作;
公式(2)、(3)、(4)就是inference階段對bn的替換操作,w^、b^按公式計算后,y就可以使用w^、b^計算出結果,最終直接按照公式(4)求得y;---- 對比公式(1),可以發現計算feature map中每個位置的像素值都需要做scale、shift操作,但DSSD的改進版,就只需要計算一次w^、b^即可,減少了很多重復計算,并且簡單地推公式,可以發現公式(2)、(3)、(4)與公式(1)是等價的;
實驗中發現,以上操作可以加速1.2 ~ 1.5倍,內存占用減少3倍;
DSSD速度慢于原生態SSD的原因有:
1 主干網的Resnet-101計算量大于VGG-reduced;
2 DSSD新增了PM、DM模塊,一種方案是使用簡單的雙線性上采樣插值替換de-conv,但精度會下降;
3 使用了更多的default box,table 7中可以對比出,DSSD使用了高達43688的default box,不僅預測階段計算量大,后續的NMS也負擔重;
對比R-FCN,SSD513精度低,速度慢,DSSD513精度高,速度慢(這是吹R-FCN的么?),DSSD321速度是很好了,精度卻太弱了;
總結:DSSD精度是sota的,速度也還不錯;
Visualization
fig 4是SSD321、DSSD321在COCO test-dev上的檢測結果對比,DSSD有兩個優勢:
1 對密集場景下的小目標檢測,檢出率更高;
2 包含上下文場景的目標,例如在球拍附近的網球,滑板與人等;
5. Conclusion
1 DSSD通過de-conv操作融合了上下文信息,以輔助目標檢測任務,并通過encoder-decoder hourglass結構 + skip connection操作的方式,融合了高低層特征信息,計算量不大,提取的特征判別性卻特別強;
2 對比SSD,DSSD精度更高,特別是檢出小尺度目標、包含上下文信息的目標等,而且速度也很快,實驗結果也非常好,在PASCAL VOC、COCO上sota,優于R-FCN;
3 論文中僅嘗試將encoder-decoder hourglass結構應用于SSD中,作者說這種方案應用在其他檢測方案,如RCNN系列中也毫無壓力,應該也能進一步提升其性能;
論文參考
arxiv2017_DSSD:Deconvolutional single shot detector
代碼:
MTCloudVision/mxnet-dssd?github.com總結
以上是生活随笔為你收集整理的hourglass论文_DSSD(1)_论文_arxiv2017的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果6sp内存可以扩展吗_苹果手机iPh
- 下一篇: 无法载入增效工具_作业大队工具车间利用修