SNIP算法详解(极端尺寸目标检测)
SNIP算法詳解(極端尺寸檢測)
- 論文背景
- 算法背景
- 算法詳情
- 主要問題
- 已有解決方案
- 研究現狀
- 思考問題
- SNIP算法
- 多尺寸圖片分類器對比實驗
- Deformable-RFCN
- 實例尺寸與數據對檢測器的影響實驗
- SNIP算法細節
- 實驗
- 結論
論文背景
論文全稱:An Analysis of Scale Invariance in Object Detection – SNIP
論文鏈接:https://arxiv.org/abs/1711.08189
論文日期:2018.5.25
算法背景
本文主要是對比了已有的目標檢測算法,結合算法的優勢,提出了本文中的SNIP算法,用于解決檢測數據集上尺寸極端變化問題。
- 數據集背景:
COCO數據集中待檢測物體相對圖片而言,尺寸過小,而且不同對象之間的尺寸差距較大。針對此類極端尺寸變量問題,即待檢測物體尺寸過小或者過大。一些分類與檢測算法被提出。 - 理論基礎
檢測器的特定尺寸與尺寸不變性設計通過訓練不同配置的輸入數據來進行比較。
通過評估在ImageNet數據集上不同神經網絡結構分類小尺寸對象的表現,也可以得到,CNN對于尺寸變化不魯棒。
本文提出了一個基于相同尺寸的圖片金字塔的訓練與測試檢測器。
由于小尺寸與大尺寸對象很難分別在較小和較大的尺寸下識別出來,本文提出了一個新的訓練方案,圖像金字塔的尺寸歸一化(SNIP),有選擇地反向傳播不同尺寸的目標實例的梯度作為圖像尺寸的公式。
- 優化結果
在COCO數據集上,單一模型的準確性為45.7% mAP,三個神經網絡一起的準確性為48.3% mAP。使用現成的ImageNet-1000預訓練模型,僅僅利用邊界框監督訓練。
算法詳情
主要問題
在過去的幾年中,分類取得了很大的進展,但是檢測仍然表現不佳。因為檢測數據集獲取標簽的代價太大。除此之外,分類數據集的目標尺寸適中,而檢測數據集的對象尺寸偏小,且對象尺寸差異江大,對檢測造成了很大影響,尤其是針對小目標的檢測是一個很大的挑戰。
檢測數據集的缺點可以被歸納為兩個方面:
這種尺寸異樣對于神經網絡的尺寸不變性性能是個極端挑戰。
由于預訓練是在分類數據集上進行的,分類與檢測數據集的對象實例尺寸不同也導致了利用分類數據集預訓練的神經網絡進行微調時會有很大的域平移(domain-shift)。
已有解決方案
為了緩解待檢測目標尺寸變化以及尺寸偏小的問題,有許多方法被提出:
- 將淺層的特征與深層的特征相結合,用于檢測小目標實例。
- 拓展 / 變形的卷積被用來增加檢測對象的感受野,用于檢測大尺寸實例。
- 在不同分辨率網絡層上進行的獨立預測,用于檢測不同尺寸的對象實例。
- 利用上下文信息來進行消歧。
- 在一個大范圍的尺寸內進行訓練。
- 在一個多尺寸的圖片金字塔上進行推斷,并且結合非極大值抑值進行預測。
研究現狀
問題:
CNNs的更深層有很大的步長(32 pixels)會導致對于輸入圖片有個非常粗糙的表示,從而小目標的檢測非常困難。
傳統解決方案:
- 增加特征映射的分辨率:
- 訓練方法:
- 淺層的特征映射擁有更高的分辨率,包含更完整的信息。
- 深層特征通常包含補充的信息,包含高級語義特征(conv5)。
- 獨立預測:
例如SDP, SSH 或 MS-CNN,是在不同的分辨率的層上進行獨立預測,也確保更小的對象在更高分辨率的層上訓練(如conv3),更大的對象在更低分辨率的層上訓練(如conv5)。這種方法以犧牲高級語義特性為代價提供更好的分辨率,這可能會使性能降低。 - 結合預測:
例如FPN, Mask-RCNN, RetinaNet,使用金字塔形式的表示,結合淺層與深層的特征,至少獲得了更高級的語義信息。然而如果目標的尺寸為25 x 25 像素,并且訓練時進行2倍的上采樣,也只會得到50 x 50像素的尺寸,而經典神經網絡都是在224 x 224分辨率的圖片上預訓練的,因此特征金字塔網絡生成的高級語義特征對于分類小目標不會有用(可以對高分辨率圖片中的大目標進行相似的增強)。因此,將高層特征與淺層特征相結合對于檢測小目標無效。盡管特征金字塔有效地利用了網絡中所有層的特征,但它們不是檢測非常小/大對象的圖像金字塔的有吸引力的替代方案。
- 獨立預測:
- 面部檢測算法:
在每一個尺寸的對象最大化池化之后,將所有的對象的梯度都反向傳播,但是面部檢測的變量要比目標檢測少得多,因此,這個算法在應用到目標檢測中有許多限制,對于每一個類別,在R-FCN算法中都要訓練一個特定尺寸的卷積核。這會導致性能下降。 - 使用圖片金字塔,并且使用Maxout算法在推斷時從更接近于預訓練數據集分辨率的尺度中選擇特征。例如 SPPNet與Fast-RCNN。本文探索了訓練尺度不變目標檢測器的設計空間,并提出了對接近預訓練網絡分辨率的樣本進行選擇性反向傳播。
思考問題
針對上述的兩個問題,文章通過在ImageNet 與COCO數據集上進行了scale variation實驗,測試了尺寸變化對于檢測的影響。
實驗顯示了上采樣對于檢測小目標實例的重要性。
分別設計了特定尺寸的檢測器與尺寸不變的檢測器進行了實驗:
- 特定尺寸檢測器:尺寸變化問題通過對每一個尺寸范圍的實例訓練一個單獨的檢測器得到解決。
原因:在分類與檢測數據集上使用相同尺寸的實例訓練神經網絡能減小域偏移。
缺點:特定尺寸檢測器的設計也減小每個尺寸的訓練樣本的數量,這會導致表現下降。 - 尺寸不變的檢測器:使用所有的訓練樣本訓練單一的目標檢測器會導致學習任務變難。
原因:因為神經網絡需要在一個尺寸差異很大的檢測實例上學習卷積核。
SNIP算法
SNIP算法在訓練期間減小尺寸差異,尺寸差異問題是通過圖片金字塔得到解決的,而不是尺寸不變檢測器。且不需要減少訓練樣本。在金字塔的每一個尺寸上進行訓練,能有效使用所有的訓練數據
圖片金字塔原理:
- 歸一化圖片金字塔中每一個尺寸的目標實例的輸入化表示。
- 為了最小化分類神經網絡在訓練期間的域平移,我們只需要反向傳播和預訓練CNN有相近的分辨率的RoIs/anchors的梯度。
實驗結果:
- SNIP算法與傳統目標檢測訓練模式相比,準確性提高了3.5%。
- 聯合Deformable-RFCN主干神經網絡,在50% overlap上取得了69.7%mAP的準確率,在COCO數據集上,取得了7.4%的進步。
多尺寸圖片分類器對比實驗
-
訓練與測試使用不同分辨率:
在訓練與測試階段使用不同分辨率的圖片作為輸入會導致域偏移。因為目前的前沿算法都是使用的不同分辨率的圖片作為輸入,通常使用800x1200像素的圖片進行訓練,使用金字塔中包含的1400x2000像素的輸出進行推斷。
獲得不同像素的圖片,下采樣原始數據集,然后上采樣至224x224,作為CNN的輸入,本文進行了實驗測試,使用和訓練不同的分辨率進行測試顯然不是最優的,至少對于分類而言。
-
使用不同結構分類網絡:
在ImageNet上使用不同的步長預訓練分類神經網絡。如CNN-S,使用conv 3x3 stride 1,而對于CNN-B與CNN-B-FT,使用conv 7x7 stride 2。根據實驗,CNN-S表現明顯優于CNN-B,因此對于低分辨率圖像,采用不同結構的分類網絡進行預訓練是很有誘惑力的,并將它們用于低分辨率目標的目標檢測。 -
微調高分辨率分類器:
CNN-B-FT在高分辨率圖片上進行預訓練,然后使用上采樣的低分辨率圖片進行微調,結果要優于CNN-S,在高分辨率圖片上學習的卷積核對于檢測低分辨率圖片也有效。
同樣地,在大尺寸實例上學習的卷積核對于小尺寸目標也有效。
總結:
- 使用上采樣。
- 在高分辨率圖片上預訓練的分類網絡。
Deformable-RFCN
Deformable-RFCN:
本文使用Deformable-RFCN檢測器提取單一分辨率的候選。 Deformable-RFCN的主干網絡選用ResNet-101,訓練分辨率為800x1200。在RPN中選用5個錨尺寸。分類時,選用沒有Deformable Position Sensitive RoIPooling的主干網路為ResNet-50的Deformable-RFCN。使用帶有雙線性插值的Position Sensitive RoIPooling, 因為它將最后一層中的卷積核數量減少了3倍。NMS的閾值為0.3,不是端到端的訓練。使用ResNet-50以及消除deformable PSRoI filters可以減少3倍的時間并且節省GPU內存。
實例尺寸與數據對檢測器的影響實驗
訓練與測試分辨率的不同會導致性能下降。但是GPU內存限制會導致分辨率不同。訓練的分辨率會比測試的分辨率更低。
通過實驗評估兩方面的影響:
在1400x2000的圖片上進行評估檢測小尺寸目標(小于32x32)。
-
使用不同的分辨率進行訓練:
在800x1400 與1400x2000像素的圖片上進行訓練,為實驗800all 與 1400all。訓練的圖片分辨率為1400x2000時,效果更好,即1400all。因為此時訓練與測試是在相同的分辨率上。
但是提升是微乎其微的,因為在高分辨率上檢測中大型目標,對象太大了以至于無法正確分類,因此在高分辨率上訓練,提升了小尺寸目標的檢測,卻降低了中大目標的檢測。 -
使用特定尺寸目標進行訓練:
只使用小于80像素的目標進行訓練,消除極大尺寸目標的影響,實驗1400<80px,但是丟失了外表與姿態信息,從而導致檢測性能下降。 -
多尺寸訓練:
評價了在訓練過程中使用多分辨率隨機采樣圖像獲取尺度不變檢測器的常見做法。實驗為MST。它確保訓練實例在許多不同的分辨率下被觀察到,但性能也因為非常小和大尺寸的對象的影響而降低。
使用擁有合適尺寸實例訓練的檢測器,從而獲取物體盡量多的變量。
SNIP算法細節
結合多種算法的優勢,在限制尺寸的基礎上,使用外形變化大的目標進行訓練。
SNIP是優化MST后的版本,其中只有接近預訓練數據集的分辨率的對象實例,224x224像素。在MST中,每幅圖像以不同的分辨率被觀察到。因此,在高分辨率時,大物體很難分類,在低分辨率時,小物體很難分類。
由于每個對象實例只出現在幾個不同的尺度上,其中一些外形在所需的尺度范圍內。因此,本文只對屬于所需規模范圍的對象執行訓練,其余的則在反向傳播過程中被忽略。
SNIP訓練所有的實例,獲取所有的外形變量,減小了預訓練的尺寸空間中的域偏移。
池化后的RoI的分辨率與預訓練神經網絡的符合,因此微調會變得更簡單。類似于R-FCN算法,將RoIs分割成部分,并且使用position sensitive filters,使用相同的分辨率就會變得非常重要。否則特征與卷積核之間的位置關系將會丟失。
由于內存限制,會將圖片進行裁剪,裁剪的目標是生成大小為1000x1000的子圖片的數量最少,并且覆蓋了圖片中所有的小目標。對于每幅圖像,生成大小為1000x1000的50個隨機定位子圖片。選擇覆蓋最大對象數量的子圖片,并將其添加到我們的訓練圖像集中。直到所有對象都被覆蓋。
為了加速采樣進程,將子圖片壓縮到圖片邊界,平均需要1.7個子圖片。
當圖片大小為800x1200 或 480x640 或圖片中不包含小尺寸對象時,不需要進行采樣步驟。
隨機裁剪并不是準確率提升的原因。
實驗
本算法是在COCO數據集上面評估的,小尺寸對象的尺寸是小于 32x32,大尺寸對象的尺寸是大于96x96。
使用3個分辨率訓練Deformable-RFCN,(480, 800), (800, 1200) 與 (1400,2000),
分別訓練RPN與RCN,分類器訓練7個epoch,RPN訓練6個epoch。
SNIP:在訓練1個epoch的RPN后使用SNIP,在訓練3個epoch的RCN后使用SNIP。
學習率lr:0.0005訓練1000次,然后增加到0.005。 或者是在RPN訓練4.33個epoch后改變。
截止:訓練7個epoch之后,表現最佳。
有效范圍:
- RCN:
高分辨率:(1400,2000) -------> 有效區域:[0, 80]
中分辨率:(800,1200) -------> 有效區域:[40, 160]
低分辨率:(480,800) -------> 有效區域:[120, ∞]
在連接部分,有40像素的重疊。有效范圍是在訓練階段確定的。 - RPN:
(800,1200) -------> 有效區域: [0,160]
RPN的有效范圍是通過 minival set獲取的。
正樣本的選擇:
在conv4上使用 15個anchors(5 scales - 32,64, 128, 256, 512, stride = 16, 3 aspect ratios),但是符合標準的候選框太少了。
正樣本:overlap > 0.7,只有30%的真實框有符合要求的提案。
正樣本:overlap > 0.5,只有58%的真實框有符合要求的提案。
因此當閾值為0.5時,仍有超過40%的真實框擁有的提案的overlap小于0.5。
本文對圖像進行多分辨率采樣,并在相關分辨率上反向傳播梯度。
進行了多個對比實驗,性能得到了很大提升。
- 多尺寸的輸入對比實驗:
- 優化RPN后的對比實驗:
- 與其他算法的對比實驗:
結論
在數據集上的實驗結果證明了尺度和圖像金字塔在目標檢測中的重要性.因為我們不需要在高分辨率圖像中對大型的對象進行反向傳播,可以減少在圖像中很大一部分的計算。
總結
以上是生活随笔為你收集整理的SNIP算法详解(极端尺寸目标检测)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 运算符重载(简单易懂)
- 下一篇: 小目标检测--SNIP