來自Facebook Research物體偵測的最新進展:Focal Loss for Dense Object Detection

Introduction

目前基於Convolutional Neural Network的物體檢測演算法,有兩種主流作法:One-Stage Detector (eg. SSD[1])和Two-Stage Detector (eg. Faster-RCNN[2]),各自有其優缺點。One-Stage Detector的速度較快但精確度較低,而Two-Stage Detector則速度較慢但精確度較高。此篇文章作者從One-Stage Detector的根本毛病下去探討,找出了精確度較低的真正原因:正負樣本比例極度不平衡,以及損失函數(Loss Function)的來源大多數被容易歸類的負樣本所佔據,導致訓練上的不穩定。作者因此巧妙的設計了一個新的損失函數稱為Focal Loss,大大降低那些負樣本的Loss Contribution,讓新訓練出的One-Stage Detector不但能保持原先快速的優點,精確度也達到與Two-Stage Detector一樣的水平。(標題所說的Dense Object Detection意指直接在Extracted Feature Map上每個位置輸出分類結果,為One-Stage Detector的基本思路)

One-Stage v.s. Two-Stage Detector

首先大致介紹一下兩種主流物體檢測演算法的差別與演進:Two-Stage Detector是在CNN普及之前就存在許久的思路,由於慢慢掃過圖片中的每個位置太花時間,因此第一步會先在圖片中提取出數百個候選區域(Object Box Proposals),再經由分類器(Box Classifier)進一步分類以及修正位置。CNN Based的Two-Stage Detector基本上也是依照這樣的思路去設計的(Ross Girshirk大神的R-CNN系列)。之後出現的One-Stage Detector為了加速到Real-Time則直接簡化了流程:原本在Two-Stage的Proposal Stage,會輸出在圖片中每個位置出現物體的機率高低(這邊的物體是不分類別的(agnostic)),One-Stage則直接在這個module上做了一些修改,在每個位置上直接輸出每個類別的判斷結果。有關最近主流的CNN Based Detector詳細的演進與效能比較,可以參考來自Google Research的CVPR 2017論文[3]

Focal Loss

由於One-Stage想要直接在Extracted Feature Map上的每個位置做分類與大小預測,每一張圖片會有大約100000個候選區域(Anchors),可以想像其中真正與物體有重合的候選區域(positive samples)是非常少的,訓練時的樣本極度不均衡。在這些候選區域中,又有許多容易被歸類的負樣本背景區域(well-classified negative samples),即使這些well-classfied samples每一個所貢獻的loss很小,但積沙成塔還是佔了全部loss的很大部分,導致真正需要被好好分類的positive samples貢獻的loss不明顯,梯度傳播就不夠準確。(可以想像一個loss函數,由於noise太多,導致minima的位置不夠明顯)

在之前就有人提出Online Hard Example Mining (OHEM)的方法,在訓練時每次的Forward Pass找出較難分類的樣本作為下一次訓練的樣本,但此種方法完全拋棄了那些well-classified samples。這篇論文作者所提出的Focal Loss,可以看成是Soft-OHEM,設計一個損失函數來壓抑well-classified sample,又不致於完全拋棄,少了挑選困難樣本的步驟也更加精簡。從下圖可以看出Focal Loss (FL)與原本Cross Entropy (CE)的差別,藉由調整 (1-p_{t})^{ \gamma } 項,可以降低 well-classified samples所貢獻loss的幅度,實驗證明了光是這樣的改動,就對訓練上非常有效,結果也比原始版OHEM好不少。

Network Structure

這邊所設計的One-Stage Detector為求簡潔且高效,使用了作者之前設計的Feature Pyramid Network作為backbone,每一個pyramid level的feature都含有豐富的semantic信息,且這樣的設計在不同的level剛好對應到不同scale的物體,可以涵蓋圖片中
可能出現的物體大小種類。這邊每個level都接上了class與box的subnet,分別拿來做分類與位置調整,不同於SSD或Faster-RCNN對於每一個類別都有關於box的預測結果,這裡把box size/coordinate prediction拆到另一邊,採用的架構很像是之前Mask-RCNN中將Mask Branch拆出來,做class-agnostic的預測,已經慢慢成為Facebook AI採用的趨勢。

Speed v.s. Accuracy

由下圖比較可看出,作者實做的幾個RetinaNet的版本,在檢測效果上都有了許多的提升,實現了在10fps以上的速度做檢測,又達到COCO dataset 30mAP以上的結果。

Implementation Remarks

  • [Section 3.3] Model Initialization小技巧,透過將最一開始foreground prediction機率初始為0.01(符合大部分為background的假設),可以讓最初幾步的訓練更加穩定(loss不會因為太多negative samples被初始預測為foreground而爆炸)
  • [Section 3.1] 在Focal Loss中還加上了另一個hyperparameter \alpha,這一項也可以稍微緩解Class Imbalance的問題
  • 在Network Training上,只用了horizontal flipping來做augmentation十分簡潔,不用像SSD需要湊合許多個data augmentation的技巧。

Conclusion

這篇論文的idea非常簡潔,雖然改動不多,但是能找到真正的原因對症下藥,解決了長久以來One-Stage Detector一直想要突破的瓶頸。可見Convolutional Neural Network的表徵能力還是很強的,但是目前還是需要人們不斷給予輔助,如何設計有效的架構並訓練得到好的模型,還有很多可以發展的空間。

P.S. 最近Object Detection的論文都沒有放Visualization的比較圖... 但畢竟不是本篇motivation發想的來源... 也可能是因為放了圖也很難真正解釋其中的insight...

Reference:
- 原始論文
- [1] Liu, Wei, et al. "SSD: Single shot multibox detector." European conference on computer vision. Springer, Cham, 2016.
- [2] Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." Advances in neural information processing systems. 2015.
- [知乎] 如何評價kaiming的Focal Loss for Dense Object Detection?

Share the joy
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

近期文章

近期迴響

彙整

分類

其它

Chien-Yi Wang Written by:

Be First to Comment

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *