計算機視覺之目標檢測一之SSD
目標檢測——SSD
編者:楊柳依依
日期:2018年9月27日
今天給大家介紹一篇目標檢測領域中經典的一篇論文,15年發表在ECCV。
1.背景知識
在介紹論文之前,我們先簡單瞭解下本文的思路和做法。
作者提出了一種單個深度神經網路來解決影象中的目標檢測的問題。這種方法,叫做SSD,將邊框的輸出空間在特徵對映圖離散化到不同比例或者不同尺度的先驗邊框集中。在預測階段,網路產生每一個感興趣的目標的置信度並且對先驗框調整使其更加匹配目標形狀。另外,網路利用了不同解析度的大量的特徵對映的預測來處理不同大小的目標。SSD比R-CNN和multibox相對簡單之處在於它完全忽略了目標框的生成階段,將這一步整合進了整個網路中。這種端到端的結構使得SSD方便訓練並且可以整合進檢測的模組中。
1.1 深度學習的目標檢測的框架的對比
深度卷積網路在影象分類上取得了顯著的效果。但是在目標檢測這個任務中,除了目標的分類之外還包括在一張圖片中定位所有的目標。基於區域的卷積網路以及更快的相關變種將檢測視為一種在候選框上的分類問題,之後再加入一層對框的座標位置修正的迴歸網路。
而Yolo則是在網格上使用最高特徵對映直接預測了候選框和各類別的分數。Overfeat在知道目標的類別後迴歸出邊框。但是這些方法並不能達到R-CNN的效果。難道只有RCNN的框架能成為高質量目標檢測的唯一方法了嗎?作者發出了這樣的疑問。
那回到本篇文章的思路上來,作者提出的依然是single shot的方法,但是較之前的增加了多邊框的檢測器。給定一系列不同比例和尺寸的先驗框,訓練一個網路來挑選包含目標的先驗框並且去調整先驗框的座標來更好匹配目標。這與faster-rcnn的先驗框類似,但是SSD不需要像fast rcnn共享卷積層一樣兒檢測多個目標類別。更重要的是,SSD框架組合了網路中不同解析度的特徵對映的預測,這可以檢測不同大小的目標,從而提升檢測質量。
1.2 作者的貢獻點
1.SSD去除了提取目標候選框的過程。這部分非常耗時並且依賴於低階的區域特徵。
2.SSD整合了卷積先驗框預測去多類別目標。
3.SSD先驗框是不同比例和大小的。在特徵對映圖上稠密的提取,期望能覆蓋不同大小的物體。
4.SSD將網路中不同解析度的先驗框使用起來。
5.快速高效,100-1000的提速。
2.SSD
2.1訓練方法
假設我們有n個先驗框,記為,每個先驗框關聯了一個邊框以及目標類別分數的集合,是第i個先驗框的類別p的分數,是第i個先驗框的座標,是類別p的真實邊框座標。這些座標都是根據影象的大小歸一化的,這樣不同大小的影象可以比較。
2.1.1匹配策略
訓練階段,我們需要建立先驗框和真實框對應問題,先驗框與真實框一致的為正例,否則為負例。
作者提出了兩種可能的匹配方法。一種是完全匹配。另一種是從網路中得到最好置信度的匹配。
2.1.2訓練目標
SSD的目標訓練方法是從多框的目標檢測方法延伸出來的,但是可處理多類別的目標。定義是第i個框與類別p的第j個真實框是一致的,反之就是=0。為了保證雙向匹配,有。如果是,意味著可以有多個源框與真實框j匹配。整體的目標檢測的損失函式是帶權值的定位損失函式和分類損失函式的和。
損失函式定義如下:
定位損失函式是預測框與真實框的L2損失:
分類的損失函式可以是多類的logisitic或者softmax損失,如果是多類的Logistic 損失函式如下:
權值經過交叉驗證後選擇的常數是0.06。
2.2 全卷積先驗框
多框方法的主要創新是使用了訓練集邊框的k-means聚類的中心點作為先驗。在原來的方法中,分數最大的特徵圖用來為所有的先驗框預測偏移,更好的策略是使用全卷積的先驗框,比如圖1中,在某個位置提出多個先驗框。不光是計算高效,而且減少引數數量以及過擬合的風險。
全卷積先驗框跟RPN中anchor框很相似。為了進一步簡化模型,把3*3的卷積核替換成1*1的卷積核來預測偏移和分類分數,而且並不需要中間層。更重要的是,RPN仍然是學習目標和產生提案,這在fast-rcnn是綜合完成的。然而,SSD可以在他們中共享的目標框中檢測多個類別。特別地,比如我們有m*m的特徵對映圖,特徵圖上每個位置k個先驗框,一共c個類別。對於k個先驗框,我們將有4k個偏移輸出,對於c個類別,我們將有ck個分數輸出。也就是(4+c)*k個輸出。考慮特徵圖上每個位置的預測的總和,一共是有(4+c)*km2,但是隻有(4+c)*k個引數需要學習。如果不共享,引數數量將是5ck,輸出有5ckm2。
2.3 多個特徵圖綜合預測輸出
大多數的卷積網路在更深的層中減少特徵圖的數量,不僅僅是因為可以減少計算和記憶體空間,而且也是提供了一定程度的翻轉和尺寸大小不變性。
為了處理不同的目標大小,一些方法提出將影象轉變成不同的尺度,每個尺度單獨處理,並將結果最後組合。但是,在一個單獨網路中從一些不同的層的特徵對映的輸出上,我們也可以模擬這種效果。有些論文中研究指出從低層中使用特徵對映可以提高語義分割的質量因為低層捕捉了輸入目標的細節資訊。類似的,有篇文章指出從最高的特徵對映圖中加上全域性池化有助於平滑分割結果。受這些方法的啟發,作者使用了低層和高層的特徵對映來檢測預測。圖1中就有兩個例子,一個是8*8,另一個是4*4。同時也多了不可忽略的計算量。
在網路中的不同級別的對映中對應著不同的感受野。幸運的是,在SSD的框架裡,卷積框並不需要與每一層的感受野一致。假設想要使用m的特徵對映。簡單點說,定義fk其中,k按照降序排列。每個特徵對映的先驗框的尺寸因子如下:
是0.1,是0.7,是1,意味著最低層是0.1,最高層是0.7,其他層在之間均勻分佈。我們利用不同的比例,定義如下,,計算寬和高的公式為:和,對於比例為1的,增加尺度為。因此每個位置有6個先驗框。定義先驗框的中心為,先驗框的座標控制在[0,1]。
2.4 難的負例挖掘
在匹配之後,大部分的框都是負例的,尤其是先驗框的數量是大量的時候。這帶來正負例的不均衡問題。不適用所有的負例,我們排序後,選取分數高的為訓練資料,比例為3:1。這樣可以優化以及加速訓練過程。
2.5 影象處理
為了使得模型對不同的輸入尺寸和形狀魯邦性高,每個訓練影象通過以下方法隨機取樣:
1.使用原圖
2.取樣區域使得與目標重合最小jaccard overlap是0.1,0.3,0.5,0.7
3.取樣區域使得與目標重合最大jaccard overlap時0.5
只有每張圖都水平翻轉0.5,另外增加光學的畸變。
3.實驗結果
作者採用了ILSVRC DET和PASCAL VOC兩個資料集,在Inception的一個早期變種上做的實驗,使用微調,加了bn和adagrad學習率為0.4.
3.1ILSVRC 2014 DET結果
3.1.1 兩個階段的基準檢測器
multibox 影象輸入是299*299,提案重新尺寸到299*299,在測試集上,單模型map是38.0,6個整合模型的map是43.9.在val2上最新的單模型的map是44.7.提高的原因是後分類的Inception的網路結構的提高。網路輸入從224增加到299。
3.1.2 SSDvs基準檢測器
SSDperson比baseline高。
3.1.3 特徵對映多效果好
3.1.4 輸入尺寸大效果好
3.2 VOC 2007結果
容易訓練,fast 和faster r-cnn都比SSD效果好。可能是輸入影象尺寸大。但是SSD比yolo效果好。
對邊界框大小敏感。小的邊框識別效果不好。在xs目標上ap幾乎為0,這也許不意外因為在8*8上可能沒有任何資訊。
增加影象輸入尺寸可以提高極小目標的檢測,但是仍有提升的空間。
3.3 訓練時間