目標檢測中的Consistent Optimization
Consistent Optimization for Single-Shot Object Detection
論文連結: https:// arxiv.org/abs/1901.0656 3
我的合作者和我都非常喜歡這個工作!在這個工作中,我們發現了Single-Stage Detector中普遍存在的訓練和測試不一致的問題,然後用一個 簡單、有效、不改變原有結構 的Consistent Optimization策略來解決它,加入Consistent Optimization的RetinaNet在COCO上用ResNet-101達到了40+AP,這是目前single-stage已知的在ResNet-101下最高的單模型單尺度的預測結果。程式碼會盡快release到github上。(不過因為方法非常簡單直接,復現應該不難)。
目前,大多數的Detector模型改進方法都集中在了two-stage陣營中,比如Cascade R-CNN、IoU-Net,One-Stage自從RetinaNet之後的工作就比較少了。相對於Two-Stage而言,One-Stage其實更難一些,因為它依賴於全卷積結構來對feature map上進行均勻取樣的anchor進行分類和位置調整。怎樣才能對現有的one-stage方法進行改進呢? 在本文中我們對RetinaNet的結果進行了分析,並發現訓練和測試的不一致是其中一個重要的原因 。
1. 觀察和分析
我們首先可視化了RetinaNet的regression分支的結果,發現anchor在regression之前和之後的定位效能的差別是非常大的。一個本身與ground-truth的IoU較小的anchor在迴歸之後依然可以與ground-truth的IoU變得較大。

從另一個方面講,classification分支是基於原始的anchor進行訓練的,在標準的設定中,會將IoU>0.5的樣本算作是正樣本,IoU<0.4的設定為負樣本,然後用focal loss訓練。 在測試中將原始anchor訓練的得分賦給調整之後的anchor 。因為anchor的定位效能在迴歸前和迴歸後是不同的,這必然導致classification分支得到的得分與迴歸後的anchor的定位能力表現不一致。為了進一步驗證這個假設,我們可視化了anchor得分的分佈

我們發現,分類得分的 方差隨著IoU的增長會不斷變大 (大於0.9的樣本的統計其實不具備可信度,因為樣本數太少)。我們認為,正是因為基於原始anchor訓練的得分賦予了迴歸後的anchor,導致了目標anchor的分類的方差較大(方差大表示不魯棒,置信度不高)。另外,我們對部分COCO的detection的結果進行驗證分析發現瞭如下兩個問題:(a)不同類別的物體之前存在遮擋導致的inter-class confusion,和(b)foreground-background classification error。(詳細見原文)
2. 解決方法
基於上邊的觀察和分析,一種非常直觀的解決辦法就是將回歸之後的anchor進行訓練。這種策略馬上就會聯想到Cascade R-CNN,是否可以用類似於Cascade的方式呢?具體實現上我們比較了幾種比較典型的實現方法:

(b)實現方式其實就是Cascade直接在one-stage上的擴充套件:在原有的regression/classification head基礎上,加入跟原來結構一樣的head,用於訓練regress之後的anchor,引數與原來的不共享;(c)添加了更多的context資訊,這些feature來源於前一個階段的feature,(d)是最終我們發現更有效的方法。這種方法只是在優化目標上加入了迴歸後的anchor,而不改變原來的網路結構,因此在測試的時候可以保持跟原來one-stage的做法一致。
從優化目標上,classification分支從原來的一項變成了兩項,一項是原始的anchor,另一項是迴歸後的anchor,其網路的輸出 是共享的:

在實驗驗證中我們發現,只用迴歸後的anchor進行監督訓練已經比原始的anchor的效能好。加入原始的anchor訓練過程更穩定,不影響最終的結果。
為了保持跟classification一致,regression也添加了一項,相當於把每一個Anchor迴歸兩次。

3. 實驗驗證
3.1我們對幾種典型的實現方法進行對比,發現最後一種是最為有效的,更重要的是它幾乎 不需要額外的引數,計算更快,訓練更穩定 。

3.2在RetinaNet上進行了詳盡的實驗,包括模型大小和輸入圖片大小。我們發現,Consistent Optimization獨立於這些因素,提升原有baseline的效能大約+1.0 AP

3.3我們也在SSD上驗證了方法的有效性,雖然分析是基於RetinaNet的,但是在SSD上同樣適用~+1.5 AP。

3.4最終的結果對比,注意到在one-stage方法中的CornerNet雖然取得了40+AP,但是它在測試的時候用了flip等測試的trick,並且Hourglass需要更多的訓練/測試時間及引數。

原文中還有更多必要的ablation study和一些有意思的討論和實驗對比(比如如何將Cascade的思想用到one-stage中),就不多提了,感興趣的小夥伴看下原文。
歡迎提意見、評論!