1. 程式人生 > >Faster R-CNN網路的另一種優化思路:cascade R-CNN網路詳解

Faster R-CNN網路的另一種優化思路:cascade R-CNN網路詳解

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

論文地址:https://arxiv.org/pdf/1712.00726.pdf

Github專案地址:https://github.com/zhaoweicai/cascade-rcnn

在Faster R-CNN演算法中,我們需要確定IOU的閾值來區分正樣本和負樣本。低的閾值如0.5訓練網路,易產生檢測噪聲,但隨著IOU閾值的增加,檢測效能會降低。因此,我們提出了Cascade R-CNN(級聯R-CNN)演算法。

該演算法由一系列隨著IOU閾值增加而訓練的檢測器組成,循序漸進的對close false positive更具選擇性。檢測器被階段性地訓練,如果檢測器的輸出是一個好的分佈,則用於訓練下一個階段更好的檢測器。對逐漸改進的假設進行重取樣,保證所有的檢測器由一組同等大小的正樣本組成,緩解過擬合問題。在假設階段應用同樣的級聯程式,使得每一個階段的假設和檢測器的質量有一更匹配的效能。

直接提高IoU時候帶來的過擬合問題與Cascade R-CNN的提出

IoU用來判斷候選框是正樣本還是負樣本,比如一般設IoU為0.5,>0.5的作為正樣本。但是,IoU設為0.5這樣一個條件太鬆了,會有很多噪音框出現。

如果我們提高Iou,那麼又會帶來另一個問題,由於IoU是用來判斷正負樣本的,如果IoU值太大,用來訓練模型的正樣本就減少了,這會導致過擬合的問題。

如:

圖(a)中u=0.5也就是常用的正負樣本界定的閾值,但是當閾值取0.5時會有較多的誤檢,因為0.5的閾值會使得正樣本中有較多的背景,這是較多誤檢的原因;(b)用0.7的IOU閾值可以減少誤檢,但檢測效果不一定最好,主要原因在於IOU閾值越高,正樣本的數量就越少,因此過擬合的風險就越大。

圖(c)和(d)中的曲線是用來描述localization performance和detection performance,其中橫座標表示輸入的proposal和ground truth的IOU值,縱座標表示輸出的proposal和ground truth的IOU值。紅、綠、藍3條曲線代表訓練檢測模型時用的正負樣本標籤的閾值分別是0.7、0.6、0.5。

圖(c)中不同的線條代表不同的訓練用IoU閾值訓練出來的detector,顯然新的IoU越高,detector的regression的效能越好。另外,在圖(c)中可以看到在0.55~0.6的範圍內閾值為0.5的detector效能最好,在0.6~0.75閾值為0.6的detector效能最佳,而到了0.75之後就是閾值為0.7的detector了。

也就是說,只有proposal自身的閾值和訓練器訓練用的閾值較為接近的時候,訓練器的效能才最好。那麼我們能不能直接用較大的閾值(比如u=0.7)來訓練檢測模型呢?這樣是不行的,原因是較高的閾值會使得正樣本數量減少,這樣資料更加趨於不平衡,而且正樣本數量的減少會使得模型更容易過擬合。

在圖(d)中我們可以發現輸入的Iou從0.5開始增加後,detector的detection performance反而在不斷變差。

如何能保證proposal的高質量又不減少訓練樣本?

作者提出了cascade R-CNN模型,簡單來講cascade R-CNN是由一系列的檢測模型組成,每個檢測模型都基於不同IOU閾值的正負樣本訓練得到,前一個檢測模型的輸出作為後一個檢測模型的輸入,因此是stage by stage的訓練方式,而且越往後的檢測模型,其界定正負樣本的IOU閾值是不斷上升的。

我們看圖c中大部分線條都是在y=x的灰色線條之上的,這就說明某個proposal在經過detector後的IoU幾乎必然是增加的,那麼再經過一個更大閾值訓練的detector,它的IoU就會更好。 

如:

根據圖(c)中資料,假如有三個串聯起來的用0.5/0.6/0.7的閾值訓練出來的detector,有一個IoU約為0.55的proposal,經過0.5的detector,IoU變為0.75;再經過0.6的detector,IoU變為0.82;再經過0.7的detector,最終IoU變為0.87,這比任何一個單獨的detector的結果都要好。每經過一個detector,proposal的IoU都更高,正樣本的質量會更好,即使下一個檢測器的IOU閾值設定的較高,也不會有太多的樣本被捨棄,能有效的緩解過擬合現象。

相關工作及比較證明:

下面是幾種模型結構的對比:

上圖中,H0代表RPN網路,H1代表ROI池化層,C代表分類器,B代表邊界框迴歸。

圖(a)是經典的Faster R-CNN框架模型,注意Faster R-CNN中的C0是分類一個anchor中包含目標或者不包含目標,C1才是分類這個anchor中包含哪一類目標;

注意我們的圖(b)Iterative bbox refinement採用了級聯的結構對Box迴歸,它的結構看起來似乎和圖(d)作者提出的Cascade R-CNN網路一樣,但是Iterative bbox refinement每一級使用的ROI檢測網路部分是相同的結構“H1”,它們使用的是同樣的IoU閾值。故Iterative bbox refinement訓練出來的header,會導致IoU到一定值之後很難更進一步改善。邊界框迴歸部分的公式與Faster R-CNN中相同,這裡不再贅述。

對於圖(c)Integral loss,它只有一個bbox reg,但是有針對不同閾值的classifier,不過這本質上也並不能改善最終定位的精度。

圖(d)就是作者提出的Cascade R-CNN網路,即有多個IoU threshold遞增的header,每一級使用上一級refine過後的bbox作為輸入。這樣可以保證每一級的header都可以得到足夠多的正樣本,且正樣本的質量可以逐級提升。在訓練和測試時,這個操作也都保持一致。在測試中,作者使用多個header輸出的均值作為這個proposal最終的分數,可以證明對結果會有進一步的提升。

下圖是關於迭代式bbox迴歸在不同階段的四個迴歸值分佈情況(藍色點)。

上圖中第一行橫縱軸分別為迴歸目標中box的x和y方向的偏移量,第二行橫縱軸分別為迴歸目標中box的寬高偏差量。

可以看到在級聯中從1st stage到2st stage,proposal的分佈發生了很大的變化,有很多噪聲在經過box reg訓練之後提高了IOU,在2st stage和3st stage中那些紅點屬於異常值。可以看出在不同階段這4個值的分佈差異較大,對於這種情況,不變化的檢測模型顯然難以在這種改變中達到最優效果。 因此需要在後續的級聯結構中提高閾值去除噪聲干擾。

前面提到提高閾值會減少正樣本的數量,在前言部分對此給出了感性的解釋,作者又給出了理論依據。

上圖是cascade-R-CNN在不同階段預測得到的proposal的IOU值分佈情況。

從上圖可以看到在1st stage中大於0.5的部分,與2st stage中大於0.6的部分,還有3st stage中大於0.7的部分在數量上基本一致。

第一個stage大於0.5佔16.7%,第二個stage大於0.6佔21.7%,第三個stage大於0.7佔21.7%。最後(第三個stage)使用高IoU閾值(0.7)判斷正負樣本的時候,沒有減少正樣本數量,反而還有點增加,從而避免了過擬合。

Interative Loss模型沒有級聯結構,該結構使用了不同閾值分類,然後融合多個結果進行分類推理,而且只取了一個結果做邊界框迴歸。由上圖的1st stage部分可以看出,當IOU越高,proposal佔的比重越小,因此Interative Loss的結構不能從根本上克服過擬合的現象。

Cascade R-CNN的實現與結果:

作者最終確定的結構一共是4個stages: 1個RPN+3個檢測器(閾值設定分別為0.5/0.6/0.7)……RPN就是Faster R-CNN網路中的RPN。後面三個檢測器,則按照之前介紹,每個檢測器的輸入都是上一個檢測器進行了邊框迴歸後的結果,實現思路類似於Faster RCNN的第二階段。 

 

結果如下:

作者的方法效果還是很驚豔的。另外,對於目前流行的檢測結構來說,特徵提取是耗時最多的,因此儘管Cascade R-CNN增加了比較多的引數,但是速度的影響並沒有想象中的大。

作者也比較了網路的耗時:

目標檢測與分類任務很大的不同就在於資料集的樣本沒有明確的區分正負樣本,在檢測任務中是通過設定IOU的值區分正負樣本,這就涉及到一個調參的問題,但是IoU這個指標很難通過gradient descent來優化,雖然之前也有一些IoU loss的工作,但是效果並不理想。Cascade R-CNN所提的方法,在前人的基礎上更進了一步。