1. 程式人生 > 其它 >【論文筆記】Cascade R-CNN:通過多次迴歸提高檢測質量

【論文筆記】Cascade R-CNN:通過多次迴歸提高檢測質量

Introduction

在論文的開始,作者提出了"close" false positive,這些false positive比較接近但不是true positive,使得檢測器難以區分"close" false positive和true positive,這是目標檢測的主要難點之一。當前的檢測器普遍將區分positive與negative的IoU閾值設為0.5(比較低),這種寬鬆的要求導致很多的包圍框都被認為是positive(即使是那些看起來不是很好的包圍框也會被認為是positive)。如圖1(a)所示,當IoU閾值設為0.5的時候,生成了很多低質量包圍框。大多數人認為"close" false positive與ground truth的IoU是大於0.5的,因此使用0.5作為IoU閾值是區分不了"close" false positive與true positive的。既然0.5太低,區分不了"close" false positive與true positive,那麼把IoU閾值(比如0.7)設的更大不就完了?然而現實沒有那麼美好,如圖1(d)所示,當IoU閾值為0.7時,檢測器的AP值反而更低了。

為了方便後面說明,做出以下定義:

  • 將proposal(論文中用的是hypothesis,個人習慣用proposal)的質量定義為其與ground truth的IoU大小
  • 將檢測器的質量定義為檢測器訓練時使用的IoU閾值

作者認為將IoU閾值設為0.7使AP下降主要有兩個原因:

  • 太高的IoU閾值會讓positive數量很少,導致過擬合
  • inference階段的proposal質量與檢測器質量不匹配(即論文中的mismatch)(通俗一點的解釋:如果proposal與ground truth的IoU都很低,而檢測器的IoU閾值很高,AP就會很低)

為了驗證第二個原因,作者做了一個IoU閾值對迴歸效能影響的實驗,如圖1(c)所示。橫軸是proposal迴歸之前與ground truth的IoU(proposal的質量),縱軸是proposal迴歸之後與ground truth的IoU,可以看到,大部分情況下經過迴歸之後,proposal與ground truth的IoU增加了(這也是我們為什麼使用迴歸的原因),然而當proposal的質量與檢測器的質量差別很大時,迴歸之後的IoU閾值會降低(比如proposal的質量在0.95附近,而檢測器質量只有0.5時)。並且,當proposal的質量與檢測器的質量越接近,迴歸之後增加的IoU越大。因此,作者認為proposal的質量與檢測器的質量互相匹配很重要。

有了這樣一個重要的發現,作者指出了Cascade R-CNN的大致思想:使用多個階段進行訓練,並用上一個階段的輸出作為下一個階段的輸入。(這是因為每次訓練之後質量更高,因此將其傳遞給質量更高的階段)此外,通過這種逐步地訓練,可以防止positive數量過少,減少了過擬合的可能性。個人看法:因為直接拿高質量的檢測器訓練低質量的proposal會mismatch,因此需要使用這種逐步的方法,慢慢提煉proposal。

圖1

Object Detection

作者基於Faster R-CNN實現Cascade R-CNN,Faster R-CNN結構如圖2(a)所示:

圖2

其中"conv"代表backbone,"H0"代表RPN,"H1"代表RoI Head。

Bounding Box Regression

在Cascade R-CNN之前,已經有人指出只做一次迴歸是不夠的,這種方法被稱為迭代包圍框迴歸(iterative bounding box regression),如圖2(b)所示。可以看到,在迭代包圍框迴歸中,多個RoI Head是共享引數的(三個Head的IoU閾值相同),因此它沒有解決mismatch問題。此外,如圖3所示,在每次迴歸之後,包圍框的分佈改變的非常大,如果三個RoI Head是共享引數的話,這顯然不合理。這也是為什麼迭代包圍框迴歸需要很多手工操作的原因,通常情況下,迭代超過兩次沒有什麼好處。

圖3

Classification

在introduction這一節中已經指出,為了達到高質量的檢查效能,檢測器的質量level要與proposal的質量level匹配,那麼,對於分類來說,一個簡單的做法就是計算多個質量level的loss之和作為總的分類loss,如公式1所示:

公式1

其中\(U\)是IoU閾值的集合,這種方式的結構如圖2(c)所示。可以看到,三個RoI Head是不同的,但是它們卻用了同一個proposal(RPN生成的),這就會導致兩個問題。第一,對於IoU閾值很高的分類器來說,它的positive是很少的,如圖4所示,容易導致過擬合;第二,在inference階段,IoU閾值很高的分類器會處理很多低質量的proposal,然而這些低質量的proposal在高質量的分類器中並沒有得到訓練(直接被設為了背景)。由於這些原因,這種方法相比於原始的Faster R-CNN提升不了多少。

圖4

Cascade R-CNN

Cascade R-CNN結構如圖2(d)所示,可以看到,它其實就是把上一節中提到的兩個方法結合到了一起。和迭代包圍框迴歸相比,Cascade R-CNN有以下不同:

  • 迭代包圍盒迴歸是用於提高包圍框精度的後處理方式,而Cascade迴歸是一種改變proposal分佈的resampling過程
  • Cascade迴歸同時用在了train和inference上
  • Cascade的三個RoI Head不共享引數,是單獨訓練的

由圖4可知,在第一個階段(RPN生成的proposal)中,低質量的proposal有很多,在經過不斷地迴歸後,高質量的proposal越來越多,既防止了過擬合,又抑制了"close" false positive。

總結

Cascade R-CNN發現了檢測器質量與proposal質量的匹配關係對檢測效能的影響,並以此使用了多次迴歸來提高檢測質量,極大提高了檢測器的AP值。

參考資料

Cascade R-CNN: Delving into High Quality Object Detection
https://zhuanlan.zhihu.com/p/92779720