天天看點

小目标檢測方法

引言

在深度學習目标檢測中,特别是人臉檢測中,小目标、小人臉的檢測由于分辨率低,圖檔模糊,資訊少,噪音多,是以一直是一個實際且常見的困難問題。不過在這幾年的發展中,也湧現了一些提高小目标檢測性能的解決手段,本文對這些手段做一個分析、整理和總結。

傳統的圖像金字塔和多尺度滑動視窗檢測

最開始在深度學習方法流行之前,對于不同尺度的目标,大家普遍使用将原圖build出不同分辨率的圖像金字塔,再對每層金字塔用固定輸入分辨率的分類器在該層滑動來檢測目标,以求在金字塔底部檢測出小目标;或者隻用一個原圖,在原圖上,用不同分辨率的分類器來檢測目标,以求在比較小的視窗分類器中檢測到小目标。

在著名的人臉檢測器MTCNN中,就使用了圖像金字塔的方法來檢測不同分辨率的人臉目标。

小目标檢測方法

不過這種方式速度慢(雖然通常build圖像金字塔可以使用卷積核分離加速或者直接簡單粗暴地resize,但是還是需要做多次的特征提取呀),後面有人借鑒它的思想搞出了特征金字塔網絡FPN,它在不同層取特征進行融合,隻需要一次前向計算,不需要縮放圖檔,也在小目标檢測中得到了應用,在本文後面會講到。

簡單粗暴又可靠的Data Augmentation

深度學習的效果在某種意義上是靠大量資料喂出來的,小目标檢測的性能同樣也可以通過增加訓練集中小目标樣本的種類和數量來提升。在《深度學習中不平衡樣本的處理》一文中已經介紹了許多資料增強的方案,這些方案雖然主要是解決不同類别樣本之間數量不均衡的問題的,但是有時候小目标檢測之難其中也有資料集中小樣本相對于大樣本來說數量很少的因素,是以其中很多方案都可以用在小樣本資料的增強上,這裡不贅述。另外,在19年的論文Augmentation for small object detection中,也提出了兩個簡單粗暴的方法:

方法一

針對COCO資料集中包含小目标的圖檔數量少的問題,使用過采樣OverSampling政策;

小目标檢測方法

方法二

針對同一張圖檔裡面包含小目标數量少的問題,在圖檔内用分割的Mask摳出小目标圖檔再使用複制粘貼的方法(當然,也加上了一些旋轉和縮放,另外要注意不要遮擋到别的目标)。

小目标檢測方法

在同一張圖中有更多的小目标,在Anchor政策的方法中就會比對出更多的正樣本。

小目标檢測方法

特征融合的FPN

不同階段的特征圖對應的感受野不同,它們表達的資訊抽象程度也不一樣。淺層的特征圖感受野小,比較适合檢測小目标(要檢測大目标,則其隻“看”到了大目标的一部分,有效資訊不夠);深層的特征圖感受野大,适合檢測大目标(要檢測小目标,則其”看“到了太多的背景噪音,備援噪音太多)。是以,有人就提出了将不同階段的特征圖,都融合起來,來提升目标檢測的性能,這就是特征金字塔網絡FPN。

小目标檢測方法

在人臉領域,基本上性能好一點的方法都是用了FPN的思想,其中比較有代表性的有:

RetinaFace:Single-stage Dense Face Localisation in the Wild
           
小目标檢測方法

另外一個思路:

既然可以在不同分辨率特征圖做融合來提升特征的豐富度和資訊含量來檢測不同大小的目标,那麼自然也有人會進一步地猜想,如果隻用高分辨率的特征圖(淺層特征)去檢測小臉;用中間分辨率的特征圖(中層特征)去檢測大臉;最後用地分辨率的特征圖(深層特征)去檢測小臉。比如人臉檢測中的SSH。

小目标檢測方法

合适的訓練方法SNIP,SNIPER,SAN

機器學習裡面有個重要的觀點,模型預訓練的分布要盡可能地接近測試輸入的分布。是以,在大分辨率(比如常見的224 x 224)下訓練出來的模型,不适合檢測本身是小分辨率再經放大送入模型的圖檔。如果是小分辨率的圖檔做輸入,應該在小分辨率的圖檔上訓練模型;再不行,應該用大分辨率的圖檔訓練的模型上用小分辨率的圖檔來微調fine-tune;最差的就是直接用大分辨率的圖檔來預測小分辨率的圖(通過上采樣放大)。但是這是在理想的情況下的(訓練樣本數量、豐富程度都一樣的前提下,但實際上,很多資料集都是小樣本嚴重缺乏的),是以放大輸入圖像+使用高分率圖像預訓練再在小圖上微調,在實踐中要優于專門針對小目标訓練一個分類器。

小目标檢測方法
小目标檢測方法

在下圖中示意的是SNIP訓練方法,訓練時隻訓練合适尺寸的目标樣本,隻有真值的尺度和Anchor的尺度接近時來用來訓練檢測器,太小太大的都不要,預測時輸入圖像多尺度,總有一個尺寸的Anchor是合适的,選擇那個最合适的尺度來預測。對R-FCN提出的改進主要有兩個地方,一是多尺寸圖像輸入,針對不同大小的輸入,在經過RPN網絡時需要判斷valid GT和invalid GT,以及valid anchor和invalid anchor,通過這一分類,使得得到的預選框更加的準确;二是在RCN階段,根據預選框的大小,隻選取在一定範圍内的預選框,最後使用NMS來得到最終結果。

小目标檢測方法

SNIPER是SNIP的實用更新版本,這裡不做詳細介紹了。

稠密Anchor采樣和比對政策S3FD,FaceBoxes

在前面Data Augmentation部分已經講了,複制小目标到一張圖的多個地方可以增加小目标比對的Anchor框的個數,增加小目标的訓練權重,減少網絡對大目标的bias。同樣,反過來想,如果在資料集已經确定的情況下,我們也可以增加負責小目标的Anchor的設定政策來讓訓練時對小目标的學習更加充分。例如人臉檢測中的FaceBoxes其中一個Contribution就是Anchor densification strategy,Inception3的anchors有三個scales(32,64,128),而32 scales是稀疏的,是以需要密集化4倍,而64 scales則需要密集化2倍。在S3FD人臉檢測方法中,則用了Equal-proportion interval principle來保證不同大小的Anchor在圖中的密度大緻相等,這樣大臉和小臉比對到的Anchor的數量也大緻相等了。

另外,對小目标的Anchor使用比較寬松的比對政策(比如IoU > 0.4)也是一個比較常用的手段。

小目标檢測方法

先生成放大特征再檢測的GAN

Perceptual GAN使用了GAN對小目标生成一個和大目标很相似的Super-resolved Feature(如下圖所示),然後把這個Super-resolved Feature疊加在原來的小目标的特征圖(如下下圖所示)上,以此增強對小目标特征表達來提升小目标(在論文中是指交通燈)的檢測性能。

小目标檢測方法
小目标檢測方法

利用Context資訊的Relation Network和PyramidBox

小目标,特别是像人臉這樣的目标,不會單獨地出現在圖檔中(想想單獨一個臉出現在圖檔中,而沒有頭、肩膀和身體也是很恐怖的)。像PyramidBox方法,加上一些頭、肩膀這樣的上下文Context資訊,那麼目标就相當于變大了一些,上下文資訊加上檢測也就更容易了。

小目标檢測方法
小目标檢測方法

這裡順便再提一下通用目标檢測中另外一種加入Context資訊的思路,Relation Networks雖然主要是解決提升識别性能和過濾重複檢測而不是專門針對小目标檢測的,但是也和上面的PyramidBox思想很像的,都是利用上下文資訊來提升檢測性能,可以歸類為Context一類。

總結

本文比較詳細地總結了一些在通用目标檢測和專門人臉檢測領域常見的小目标檢測的解決方案,後面有時間會再寫一些專門在人臉領域的困難點(比如ROP的側臉,RIP的360度人臉)及現在學術界的解決方案。

參考連結

  1. Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks

  2. https://arxiv.org/abs/1604.02878

  3. Augmentation for small object detection

  4. https://arxiv.org/pdf/1902.07296.pdf

  5. Feature Pyramid Networks for Object Detection

  6. https://arxiv.org/abs/1612.03144

  7. RetinaFace: Single-stage Dense Face Localisation in the Wild

  8. https://arxiv.org/pdf/1905.00641.pdf

  9. SSH: Single Stage Headless Face Detector

  10. https://arxiv.org/pdf/1708.03979.pdf

  11. An Analysis of Scale Invariance in Object Detection - SNIP

  12. https://arxiv.org/abs/1711.08189

  13. R-FCN: Object Detection via Region-based Fully Convolutional Networks

  14. https://arxiv.org/abs/1605.06409

  15. SNIPER: Efficient Multi-Scale Training

  16. https://arxiv.org/pdf/1805.09300.pdf

  17. SAN: Learning Relationship between Convolutional Features for Multi-Scale Object Detection

  18. https://arxiv.org/pdf/1808.04974.pdf

  19. ScratchDet: Training Single-Shot Object Detectors from Scratch

  20. https://arxiv.org/pdf/1810.08425.pdf

  21. FaceBoxes: A CPU Real-time Face Detector with High Accuracy

  22. https://arxiv.org/abs/1708.05234

  23. S3FD: Single Shot Scale-Invariant Face Detector

  24. http://openaccess.thecvf.com/content_ICCV_2017/papers/Zhang_S3FD_Single_Shot_ICCV_2017_paper.pdf

  25. Perceptual Generative Adversarial Networks for Small Object Detection

  26. https://arxiv.org/abs/1706.05274

  27. PyramidBox: A Context-assisted Single Shot Face Detector

  28. https://arxiv.org/abs/1803.07737

  29. Relation Networks for Object Detection

  30. https://arxiv.org/abs/1711.11575

繼續閱讀