1. 程式人生 > >一文帶你讀懂Cascade R-CNN,一個使你的檢測更加準確的網路

一文帶你讀懂Cascade R-CNN,一個使你的檢測更加準確的網路


論文名稱:Cascade R-CNN: Delving into High Quality Object Detection

作者:Zhaowei Cai & Nuno Vasconcelos

論文連結:https://arxiv.org/abs/1712.00726

程式碼連結:https://github.com/zhaoweicai/cascade-rcnn


簡要概述文章精華

本篇文章主要解決了在目標檢測中,檢測框不是特別準,容易出現噪聲干擾的問題,即close false positive,為什麼會有這個問題呢?作者實驗發現,因為在基於anchor的檢測方法中,我們一般會設定訓練的正負樣本(用於訓練分類以及對正樣本進行座標迴歸),選取正負樣本的方式主要利用候選框與ground truth的IOU佔比,常用的比例是50%,即IOU>0.5的作為正樣本,IOU<0.3作為負樣本等,但是這樣就帶來了一個問題,閾值取0.5是最好的嗎

?作者通過實驗發現,1、設定不同閾值,閾值越高,其網路對準確度較高的候選框的作用效果越好2、不論閾值設定多少,訓練後的網路對輸入的proposal都有一定的優化作用。基於這兩點,作者設計了Cascade R-CNN網路,如下面圖Figure3(d)所示,即通過級聯的R-CNN網路,每個級聯的R-CNN設定不同的IOU閾值,這樣每個網路輸出的準確度提升一點,用作下一個更高精度的網路的輸入,逐步將網路輸出的準確度進一步提高。

一句話總結就是:Cascade R-CNN就是使用不同的IOU閾值,訓練了多個級聯的檢測器。

讀了文章精華,我想你已經知道這個網路時做什麼的,如果感興趣,那麼接著讀下面的詳細解析吧~~


文章詳細解析

目標檢測其實主要乾的就是兩件事,一是對目標分類,二是標出目標位置。所以,瞭解Faster R-CNN或者SSD的同學可能都比較清楚,為了實現這兩個目標,在訓練的時候,我們一般會首先提取候選proposal,然後對proposal進行分類,並且將proposal迴歸到與其對應的groud truth上面,但是這就帶來了一個問題,因為我們做分類需要確定樣本的標籤,那麼我們給什麼樣的proposal打一個標籤呢?最常用的做法是利用IOU(proposal與ground truth的交併比),可是IOU閾值設定成多少可以作為我打標籤的邊界呢?常用的閾值是0.5,可是0.5是最好的嗎?作者通過實驗證實了不同IOU對於網路的影響,如圖Figure 1 ©所示。圖c中3條線分別代表3個IOU的閾值,橫軸是輸入的IOU的proposal,縱軸是對應的proposal經過網路輸出後的座標框與ground truth的IOU,我們觀察可以發現,3條線,都在灰色對角線之上,說明3條線都有一定的優化效果,並且,3條線無一例外在自己設定的閾值周圍優化較明顯。

那麼問題來了,我們是否可以將閾值提高,以達到優化輸出精度的效果呢?

作者又做了不同閾值下網路精度的實驗,結果如圖figure1(d)所示,可以發現,對於閾值為0.5以及0.6的時候,網路精度差距不大,甚至提升了一點,但是將精度提升到0.7後,網路的精度就急速下降了,(COCO資料集上:AP:0.354->0.319),這個實驗說明了,僅僅提高IoU的閾值是不行的,因為提高閾值以後,我們會發現,實際上網路的精度(AP)反而降低了

為什麼會下降呢?

  • 由於提高了閾值,導致正樣本的數量呈指數減低,導致了訓練的過擬合
  • 在inference階段,輸入的IOU與訓練的IOU不匹配也會導致精度的下降。所以才會出現Figure1(d)中,u=0.7的曲線在IOU=0.5左右的時候,差距那麼大。

實驗證明了不能使用高的閾值來進行訓練,但是實驗也呈現出了另一個事實,那便是:迴歸器的輸出IOU一般會好於輸入的IOU,圖figure1(c)所示。並且隨著u的增大,對於在其閾值之上的proposal的優化效果還是有提升的

那既然這樣,我們是否可以採用級聯的方式逐步提升呢?即首先利用u=0.5的網路,將輸入的proposal的提升一些,假如提升到了0.6,然後在用u=0.6的網路進一步提升,加入提升到0.7,然後再用u=0.7的網路再提升,這樣豈不是精度越來越高了?

於是乎,作者設計了Cascade R-CNN網路。


圖figure 3(d)是Cascade R-CNN的網路結構對比圖,Figure 3(a)是Faster R-CNN的網路結構圖,其中H0代表的是RPN網路,H1代表的是Faster R-CNN進行檢測與分類的head,C1代表最終的分類結果,B1代表最終的bounding box迴歸結果。那麼Cascade R-CNN有什麼不同呢?H1那一部分是一樣的,但是Cascade R-CNN得到B1迴歸後的檢測框後,將其輸入到H2部分,繼續迴歸,以此類推到H3部分,使得每次對bounding box都提高一定的精度,已達到提高檢測框準確度的作用。

注:級聯的方式,不再是為了找到hard negatives,而是通過調整bounding boxes,給下一階段找到一個IoU更高的正樣本來訓練。SSD等利用hard negatives方法進行優化。即對負樣本loss排序,取loss較大的部分


在作者Cascade R-CNN之前,其實也有人研究了基於Cascade的方法進行座標框的優化,如圖figure3(b)所示,這種方法叫做iterative bounding box regression,不過該方法中所有的head都是相同的,用公式表示就是如下:

這會導致瞭如下問題:

  • 我們採用IOU=0.5來訓練網路,如圖Figure1 ©所示,其對IOU更高的影象效果提升有限。
  • 在每次迭代後,bounding box的分佈實際上發生了一定的改變,而分類器是基於最開始的bounding box來訓練的,這樣會產生較多的outlier point,如下圖所示:(紅的代表溢位點)

Cascade RCNN的結構圖如圖Figure3(d)所示,公式表示就是這樣的:

iterative bounding box regression是對迴歸框進行後處理,即生成了之後在多次處理,而Cascade RCNN是在訓練的時候就進行重新取樣,訓練的時候不同的stage的輸入資料分佈已經是不同的了。這就在一定程度上解決了iterative bounding box regression出現的資料分佈變化的問題。高手解決問題,往往就是很簡單的一個改動,卻產生了重要的意義。

圖Figure 4代表了Cascade R-CNN不同stage的輸入資料的IOU分佈。


實驗部分
  • 網路引數

網路的預設設定共有4個stage,第一個stage產生RPN,另外三個stage分別設定IOU閾值為[0.5,0.6,0.7],baseline的選擇,Faster R-CNN作者預設選擇VGG網路,R-FCN以及FPN作者預設選擇ResNet作為backbone,使用的是預設引數。

具體的網路訓練的預設引數論文中有提及,這裡不詳述了,感興趣的讀者可以自行檢視論文,實驗部分的介紹。

  • 損失函式

關於損失函式,跟Faster R-CNN基本一致,沒有什麼變化。分類採用softmax,迴歸採用smooth L1 loss,並且為了防止由於bounding box的大小以及位置帶來的迴歸尺度的影響,我們一般會對box的座標進行歸一化操作,即:


  • 網路分析

圖Figure5(a)中,3條實線分別對應3個IOU閾值下訓練的模型的AP(注意這裡是單獨訓練的,不是採用級聯的方式訓練的),如圖可以發現,當u=0.6是時候,在IOU比較低的時候,其表現是沒有u=0.5好的,但是在IOU比較高的時候,表現比0.5好了一些,而對比u=0.7會發現,其效果基本都在u=0.6以下,只有在IOU>0.8的時候,表現略微超過了u=0.5.該實驗說明了,設定不同閾值對於網路的影響。

進一步的,作者又進行了實驗,作者將ground truth加入到了Proposal中間,測試結果如圖Figure5(b)所示,實驗結果顯示,網路的表現隨著u提升而提升,為什麼會這樣呢?

說明,u=0.7的時候,需要你保證proposal的質量,即其輸入的proposal的準確度要高一點,另外,u=0.7確實可以做到比u=0.5要好,只是需要你保證你proposal的準確度就行。

Cascade RCNN的作用不就是這樣嗎?那是不是如我們猜想的一樣呢?圖Figure5(a)給出了答案,其中虛線代表的是cascade結構的精度,可以發現,精度確實提升了,雖然沒有在IOU較低的部分超過u=0.5,但是整體上是提升了的,說明cascade的提升還是有效果的。

圖Figure(6)向我們展示了不同stage下不同閾值的表現,可以發現,stage1的時候u=0.7的detector表現不是很好,但是當stage=3的時候,u=0.7的表現就非常好了。並且細心的同學可能發現,圖6的精度比圖5的精度要高?這是為什麼呢?因為圖6是採用cascade方法訓練得到了,而圖5只是設定了不同的IOU閾值作為正樣本來訓練,並沒有採用cascade方法,這裡也側面說明了cascade方法的有效性。

另外作者對比了Iterative BBox以及Intrgral Loss的精度,如下表。

對Cascade R-CNN網路的進一步探索實驗
  • 實驗一:stage-wise的比較

下表展示了不同stage的表現,其中1,2,3分別代表單個stage的表現,1 ~ 2代表了級聯1和2的表現,1 ~ 3代表了級聯1-3的表現,可以發現AP呈遞增趨勢,效果也是越來越好,符合預期。

  • 實驗二:提升閾值的作用

下表展示了是否每個stage都需要提升IOU的閾值呢?帶有向上箭頭的那行表示IOU的閾值會提升,不帶的表示不提升,實驗結果表明提升的效果還是比較明顯的,stat代表的是是否採用迴歸統計,這個迴歸統計是什麼東西我也還沒搞明白,知道的可以跟我說一下。。。

  • 實驗三:多少個stage是最合適的呢?

最後一個實驗,作者對stage的數量進行了分析,如下圖所示,作者發現stage為3的時候效果最好,繼續增加效果反而下降了。

下圖是cascade與目前stage of the art 網路的對比情況,其中Table 6還有訓練時間等資訊

可以發現使用cascade結構對於精度的提升確實是有幫助的,不過時間也會稍稍增加一些。

結論

本篇論文最大的貢獻在於,提出了Cascade R-CNN的方法,同時向我們介紹了不同閾值下對於proposal的迴歸作用,雖然Cascade R-CNN方法可能沒有什麼特別的,但是能探究出背後的邏輯,設計出這個方法,還是很厲害的。