小目標檢測


小目標檢測

論文地址:
https://arxiv.org/pdf/2004.12432.pdf

 一.Stitcher: Feedback-driven Data Provider for Object Detection

目標檢測通常根據尺度變化質量,其中對小目標的性能最不令人滿意。本文研究了這種現象,發現:在大多數訓練迭代中,小目標幾乎不占總損失的一部分,從而導致不平衡優化的性能下降。受此啟發,本文提出了Stitcher,一個反饋驅動的數據提供商,旨在以平衡的方式訓練目標檢測器。在Stitcher中,圖像被調整成更小的組件,然后Stitch成與常規圖像相同的大小。Stitch圖像包含不可避免的較小對象,這將有利於作者的核心思想,利用損失統計作為反饋,以指導下一次迭代更新。在不同的檢測、骨干網、訓練周期、數據集上進行了實驗,甚至在實例分割上也進行了實驗。Stitcher在所有設置中都穩定地提高了性能,特別是對於小對象,在訓練和測試階段幾乎沒有額外的計算。代碼和模型將公開提供。
二. Motivation
在COCO數據集中,研究detection的training方式,當時嘗試了Multi-scale training的各種settings、SNIP[1]/SNIPER[2]、CSN[3]等。發現Multi-scale training對模型訓練是真的很有幫助,即使在接近50 AP的高baseline上還有不俗的提升。

然而,普通的Multi-scale training太低效了,而SNIPER是真的復雜,需要處理好label assignments, valid range tuning, positive/negative chip selection,費了作者很大的力氣才把它從MXNet源碼遷移到自己的框架上。

這樣的心態和需求,迫使去研究一種更簡潔實用的multi-scale training 方法。

不管是普通訓練還是Multi-scale training,作者發現在COCO上訓練出來的模型,小物體的AP永遠是比中物體和大物體低很多。

比如,在最常用的baseline: Faster R-CNN + ResNet 50-FPN (1x) 的結果(AP: 36.7 %, AP small: 21.1 %, AP mid: 39.9 %, AP large : 48.1 %)中,AP small 比 AP large 低了兩倍還多。

接下來,作者就開始研究,小物體到底出了什么問題,以及怎樣解決這樣的問題。

首先,作者統計了小物體在數據集中的分布,發現訓練集中小物體的數量並不少。

如下表所示,在所有boxes中,有41.4 %是小物體,是這三類物體之中最多的;但小物體的分布卻非常不均勻,只有52.3%的圖片中包含了小物體,而中物體和大物體分布都相對均勻。

換句話說,小物體數量很多、但分布非常不均勻,有接近50%的圖片中都沒有小物體。

 

 接下來,作者又統計了一下,在訓練過程中小物體的loss分布。能直接反應模型學習情況的是loss,進一步發現,還是在這個Baseline: Faster R-CNN + ResNet 50-FPN (1x)的訓練過程中,有超過50% iterations中,小物體所產生的loss都非常低(不到總loss的0.1)。

這說明在模型訓練過程中,小物體提供給網絡的監督是不足的。

 

 通過上述分析,作者的猜疑鏈形成:數據集中小物體分布不均勻 --> 訓練中小物體學習不充分(Loss不足) --> 訓練完的模型小物體精度差。而接下來就是按照這個邏輯逐步設計解決方法。

三.Method
在已經有了前面multi-scale training和SNIPER的實驗結果后,作者想到可以把圖像縮小,並拼接在一起(逆SNIPER而行,SNIPER是裁剪,Stitcher是拼接)。

如下圖所示,作者把batch內每4張圖都縮小到同樣大小,之后拼成一張與正常普通同樣大小的圖作為訓練。通過這樣的方式,把大物體和中物體縮小成中物體和小物體,來均衡不同Scale物體在訓練過程中的分布。

 

 (這里與YOLOv4-Mosaic類似,但不同的是作者沒想到拼接的時候可以調整4張圖為不同大小。)

接下來就是緊張刺激的實驗環節,完全采用這種拼接圖進行訓練,在上文36.7% 的baseline上得到了32.1%的驚人結果。

然而,就算在32.1% 的 AP 中(AP small: 21.9, AP mid: 36.4, AP large: 36.8)的AP small仍然比36.7% 的baseline中的AP small要高,這讓作者看到了希望。

這說明,拼接圖是有用的,只是作者沒用好,所以影響了最終效果。

前面對訓練過程中loss的分析,給作者提供了一個自然而然的思路,就是直接用loss 作為反饋信號,來指導拼接圖的使用。

作者采用了一種“缺啥補啥”的簡單思路:如果上一個iteration中,小物體產生的loss不足(比例小於一個閾值),則下一個iteration就用拼接圖;否則就用正常圖片訓練。

這個思路將32.1%的結果一下子增長到了38.6%,且統計loss比例幾乎不需要額外的計算量。

 

 四. Experimental Result

1.  作者在Faster R-CNN、RetinaNet的1x / 2x上都進行了實驗,有2個點左右的AP提升,且漲點主要來自於AP small。這符合作者最初的Motivation和方法設計。

2.  此外,作者還在更大的backbone / 更高的baseline (ResNext + Deformable) 、其他數據集 (PASCAL VOC)、Instance Segmentation (Mask R-CNN) 等settings上都做了實驗驗證,都有不同程度的效果提升。

 

 

 五. Further Analysis

除了常規實驗以外,還有一些其他的效果分析可供討論。

1. 只能4張 (平方數) 拼接嗎?答案是否定的。

不管是上文介紹的拼接方式還是YOLO v4,都是在Spatial維度 (h,w)上進行拼接的。如下圖(c)中所示,本文還提供了一種在batch維度n上拼接的等價的實現方式,也能達到一樣的效果。

這樣的做法可以帶來如下好處:

a.  拼接圖像的數目不再需要因為spatial的限制局限於平方數,可以自由選擇2、3、4、5、6等張數圖像進行拼接。

b.  對於那些讀寫內存有限制的訓練設備平台,提供了一定的自由度。

 

 2. 過擬合問題(更長訓練時間的增益)在后續實驗中,作者還發現Stitcher可以起到防止過擬合的作用。在不用SyncBN之類的騷操作的情況下,把一個最普通的Faster R-CNN + FPN模型直接訓練時間較長(6x)是會有嚴重的過擬合的(36.7-->35.6),但Stitcher卻沒有這個問題。因為在Stitcher訓練過程中,拼接圖像的挑選組合是隨機的,拼接圖像的多樣性防止了過擬合的發生。

 

 3. 計算量代價

a.  對於Inference階段,Stitcher 沒有做任何修改,不需要調multi-scale testing之類的操作。所以,如果使用者只關心Inference time 的話,Stitcher帶來的漲點可以說是完全免費的。

b.  對於Training階段,Stitcher 額外引入的操作包括:image stitching 和 loss ratio calculation這兩步。經實測,后者可以忽略不計,額外的耗時集中在於前者對圖像的interpolation. 作者在同一台 8 GPUs RTX 2080 TI 的機器上實測,對於Faster R-CNN + ResNet 50 + FPN的baseline上,加上Stitcher需要額外多訓練15分鍾左右。這相比於8個多小時的訓練來說,多等15分鍾也是可以接受的。

六.Conclusion
總結一下,作者這篇工作從小物體精度低這個問題入手分析,提出了一種新的multi-scale training方式 Stitcher,在常用的數據集、檢測器、訓練方式上均漲點明顯,沒有引入任何Inference負擔,有一定的簡潔實用性。代碼和模型都會在近期開源。

參考文獻:
1.An Analysis of Scale Invariance in Object Detection

SNIPhttp://openaccess.thecvf.com/content_cvpr_2018/papers/Singh_An_Analysis_of_CVPR_2018_paper.pdf

2.SNIPER: Efficient Multi-Scale

Traininghttps://papers.nips.cc/paper/8143-sniper-efficient-multi-scale-training.pdf

3.Consistent Scale Normalization for Object Recognition


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM