Focal Loss改進版 GFocal Loss

ShellCollector發表於2020-10-07

 

https://github.com/implus/GFocal

最小的模型,247m,時間100ms一張圖片

ModelMulti-scale trainingAP (minival)AP (test-dev)FPSLink
GFL_R_50_FPN_1xNo40.240.319.4Google
GFL_R_50_FPN_2xYes42.843.119.4Google
GFL_R_101_FPN_2xYes44.945.014.6Google
GFL_dcnv2_R_101_FPN_2xYes47.247.312.7Google
GFL_X_101_32x4d_FPN_2xYes45.746.012.2Google
GFL_dcnv2_X_101_32x4d_FPN_2xYes48.348.210.0Google

一句話總結:基於任意one-stage 檢測器上,調整框本身與框質量估計的表示,同時用泛化版本的GFocal Loss訓練該改進的表示,無cost漲點(一般1個點出頭)AP

------------------------------------------------------

這個工作核心是圍繞“表示”的改進來的,也就是大家所熟知的“representation”這個詞。這裡的表示具體是指檢測器最終的輸出,也就是head末端的物理物件,目前比較強力的one-stage anchor-free的檢測器(以FCOS,ATSS為代表)基本會包含3個表示:

1. 分類表示

2. 檢測框表示

3. 檢測框的質量估計(在FCOS/ATSS中,目前採用centerness,當然也有一些其他類似的工作會採用IoU,這些score基本都在0~1之間)

三個表示一般情況下如圖所示:

三個表示

那麼要改進表示一定意味著現有的表示或多或少有那麼一些問題。事實上,我們具體觀察到了下面兩個主要的問題:

問題一:classification score 和 IoU/centerness score 訓練測試不一致。

這個不一致主要體現在兩個方面:

1) 用法不一致。訓練的時候,分類和質量估計各自訓記幾個兒的,但測試的時候卻又是乘在一起作為NMS score排序的依據,這個操作顯然沒有end-to-end,必然存在一定的gap。

2) 物件不一致。藉助Focal Loss的力量,分類分支能夠使得少量的正樣本和大量的負樣本一起成功訓練,但是質量估計通常就只針對正樣本訓練。那麼,對於one-stage的檢測器而言,在做NMS score排序的時候,所有的樣本都會將分類score和質量預測score相乘用於排序,那麼必然會存在一部分分數較低的“負樣本”的質量預測是沒有在訓練過程中有監督訊號的,有就是說對於大量可能的負樣本,他們的質量預測是一個未定義行為。這就很有可能引發這麼一個情況:一個分類score相對低的真正的負樣本,由於預測了一個不可信的極高的質量score,而導致它可能排到一個真正的正樣本(分類score不夠高且質量score相對低)的前面。問題一如圖所示:

不一致啊不一致, End-to-end 表示很難受

問題二:bbox regression 採用的表示不夠靈活,沒有辦法建模複雜場景下的uncertainty。

問題二比較好理解,在複雜場景中,邊界框的表示具有很強的不確定性,而現有的框迴歸本質都是建模了非常單一的狄拉克分佈,非常不flexible。我們希望用一種general的分佈去建模邊界框的表示。問題二如圖所示(比如被水模糊掉的滑板,以及嚴重遮擋的大象):

模糊及界定不清晰的邊界

那麼有了這些問題,我們自然可以提出一些方案來一定程度上解決他們:

1) 對於第一個問題,為了保證training和test一致,同時還能夠兼顧分類score和質量預測score都能夠訓練到所有的正負樣本,那麼一個方案呼之欲出:就是將兩者的表示進行聯合。這個合併也非常有意思,從物理上來講,我們依然還是保留分類的向量,但是對應類別位置的置信度的物理含義不再是分類的score,而是改為質量預測的score。這樣就做到了兩者的聯合表示,同時,暫時不考慮優化的問題,我們就有可能完美地解決掉第一個問題。

2) 對於第二個問題,我們選擇直接回歸一個任意分佈來建模框的表示。當然,在連續域上回歸是不可能的,所以可以用離散化的方式,通過softmax來實現即可。這裡面涉及到如何從狄拉克分佈的積分形式推導到一般分佈的積分形式來表示框,詳情可以參考原論文。

Ok,方案都出來了還算比較靠譜,但是問題又來了:怎麼優化他們呢?

這個時候就要派上Generalized Focal Loss出馬了。我們知道之前Focal Loss是為one-stage的檢測器的分類分支服務的,它支援0或者1這樣的離散類別label。然而,對於我們的分類-質量聯合表示,label卻變成了0~1之間的連續值。我們既要保證Focal Loss此前的平衡正負、難易樣本的特性,又需要讓其支援連續數值的監督,自然而然就引出了我們對Focal Loss在連續label上的擴充形式之一,我們稱為Quality Focal Loss (QFL),具體地,它將原來的Focal Loss從:

魔改為:

其中y為0~1的質量標籤,sigma為預測。注意QFL的全域性最小解即是sigma = y。這樣交叉熵部分變為完整的交叉熵,同時調節因子變為距離絕對值的冪次函式。和Focal Loss類似,我們實驗中發現一般取eta = 2為最優。

對於任意分佈來建模框的表示,它可以用積分形式嵌入到任意已有的和框迴歸相關的損失函式上,例如最近比較流行的GIoU Loss。這個實際上也就夠了,不過漲點不是很明顯,我們又仔細分析了一下,發現如果分佈過於任意,網路學習的效率可能會不高,原因是一個積分目標可能對應了無窮多種分佈模式。如下圖所示:

各種各樣的表示

考慮到真實的分佈通常不會距離標註的位置太遠,所以我們又額外加了個loss,希望網路能夠快速地聚焦到標註位置附近的數值,使得他們概率儘可能大。基於此,我們取了個名字叫Distribution Focal Loss (DFL):

其形式上與QFL的右半部分很類似,含義是以類似交叉熵的形式去優化與標籤y最接近的一左一右兩個位置的概率,從而讓網路快速地聚焦到目標位置的鄰近區域的分佈中去。

最後,QFL和DFL其實可以統一地表示為GFL,我們將其稱之為Generalized Focal Loss,同時也是為了方便指代,其具體形式如下:

我們在附錄中也給出了:Focal Loss,包括本文提出的QFL和DFL都可以看做為GFL中的變數取到特定值的特例。

 

最後是實驗。Ablation Study就不展開了,重點的結論即是:

1. 這兩個方法,即QFL和DFL的作用是正交的,他們的增益互不影響,所以結合使用更香(我們統一稱之為GFL)。我們在基於Resnet50的backbone的ATSS(CVPR20)的baseline上1x訓練無multi-scale直接基本無cost地提升了一個點,在COCO validation上從39.2 提到了40.2 AP。實際上QFL還省掉了原來ATSS的centerness那個分支,不過DFL因為引入分佈表示需要多回歸一些變數,所以一來一去inference的時間基本上也沒什麼變化。

2. 在2x + multi-scale的訓練模式下,在COCO test-dev上,Resnet50 backbone用GFL一把幹到了43.1 AP,這是一個非常可觀的效能。同時,基於ResNeXt-101-32x4d-DCN backbone,能夠有48.2的AP且在2080Ti單GPU上有10FPS的測速,還是相當不錯的speed-accuracy trade-off了。

放一些重點的實驗插圖:

最後,附錄裡面其實有不少彩蛋。

第一個彩蛋是關於IoU和centerness的討論。在對比實驗中,我們發現IoU作為框預測質量的度量會始終比centerness更優。於是我們又具體深入分析了一些原因,發現的確從原理上來講,IoU可能作為質量的估計更加合適。具體原因如下:

1) IoU本身就是最終metric的衡量標準,所以用來做質量估計和排序是非常自然的。

2) centerness有一些不可避免的缺陷,比如對於stride=8的FPN的特徵層(也就是P3),會存在一些小物體他們的centerness label極度小甚至接近於0,如下圖所示:

而IoU就會相對好很多。我們也統計了一下兩者作為label的分佈情況,如圖:

這意味著IoU的label相對都較大,而centerness的label相對都較小,同時還有非常非常小的。可以想見,如果有一些正樣本的centerness的label本身就很小,那麼他們最後在做NMS排序的時候,乘上一個很小的數(假設網路學到位了),那麼就很容易排到很後面,那自然效能就不容易上去了。所以,綜合各種實驗以及上述的分析,個人認為centerness可能只是一箇中間產物(當然,其在FCOS中提出時的創新性還是比較valuable的),最終歷史的發展軌跡還是要收斂到IoU來。

第二個彩蛋是分散式表示的一些有趣的觀察。我們發現有一些分散式表示學到了多個峰。比如傘這個物體,它的傘柄被椅子嚴重遮擋。如果我們不看傘柄,那麼可以按照白色框(gt)來定位傘,但如果我們算上傘柄,我們又可以用綠色框(預測)來定位傘。在分佈上,它也的確呈現一個雙峰的模式(bottom),它的兩個峰的概率會集中在底部的綠線和白線的兩個位置。這個觀察還是相當有趣的。這可能帶來一個妙用,就是我們可以通過分佈shape的情況去找哪些圖片可能有界定很模糊的邊界,從而再進行一些標註的refine或一致性的檢查等等。頗有一種Learn From Data,再反哺Data的感覺。

最後談談檢測這塊的兩個可能的大趨勢。太明顯了,一個是kaiming引領的unsupervised learning,妥妥擼起袖子幹一個檢測友好的unsupervised pretrain model especially for object detection;還有一個是FAIR最近火爆的DETR,其實去掉NMS這個事情今年也一直在弄,搞的思路一直不太對,也沒搞出啥名堂,還是DETR花500個epoch引領了一下這個潮流,指了個門道,當然方向有了,具體走成啥樣,還是八仙過海,各顯神通啦~

相關文章