1. 程式人生 > >Cascade R-CNN 論文理解

Cascade R-CNN 論文理解

paper:Cascade R-CNN: Delving into High Quality Object Detection
linkCascade R-CNN paper
codehttps://github.com/zhaoweicai/cascade-rcnn

摘要

  • 在目標檢測中IOU(intersection over union)閾值用來判斷候選框是positive還是negative,IOU閾值的提高會降低檢測效能:
    • 正樣本數量的急劇減少,會導致訓練過程過擬合;
    • train和inference兩個階段的IOU閾值不同會導致mismatch;
  • 提出Cascade R-CNN,由一系列在IOU逐漸增加的情況下訓練得到的檢測器組成訓練過程逐步進行,上一階段檢測器的輸出能提供使下階段訓練出更高質量檢測器的良好資料分佈;

引言

  • 檢測器需要同時解決識別和檢測問題,需要面對大量的close false positives,與此同時需要找出true positive
  • 對比圖(a)和(b)發現當IOU閾值較低時有更多的誤檢;圖©的橫座標表示輸入的proposal和GT的IOU值,縱座標表示經過regression後bbox和GT的IOU值,從圖中可以發現在輸入IOU在 [
    0.5 , 0.6 ] [0.5,0.6]
    區間內 u = 0.5
    u=0.5
    的performance最好,在 [ 0.6 , 0.75 ] [0.6,0.75] 區間內 u = 0.6 u=0.6 的performance最好,在 [ 0.75 , 0.95 ] [0.75,0.95] 區間內 u = 0.7 u=0.7 的performance最好;結論是:在不同IOU閾值情況下樣本的分佈不一樣,導致同一閾值不能cover到所有樣本,即proposal的IOU閾值和檢測器訓練閾值接近時檢測器的效能才最好(避免mismatch的問題);
  • 為了訓練高質量的檢測器,直接在訓練過程中提升IOU閾值是不可行的如圖(b)所示,當IOU閾值提高到0.6時AP有提升但是提高到0.7時AP就會明顯降低;原因:在訓練階段IOU閾值提升時,訓練過程的正樣本數量急劇減少,正負樣本資料更加不平衡,使得訓練過程更容易產生過擬合;
  • Cascade R-CNN的提出:既要保證proposal的同時又要保證正樣本的數量,從圖©的baseline可以看出,proposal在經過檢測器後和GT的IOU會增加,因此如果proposal再經過用更高IOU閾值訓練的檢測器那麼輸出結果的IOU會更高;由此針對Cascade R-CNN提出一個新的訓練思路:使用前一個stage的輸出去訓練下一個stage的檢測器,每經過一個檢測器proposal的IOU都會提高,那麼即使下一階段的檢測器在訓練的時候閾值設定提高也能保證正樣本的數量避免過擬合

相關工作

  • 列舉了當前一些目標檢測器並分析其特點:
    • two stage:R-CNN、SPP-Net、Fast-RCNN、Faster-RCNN,還有在此基礎上衍生的R-FCN等,已經加上了多尺度檢測特性的FPN、MS-CNN結構;
    • one stage:yolo、SSD等缺點在於精度不及two stage的檢測器,RetinaNet的提出緩解了正負樣本不平衡問題在精度上甚至優於two stage的檢測器;
    • multi stage:之前也有相關成果CRAFT、AttractioNet(和Fast-RCNN連線) ,將經典的級聯結構嵌入目標檢測網路中;

目標檢測

本文Cascade R-CNN的思路主要是在Faster R-CNN圖(a)的基礎上進行拓展,加入一個多階段檢測子網路對RPN產生的proposal進行逐步的refine;

bbox迴歸

  • L l o c L_{loc} 採用的是Faster RCNN中的Smooth L1 loss,其中bbox的encode和decode過程在這裡我就不復述了(和其他檢測框架的解析過程相同);
  • 圖(b)表示所有HEAD network都相同的iterative bbox操作,每階段的IOU閾值都相同,使得IOU在後面階段很難提升,有兩方面的問題:
    • 圖一中的結論:單一的0.5IOU閾值無法cover所有IOU範圍的proposal;
    • 每階段的檢測器會改變樣本IOU的分佈,使用相同的IOU閾值不合適;圖二兩行圖示分別表示bbox(x,y,w,h)的偏移量和偏差量,每經過一個階段的refine資料的分佈改變很大,噪聲資料的IOU也會增大圖中紅點表示提高IOU閾值後移除的噪聲,refine過程可以理解為樣本的重取樣,在提高IOU閾值的情況下保證樣本的質量

分類

  • L c l s L_{cls} 採用的是經典的cross-entropy損失函式;

檢測質量

  • 在目標檢測中很難確定一個目標是正樣本還是負樣本,通常由IOU閾值來定義目標的類別屬性,因此IOU閾值作為定義檢測器質量的重要指標;
  • IOU的設定和檢測效能是矛盾對立的:閾值設定過高,訓練階段沒有足夠的正樣本;閾值設定過低會導致檢測器很難鑑別close false positive,出現嚴重的誤檢情況;總體來說單個分類器很難再多IOU level上有好的表現,由於RPN、selective search等proposal檢測器生成的proposal質量較低因此需要檢測器對低質量的proposal具有更強的鑑別能力;目前大多數訓練階段IOU設定標準是0.5,但是這個閾值還是偏低了導致檢測質量降低從而導致產生誤檢;
  • 圖3©演算法方案為此使用了integral loss,使用不同的IOU閾值來對bbox進行分類然後融合分類結果進行類別的鑑定,但是沒有對bbox迴歸使用級聯結構;這種方案沒有解決不同loss所作用的正樣本數量不同的問題(這裡解釋有點繞口吧…其實就是老問題IOU越高正樣本越少),圖4(a)可以看出隨著IOU的提升正樣本數量迅速減少,and高質量的分類器更容易overfitting…;雖然IOU提高了,分類器依然要處理大量低質量的proposal沒有得到優化,因此本質上檢測精度沒有得到什麼提升;

Cascade R-CNN

Cascade R-CNN結構如圖3(d)所示,上階段的bbox輸出作為下階段的輸入,每個階段的IOU閾值逐步增加(其實Cascade R-CNN的結構很簡單了,在Faster R-CNN RPN後面擴充套件了一個多階段檢測子網路)

  • Cascade R-CNN結構:backbone+RPN+3detector(iou:0.5,0.6,0.7);
  • detector:two stage檢測器第二階段的設計思路,不同的是每個階段的輸入輸出是串聯的;

實驗結果

  • 文中對比了Cascade R-CNN based on FPN+和ResNet-101結構和一些優秀演算法的對比,從AP指標上來看Cascade R-CNN對檢測精度的提升很大;
  • 同時還比對了Cascade R-CNN的引數量和速度,從表中可以發現引數量增加得比較多,但是inference和training的速度影響不大;

總結

  • 本文提出了一個級聯目標檢測器Cascade R-CNN,給高質量目標檢測器的設計提出一個好的方向;
  • Cascade R-CNN在提升IOU的同時避免了training階段的過擬合以及inference階段的檢測質量mismatch;
  • 文中對比實驗很充分:
    • 在proposal中新增GT bbox驗證檢測質量mismatch問題;
    • 和iterative bbox和integral loss兩種方法進行對比;
    • 通過調整stages的數目來分析合適級聯數,3stages級聯綜合表現最好;
    • 在現有two stage演算法框架上加入cascade思想和原始實現進行對比;
    • Cascade R-CNN帶來的檢測結果還是很優秀的
  • 檢測問題不同於分類問題,分類問題中樣本的label是離散的可以很好區分正負樣本,但是檢測問題中bbox的資訊不是離散的只能通過IOU閾值來判定正負樣本,並且合適IOU閾值沒法在訓練中通過學習來調整優化,所以Cascade R-CNN核心思想主要集中在IOU的優化上,算是在高質量目標檢測器設計思路上一次優秀的嘗試;