1. 程式人生 > >轉:Cascade R-CNN,一個使你的檢測更加準確的網絡

轉:Cascade R-CNN,一個使你的檢測更加準確的網絡

位置 重要 fast 展示 ~~ 大小 tle tab poi

轉自:https://blog.csdn.net/Chunfengyanyulove/article/details/86414810



簡要概述文章精華

本篇文章主要解決了在目標檢測中,檢測框不是特別準,容易出現噪聲幹擾的問題,即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方法可能沒有什麽特別的,但是能探究出背後的邏輯,設計出這個方法,還是很厲害的。

轉:Cascade R-CNN,一個使你的檢測更加準確的網絡