目標檢測精讀 | SNIP:解決“尺度不變性”

CVer發表於2019-05-29


An Analysis of Scale Invariance in Object Detection - SNIP

目標檢測精讀 | SNIP:解決“尺度不變性”

arXiv:http://arxiv.org/abs/1711.08189

這篇論文主要通過改進的Multi-Scale Training的方式來解決“尺度不變性”的問題,我們先來分析當前演算法在處理尺度不變性時的一些方法及其缺點,再來介紹這篇論文的核心思想,最後對這篇論文的一些實驗細節進行分析。

目標檢測精讀 | SNIP:解決“尺度不變性”
  • 存在的問題

1.資料集分佈差異:COCO影象中存在大量的小物體,大物體和小物體之間size差距可達20倍之多,這使得COCO資料集和ImageNet資料集的物體的尺寸分佈很不一樣,ImageNet為224×224的影象,其物體的中位數的尺寸為影象尺寸的一半,基本上不會太小也不會太大,且位於影象中心。所以COCO資料集所面臨的問題是如何能夠同時對物體尺寸跨度範圍較大的場景進行目標檢測,這就需要一個檢測器能夠不管一個物體的尺寸是16×16還是800×800,都能夠準確低捕獲到其特徵並進行準確的分類和定位。

2. Domain shift:ResNet等在ImageNet的224×224上預訓練的模型,需要在COCO資料集上fine-tune,由於第一點提到的COCO資料集與ImageNet資料集的物體大小分佈的差異,就使得fine-tune過程存在domain-shift的問題。預訓練的ResNet是用於處理224×224的圖片的物體的,其網路權重對於COCO這種存在非常多小物體的資料集並不適用,換句話說就是其網路權重無法作為一個很好的初始特徵提取器,從而無法達到很好的fine-tune的效果,如果ResNet預訓練和fine-tune的資料集的物體尺寸分佈一致,那麼則效果是最好的。

3. 網路結構不適配:因為COCO資料集中存在大量的小物體,而ResNet的網路結構存在多次下采樣(5次),這樣像25×25這樣大的小物體在網路32倍下采樣後,其特徵便會消失,網路頂層特徵只保留了影象的主要特徵,比如大物體的,這樣原始的ResNet網路結構就不適用於對小物體的檢測。而通常就解決對小物體的檢測的方法就是對原圖進行上取樣,這樣可以增大小物體的解析度,從而使其適應ResNet的下采樣的倍數,但是這樣的對原圖放大之後,原圖中所有物體都會被放大,大物體會變得更大,從而使得網路對大物體的檢測效能下降。也就是說“upsample利於small objects卻不利於large objects,ori image利於large objects卻不利於small objects”,而一個網路結構又無法同時適用於小物體和大物體。

4. 訓練和測試尺寸不匹配的問題:一般會在800×1200上訓練(由於GPU視訊記憶體限制),而在1400×2000上測試,但是訓練和測試尺寸不匹配顯然不是最優解。在800×1200上訓練,由於"each object instance appears at several different scales and some of those appearances fall in the desired scale range",在1400×2000測試時,800×1200影象上的所有objects都會變大,其中的small objects變大後的尺寸仍在800×1200影象中相應類別的尺寸範圍,而800×1200中那些原本較大尺寸的物體在1400×2000中會變得非常大,以至於訓練和測試的尺寸發生不一致的現象,所以在1400×2000對小物體精度會有提升,但是對於非常大的物體的檢測可能不利,沒有辦法兼顧所有尺寸的物體。即使使用Multi-Scale Test,合併所有尺寸的測試結果,但是由於訓練時(不管是Signle Scale Training還是Multi-Scale Training),由於物體尺寸跨度範圍較大的原因,每次都對所有一張圖的所有物體進行訓練,總有物體的尺寸與該網路不適配,從而不利於網路的訓練或者說需要網路消耗一部分capacity來強行記住這些不同的尺寸(在感受野極度不匹配的情況下),這顯然不能達到很好的訓練效果。所以論文中即使使用1400×2000訓,然後1400×2000測,但是精度提升也很有限,因為雖然小物體尺度增加,其特徵不會消失,但是大物體檢測更加困難且不利於訓練,網路需要分出一部分capacity來對多尺度特徵進行記憶(參見王乃巖的解釋)。

link:https://zhuanlan.zhihu.com/p/36431183

  • 本文的動機

1. 以上存在的問題,我們會產生一些疑問需要進行實驗驗證。是否對原圖進行上取樣真的有利於小物體的檢測?比如把原圖480×640的圖片放大至800×1200。由於前面第3點中的網路結構不適配的這個矛盾的存在,我們是否可以針對不同尺寸的物體訓練不同的檢測器(scale specific detector)?比如先將ImageNet上的224×224的圖片縮小,調小ResNet的stride,然後在低解析度的圖片上訓練得到適合小物體的預訓練模型,然後再在COCO資料集上fine-tune,這樣就解決了domain-shift的問題,且是專門為小物體設計的網路結構,從而可以提升小物體的檢測精度。

2. scale specific detector或許太過麻煩而且會使得每個檢測器的訓練樣本急劇下降,從而不能達到理想的效果。那麼我們是否可以建立一個scale invariant detector,即對於一個upsample後的image,我們只訓練其中“尺寸在64×64~256×256範圍內的物體”,這樣是否可以達到很好的效果(其實這就是本文SNIP的思路)?而傳統的方法,對upsample到任意尺寸的image,我們都對該image中所有物體進行訓練,這樣效果又是否好呢?

3. 傳統的scale invariant detector就是對一個檢測器進行Multi-Scale Training/Multi-Scale Testing,這樣雖然在訓練時由於對影象resize從而擴充了樣本數目,但是這樣更加劇了網路學習的困難,即會“增大原始資料集的物體的尺寸跨度範圍”,而且要強行讓網路學習到一個卷積核能夠對尺度跨度範圍如此之大的物體特徵的提取;並且同一個網路的多尺度訓練,必然會因為網路結構不適配的問題,使得“網路每次迭代或者說梯度更新時,必然無法顧及所有物體,即每次只有影象中部分物體能夠被分類的很好,其餘物體會由於感受野的問題對訓練造成不利的影響”;以往方法寄希望於在資料充足的情況下使用一個大網路來強行記住“larget variations in scale”從而完成對不同尺度物體的檢測,這樣勢必會浪費很多network capacity在處理“scale variance”上。

4. 我們所希望的是能夠同時解決上述存在的4大問題:在COCO資料集上訓練時,最好只訓練和ImageNet資料集尺寸一致的物體,這樣可以避免domain shift帶來的問題;網路僅對給定跨度較小的尺寸範圍內的物體進行學習,這樣就解決了網路結構不適配的問題,因為物體尺寸固定,這樣就可以用一個網路結構來學習,即選擇適合該尺寸的感受野,“一個物體尺寸,一個網路,一種感受野,這3者相互匹配,且train和test尺寸一致”效果最好;使用scale invariant detector而非scale specific detector,避免樣本過少的問題,也就是隻訓練一個檢測器,但是要用到所有的樣本。顯然原始的Multi-Scale Training/Testing不具備這些要求,所以需要對MST進行改進。更多關於Multi-Scale Training/Testing的缺點參見“《存在的問題》第4點和《本文的動機》第3點”。

  • 現有的解決方案

1. Train on 1.5~2x,Test on up to 4x。雖然在大圖上訓練可以使網路學習到對小物體進行分類(因為放大了,所以小物體的特徵會有些許保留,這樣利於對小物體的訓練),並且增加多個stage以對大物體進行檢測。這樣做的缺點在“《存在的問題》第4點”中已經敘述,且即使將小物體放大且增加更多的stage,但是仍然無法解決“一個網路結構無法對所有尺寸的物體適配”的問題,即無法保證“能夠同時獲取所有尺寸的物體的高層語義特徵和淺層細節特徵”,這似乎是現有網路結構的一個缺陷。

2. Dilated/DetNet:為了保證小物體在高層特徵圖中不至於丟失資訊,所以需要“在保證網路感受野的同時,保持特徵圖的大尺寸”,即不使用下采樣這種壓縮物體資訊的操作,而僅增大感受野,因為不斷下采樣會使得像25×25大小的小物體的特徵在高層消失。而雖然DetNet的大尺寸的特徵圖保證了小物體的資訊,即高層特徵圖包含了小物體的語義特徵,但是Dilated Conv使得高層的感受野較大(因為必須要能夠檢測大物體),所以高層特徵圖的每個位置,其都涵蓋了原圖中較大一部分割槽域,使得小物體的特徵並不精細,試想對於25×25的小物體,DetNet中高層的感受野實在是太大了。所以這就存在“感受野、特徵圖尺寸、小物體的精細特徵”之間的矛盾。我們需要的是,高層特徵的感受野與影象中每個物體的尺寸相匹配。

3. SSD/MS-CNN:高層特徵不含有小物體的資訊,所以不同stage的特徵圖負責處理不同尺度的物體,但是由於迴歸和分類同時需要一個物體的“語義和位置”特徵,所以SSD這種網路結構難以對小物體同時具備這些特徵。

4. FPN/RetinaNet:這種融合高層和底層特徵,在原始Faster R-CNN基礎上效能提升了很多,以一個top-down的結構使得每個stage都具備了高層的語義特徵,從而解決了SSD的問題,似乎這樣就可以在淺層同時獲取小物體的位置和語義特徵了。但是FPN有一個嚴重的缺點(在DetNet論文中被提及):高層(P5 in RPN/Head,P5/P6 in RPN)中含有large objects的語義但丟失了large objects的位置資訊,所以高層仍然不利於對large objects的定位;高層尺寸較小(32被下采樣)導致高層其實並不包含小物體的語義特徵,所以即使使用top-down結構,淺層特徵圖對小物體進行特徵提取,但是仍然無法提取到小物體的語義特徵(因為諸如25×25的小物體,其特徵由於下采樣的原因在高層消失了),所以不利於小物體的分類。DetNet通過在stage4之後一直維持感受野不變(即一直是16倍下采樣),使得高層特徵圖可以同時具備大物體和小物體的語義特徵和大物體的位置特徵。

5. Multi-Scale Training/Testing:為了對small、medium、large objects都預測的好,以往都會多尺度訓練和測試,這或許是一個好方法,因為訓練過程中每個尺寸的物體都被照顧到了,但是也存在一些缺點,參見“《存在的問題》第4點和《本文的動機》第3點”。

6. 關於FPN/DetNet的思考:我們都知道網路淺層含有細節資訊如位置,高層含有語義資訊如類別,ResNet中高層含有大物體的意義特徵但是由於解析度過低而不含有大物體的位置特徵,DetNet通過增大高層的解析度使得高層具有大物體的位置特徵,且高層也同時包含小物體的語義特徵。所以關於backbone,大物體或者小物體,其語義特徵和位置特徵分別位於哪一個stage,該stage和“下采樣倍數、特徵圖解析度、感受野”有和關係,高層有大解析度可以同時具備大物體的類別資訊和位置資訊,且也會具備小物體的類別資訊,但是否具備小物體的位置資訊?一個給定尺寸的物體的類別的資訊,應該在較高的stage上,而該物體的位置特徵應該位於較低的stage上,但是隨著stage的繼續增加(繼續下采樣),該物體的類別特徵消失,而如果增加stage卻保持解析度,是否可以同時保持語義和位置特徵。也就是說CNN中,各個尺寸的物體的語義和位置特徵分辨位於CNN的哪一個stage的特徵圖上,其和下采樣倍數和解析度有何關係,就像王乃巖說的“是否可以顯式地拆分出CNN中對於物體表示的不同因素(semantic,scale等等)

link:https://zhuanlan.zhihu.com/p/36431183

目標檢測精讀 | SNIP:解決“尺度不變性”
目標檢測精讀 | SNIP:解決“尺度不變性”
  • SNIP

SNIP是對Multi-Scale Training/Test的一種擴充套件,思路很簡單,參考《本文的動機》尤其是第4點,就可以理解SNIP核心要素了。

  1. 選取3種影象解析度:(480, 800)訓練[120, ∞)的proposals,(800, 1200)訓練[40, 160]的proposals,(1400, 2000)訓練[0, 80]的proposals

  2. 對於每個解析度的影象,BP時只回傳在對應尺度範圍內的proposals的梯度

  3. 這樣保證了只使用一個網路,但是每次訓練的物體的尺寸都是一致的,和ImageNet的物體尺寸一致以解決domain shift的問題,且符合backbone的感受野,且訓練和測試尺寸一致,滿足“ImageNet預訓練尺寸,一種物體尺寸,一個網路,一種感受野,這4者相互匹配,且train和test尺寸一致”

  4. 一個網路,但卻使用了所有的物體訓練,相比scale specific detector,SNIP充分利於了資料

  5. 測試時,同一個detector在3種解析度的影象上各測一次,並且對於每個解析度的影象只保留其對應尺度的dtboxes,然後再合併,執行SoftNMS

  6. 從Image Pyramid層面來解決問題,因為對於“輸入尺寸單一,設計一個scale invariant detector”存在著無法解決的矛盾(參見《存在的問題》第4點和《本文的動機》)

  7. SNIP解決了Multi-Scale Training/Test的缺陷目標檢測精讀 | SNIP:解決“尺度不變性”

目標檢測精讀 | SNIP:解決“尺度不變性”
  • 分類網路的實驗

1. CNN-B:Train on 224×224 original data,Test on up-sampled 48×48、64×64、80×80、96×96、128×128(to 224×224)separately;也就是高清圖訓練,低清圖測試(雖然尺寸一樣,但是清晰度不一樣),看看“訓練和測試尺度不一致會導致怎樣的精度的差別”以及可以揭示domain shift問題的解決的重要性。似乎對於需要對於每個尺寸單獨訓一個分類器

2. CNN-S:Train on 48×48,Test on 48×48;Train on 96×96,Test on 96×96。由於影象尺寸改變了,所以需要縮小網路開頭的stride和kernel_size。由於測試和訓練的尺寸一致,精度提升很多。

3. CNN-B-FT:Train on 224×224 original data, fine-tune on up-sampled 48×48(to 224×224),test on up-sampled 48×48(to 224×224);Train on 224×224 original data, fine-tune on up-sampled 96×96(to 224×224),test on up-sampled 96×96(to 224×224)。證明了“upsample small objects”然後訓練是有利於對小物體的檢測的,且在大物體224×224的預訓練模型對於小物體48×48的訓練是有幫助的。且比CNN-S精度高,所以無需scale specific detector。從而證明了SNIP的有效性。

相關文章