Stitcher: Feedback-driven Data Provider for Object Detection 論文學習

Abstract

目標檢測器通常會根據尺度的大小而有不同的表現,在小物體上的表現是最不好的。本文中,作者研究了該現象,發現:在訓練的大多數迭代中,小物體幾乎不對整體損失做貢獻,優化不均衡造成模型的表現很差。受此啓發,本文提出了Stitcher,它是一個反饋驅動的數據提供器,以均衡的方式來訓練目標檢測器。在Stitcher中,圖像會被縮小,然後拼接起來組成一張正常的圖像。拼接後的圖像裏面所包含的物體更小,有利於小物體的檢測,然後將損失統計信息作爲反饋來指導下一步的迭代更新。作者針對多個檢測器、主幹網絡、訓練週期、數據集,甚至實例分割上進行實驗。Stitcher 在所有的設定中,都可以穩定地提升模型性能,尤其是對於小物體,在訓練和測試階段都不會增加額外的計算成本。

1. Introduction

深度目標檢測器的表現差別很大。目標檢測器尤其受到尺度差異的影響,檢測小物體就非常困難。例如,在 ResNet-50 FPN 的結果(AP:36.7%,APs:21.1%,APm:39.9%,APl:48.1%AP:36.7\%, AP_s: 21.1\%, AP_m:39.9\%, AP_l:48.1\%)中,在小物體上的準確率幾乎是中等物體和大物體的一半,這是由於不同尺度下不均衡訓練造成的。這個問題降低了整體的表現,使得目標檢測器無法在複雜場景下通用。一個合理的解釋就是,在小物體上的監督信號是不充分的。

監督信號可以通過訓練損失來反映。作者研究了不同尺度的損失分佈,在圖1中作了展示。該統計信息是在 Faster R-CNN 上得到的,其主幹網絡爲 ResNet-50和FPN,在MS COCO數據集上訓練。根據物體的大小將其分爲小、中、大的尺度。具體點,在迭代tt中,小物體的損失LstL_s^t 所反映的物體大小是小於1024的。rstr_s^t表示在當前迭代中,LstL_s^t與整體損失LtL^t的比值。值得注意的是,在超過50%50\%的迭代中,rstr_s^t都非常小(小於0.1),如圖1所示。缺乏小物體的信息就導致模型訓練不均衡,表現差。

在這裏插入圖片描述

本文中,作者提出了Stitcher,它是一個反饋驅動的數據提供器,以反饋的方式使用訓練損失,從而增強目標檢測的性能。在Stithcer中,我們將多個縮小後的圖像拼接爲一個正常大小的圖片。其核心思想就是,將當前迭代的損失信息作爲反饋,自適應地決定下一步的輸入。如圖3所示,如果當前迭代tt中的小物體損失比值rstr_s^t很小,那麼t+1t+1步的輸入拼接圖像,就會包含更多的小物體。否則,在默認設定下,輸入圖像就是正常的圖片。圖像拼接緩解了輸入特徵空間中,圖像層級不均衡的問題。同時,該反饋的方式也緩解了優化不均的問題。這樣,目標檢測就會更加平衡。

在實驗中,作者在多個檢測框架(Faster R-CNN, RetinaNet)、主幹網絡(ResNets, ResNeXts)、訓練方式(1×,2×1\times, 2\times)、數據集(COCO, VOC),甚至實例分割上驗證了Stitcher的有效性。在所有這些設定中,本文方法都能提升不少準確率,如圖2所示,尤其是對小物體而言。由於Stitcher包含了多個尺度的圖像,作者也將Stitcher和多尺度訓練進行了比較。多尺度訓練需要更長的訓練時間,但是表現不如Stitcher。

Stitcher可以非常容易地融入到其它檢測器中。它幾乎不會給訓練和推理帶來任何的額外成本。額外的成本只存在於損失信息的計算與圖像拼接中,這與前向和反向傳播的計算比起來不值得一提。

下面,作者首先分析現有的問題,然後引入本文方法。在第4部分,作者會介紹Stitcher與其它方法的關係。第5部分介紹試驗結果。

2. 問題分析

目標檢測器的性能會隨着尺度變化而變化。這一部分,作者會通過實驗分析解釋該現象。

2.1 圖像分析

量化分析。圖像中的小物體非常常見,在不同的圖片中,其分佈是不可預測的。如表1所示,COCO訓練集中41.4%41.4\%的物體是小物體,要比另兩個尺度的物體數量多得多。但是,只有52.3%52.3\%的圖片包含小物體。相反,包含中等物體和大物體的圖像比例爲70.7%70.7\%83.0%83.0\%。在一些圖片中,大多數的物體是小物體,而接近一半的圖片是不包含小物體的。該不均衡阻礙了訓練。

量化分析。在正常圖像中,由於成像的問題,物體通常會比較模糊,要麼失焦,要麼運動模糊。如果我們縮小正常大小的圖片,中等物體或大物體也會變得較小,但是其輪廓或細節會比本身就小的物體要清楚一些。在圖4中,從較大尺度縮放得到的足球要比風箏更加清晰,儘管它們的大小相近,分別是29×3129\times 3130×3030\times 30

在這裏插入圖片描述

在這裏插入圖片描述

上述分析啓發了作者提出stitching。

2.2 訓練分析

本章節通過損失的統計數據,分析在訓練過程中,尺度造成的問題。作者使用了COCO數據集中的 trainval35k 數據集,用於訓練和評價。在ImageNet上預訓練的 ResNet-50和FPN 作爲主幹網絡。作者將Faster R-CNN訓練了1個週期(90K)。所有的訓練設定,包含學習率、momentum、weight decay和batch size都按照默認值來。在訓練過程中,作者記錄每個迭代中三個尺度的損失值。根據這些統計信息,圖1 展示了不同尺度下的損失分佈。

小物體在圖像中有着不均勻的分佈,這就給訓練帶來了不均衡的問題。儘管在某些圖像中包含了小物體,但在訓練過程中它們有可能被忽略。圖1顯示,在超過50%50\%的迭代中,小物體對整體損失的貢獻不足10%10\%。訓練損失主要由中等或大物體主導。因此,小物體的監督信號不充分,嚴重傷害了小物體的準確率,甚至整體表現。該現象促使作者提出了Stitcher。

在這裏插入圖片描述

3. Stitcher

根據之前的分析,不同尺度下的不均衡問題始於圖像層級,但在訓練過程中變得更糟。受此啓發,作者深入研究了該問題,如何緩解尺度不均衡問題,尤其是對小物體。至此,作者提出了一個新的訓練策略,Stitcher。它由2個不同的階段組成,在圖像和訓練層級中。

3.1 圖像層級操作 — Component Stitching

在表1的數據中,訓練集中接近一半的圖片沒有小物體。該不均衡現象會極大地影響 mini-batch 優化。爲了解決該問題,作者提出了Stitcher,一個自適應數據生成器,動態地提供拼接後的圖片或原始圖片,受懲罰信號指導。

給定一組k(k=1,22,32...)k(k=1,2^2, 3^2...)張圖片,我們要將它們的分辨率進行縮放,然後再拼接起來,這樣其寬高比得到保留,即(h/k,w/k)(h/\sqrt k, w/\sqrt k)。這樣通過圖像拼接的方式,我們就可以得到更多的小物體,圖像的尺度不均衡問題就得到了緩解。因爲拼接圖像與正常圖像的大小一樣,不會帶來任何額外的計算量。除非特別說明,Stitcher實驗都是按照圖5(b)的方式進行。

由於正方形的限制,Stitching圖片的個數(k=12,22,32...k=1^2, 2^2, 3^2...)是一個待研究的問題。爲了讓它更靈活,作者提供了另一個實現版本,沿着batch維度進行拼接,這樣batch tensor形狀就是(kn,c,h/k,w/k)(kn, c, h/\sqrt k, w/\sqrt k)。Tensor 像素點個數不變,而stitching個數就無需非得滿足正方形要求了,如圖5©所示。第5.4節詳細介紹了 stitching order k。Stitcher 提供了動態的batch size,而tensor 大小保持一致,這就可以泛化到傳統的多尺度訓練(固定的batch size)。

在這裏插入圖片描述

3.2 訓練模塊 — 選取方式

拼接圖像可能包含更多的小物體,什麼時候利用它們則看情況而定。如圖1所示,超過50%50\%的迭代中,小物體所貢獻的損失不足10%10\%。爲了避免這個問題,作者提出了一個新的方法,根據當前迭代的反饋信息來決定下一個迭代的輸入。如果在第tt個迭代,小物體的損失非常小,就認爲小物體的信息非常匱乏。爲了補償該信息的匱乏,作者使用拼接圖片來作爲第t+1t+1個迭代的輸入。否則,就使用正常的圖片。

爲了計算小物體損失在所有尺度的比例,作者採用了下面的方式。直接點說,物體的尺度由mask 區域決定,而這隻存在於分割任務上。但是,對於通用的目標檢測,ground truth masks 是沒有的。因此,作者使用邊框區域代替。在等式1,對於物體oo,它的區域aoa_o可以通過它的邊框來近似表示,記作ho×w0h_o \times w_0LstL_s^t表示小物體的損失,其面積aoa_o不大於AsA_s(COCO中默認的是1024)。小物體的比例可以用下面等式來獲取:

aoho×woa_o \approx h_o \times w_o

Lsreg=Lao<AstL_s^{reg} = L_{a_o < A_s}^t

rst=LstLtr_s^t = \frac{L_s^t}{L^t}

比值rstr_s^t可以作爲反饋來指導下一步的迭代。該策略會平衡損失的分佈,有助於優化。作者在圖6中可視化了損失的分佈,在圖7中可視化了表現的差異。作者每1萬次就計算一次統計數據。它反映了,利用Stitcher方法,不同尺度上損失的分佈會變得平滑,可以得到更高的準確率。

3.3 時間複雜度

Stitcher只在訓練時使用,所以在推理時不會帶來任何成本。這裏作者詳細介紹它訓練時的時間複雜度。

Stitcher 由組件stitching和選取範式構成。在stitching部分,使用最近鄰插值法來縮小圖片。由於COCO中圖像的最長邊是640像素,插值操作所需的計算量不高於2×64020.8M2\times 640^2\approx 0.8M乘法計算。與前向或反向傳播相比,這個微不足道。例如,ResNet-50需要3.8G FLOPs(乘法和加法計算)來處理一張224×224224\times 224的圖像。在選取範式中,我們需要計算每個選中的ground truth邊框的面積。但是,每次只會有部分被保留下來。這一步的計算量也很少。

除了理論分析,作者也計算了Stitcher實際的運行時間。如果需要stitched 圖像,大約這一步會給正常訓練額外增加0.02秒。對於基線模型(使用ResNet-50-FPN的Faster R-CNN),總體的訓練時間大約是8.7小時。在相同的設備上跑,使用了Stitcher會增加大約15分鐘。如果使用了更大的主幹網絡,這個差距會收縮。

4. 學術背景

本文工作與之前的一些工作都息息相關。

多尺度圖像金字塔 這是傳統地、直觀地處理尺度差異問題的方法。在人工特徵時代就很流行,比如SIFT和HOG。如今,基於CNN的目標檢測器也能從多尺度訓練和測試中獲益,圖像會被隨機縮放爲不同的分辨率。因此,這一步學到的特徵對尺度變化更加魯棒。

與多尺度訓練相似,Stitcher 設計的目的也是能更加魯棒地應付尺度變化。但是,有2個核心差異。(1) Stitcher 既不需要構建金字塔,也不需要調整輸入大小。Stitched圖像與正常圖像大小一樣,極大地緩和了計算量負擔,而在圖像金字塔中,計算量很大。(2) Stitcher中的物體尺度由損失分佈來自適應地決定。與圖像金字塔相反,在每一步中,隨機選擇不同大小的圖片。這樣,其表現要比多尺度訓練更好。

SNIP和SNIPER 這倆方法是圖像金字塔策略中比較高級的。SNIP在多尺度訓練中,歸一化物體的尺度。每個尺度都有一定的範圍,如果物體的ROI落在其外,則被認爲是無效的。SNIPER 將圖像區塊作爲訓練數據,而不是正常的圖片。它將ground truth 實例的區域裁剪出來,作爲正樣本,然後採樣背景區域作爲負樣本。

Stitcher 操作與SNIPER有着本質的不同。SNIPER中的裁剪操作要更復雜一些,需要計算ground truth邊框和用於標籤賦值裁剪的IOU。但是,Stitcher中的stitch操作只包含插值和concat操作。此外,由於SNIP和SNIPER依賴於多尺度測試,它們會增加推理時間。

Mixup Mixup方法首先應用於圖像分類中,爲了減輕對抗擾動。隨後,它用在了目標檢測領域。它將圖像像素混合起來,通過一個經驗 mixup 比值將ground truth 標籤融合,從而進行調整。從操作方面來說,stitching和mixup都很簡潔。

關於性能,Stitcher 要優於mixup。Mixup可以提升基線模型的AP 0.2%0.2\%,如果在預訓練中沒有使用mixup操作。而在預訓練和微調階段都使用了mixup操作,則會提升1.2%1.2\% AP。相反,Stitcher 如果應用在了預訓練階段,可以提升2.3%2.3\%的AP。

Auto Augmentation 該方法會學習數據增廣的策略。其搜索空間包含若干個預訓練增廣策略。它使用搜索算法,如增強學習來優化數據增廣策略。隨後,我們用表現最好的方法來重新訓練模型。

自動增廣需要數千個GPU天數,在線下進行完備的搜索,這與作者的目的背道而馳。但是,Stitcher的表現與Auto augmentation相似,Auto augmentation可以提升1.6%1.6\%,而Stitcher可以提升1.7%1.7\%,基線模型是Faster R-CNN,主幹網絡是ResNet-50。此外,auto augmentation會使用更多複雜的變換,如顏色操作(相等化,亮度)以及幾何操作(旋轉、修剪等)。

Scale-aware Network 與操作圖片相反,另一個處理尺度差異的思路就是 scale-aware 神經網絡,通常有2類:基於特徵金字塔的方法,基於膨脹的方法。關於特徵金字塔方法,SSD 使用不同的尺度來檢測物體,在對應的層將特徵圖作爲輸入。FPN在所有的尺度上,引入了側路連接來構建高層級語義特徵金字塔。另一方面,基於膨脹的方法會調節物體的感受野。變形卷積網絡DCN使用膨脹卷積來調節感受野。Trident 網絡由多個分支構成,使用不同的膨脹率來產生具體尺度的特徵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章