論文信息
Zhaowei Cai, Nuno Vasconcelos. Cascade R-CNN: Delving into High Quality Object Detection. CVPR 2018.
前言
或是說前言加摘要.
當使用一個較低的IOU閾值訓練object detector, 通常會導致noisy detection. 當提高閾值后發現性能會有所提升. 這主要可能是又兩個原因:
- 當提升閾值之后正樣本會"指數式地"減少.
- 已經優化的模型所適應的IOU和輸入的proposal不匹配.
本文提出的Cascade R-CNN主要就是為了解決此問題.
它是由一系列逐級遞增IOU的detector訓練並順序組合得到的. 要指出每一階段都輸出都分布地比較好, 這樣就方便順序進行下一階段. 對這些逐級遞增地proposal(原文稱作hypotheses, 下同)resampling保證positive set的尺寸都相等, 這樣能緩解過擬合問題(可能是因為逐級提升的緣故, 因此可以使用一些比較差的數據, 這樣就擴充了positive set從而對過擬合緩解).
Introduction
R-CNN等模型常使用IOU閾值0.5, 這樣會對positives的要求太過於loose, 着就會導致產生太多不達標的proposal(原文說法是noise bbox), 如圖, 圖中比較了0.5和0.7的差別:
從圖中我們可以很容易看出左圖比右圖多了很多bbox, 且多的bbox大多無意義.
假設大多數人類能在IOU大於0.5的情況下能夠比較容易地分辨出那些本不含物體而被機器判斷為有物體(false positive, FP for short)的example. 對於那些小於0.5的內容豐富多樣example來說, 人和機器都很難高效地分出那些FP example.
本文的工作就是首先生成(原文用define)某個IOU的一些列proposal, 其后對和其IOU對應的detector進行訓練. 這樣似乎就把作者提出的兩個問題都解決了 - 解決學習高質量object detectors的困難(此前的detectors輸出常包含很多FP樣本).
本文解決的重要思想是每一個單獨的detector只對一個單獨的IOU(原文稱quality level)進行優化. 此前有類似的工作, 但本文的思想與其不同, 此前是對FP rate優化, 本文是對一個給定的IOU閾值優化.
從這兩張圖來看, 總體都變現出高IOU預設在輸入高IOU樣本時輸出較好, 低IOU預設在輸入低IOU樣本時輸出較好. 也就是說預設值與輸入值匹配的情況下表現最好.
然而, 要生成一個高質量的detector, 光是簡單地提高閾值也沒什么用, 右圖中也可以看出, 提高閾值輸出還是不斷下降, 作者認為這樣的原因可能是因為提高閾值之后會使positive samples太少. 本來神經網絡就很脆弱, 這么少的樣本很容易造成過擬合. 另一個問題是剛才提到的預設與輸入IOU閾值不匹配的問題.
Object Detection
作者首先給了一張當時比較流行的方法示意圖, 此圖后文用到多次, 我們稱之為結構圖, 各大寫字母含義圖中也給出解釋:
Bounding Box Regression
我們知道bbox對於所框選的圖片塊\(x\)通常由四個坐標構成: \(\b = (b_x, b_y, b_w, b_h)\), bbox regression就是將這個預測的bbox對實際bbox \(g\)進行regress, 這個過程借助regressor \(f(x, b)\)進行, 因此最終就是優化這樣一個函數:
其中\(L_{loc}\)在R-CNN是一個\(L_2\) loss, 而在Fast R-CNN, 是一個\(L_1\) loss. 為了使預測盡可能與實際接近, \(L_{loc}\)實際操作一個距離向量:
其中:
想要指出的是, bbox regression中一般b差異不大, 那么就會使\(L_{loc}\)很小, 為了提升他的effectiveness, 那么一般會使其歸一化\(~N(0, 1)\), 也就是\(\delta_x' = (\delta_x - \mu) / \sigma_x\).
此前有工作argue單獨用一次regression step of f定位精度不夠, 因此他們就重復進行f regress:
即所謂迭代bbox regression(iterative bounding box regression), 此方法對應上圖中(b), 但此方法還是有兩個問題:
-
regressor f是在0.5的閾值訓練, 對於更高閾值的proposal, regressor欠優化, 對於IOU大於0.85的proposal抑制尤為明顯.
-
每次迭代之后的分布都在明顯變化, 很可能初始分布較好, 但經過幾次迭代之后反而表現更差了. 下圖給出一例.
正因為其特性, 此方法需要一些后期處理. 此方法因此也是不穩定的, 通常迭代超過兩次以后基本再無太大變化.
Classification
和先前的方法基本不變, 分類時對於proposal分成\(M + 1\)類, 其中第0類是bg, 預測結果\(h_k(x) = p(y = k | x)\), 其中\(y\)是指被預測對象類別, 那么最終得到被優化的函數:
這里\(l_{cls}\)是經典交叉熵損失.
Detection Quality
和以前一樣, 當proposal IOU大於某個閾值, 則預測label y, 否則為bg(label y = 0). IOU設置高或低的優缺點此前已經講過, 此前有通過結構圖中(c)的做法對多level的輸出計算損失並優化:
U就是多IOU閾值. 因此所有classifiers在推理過程中一起使用, 但有個關鍵問題是不同classifier接收的positives的數量不同! 在下圖中的左圖就是這種情況, 首先高IOU樣本數量太少, 很容易過擬合; 其次高預設IOU classifier又不得不處理眾多不適宜的第IOU樣本. 另外這張圖也請牢記, 我們稱之為分布圖.
Cascade R-CNN
結構如結構圖(d)所示.
Cascaded Bounding Box Regression
既然單個classifier很難適應多IOU, 那么作者就設計了順序的多個classifier, 與iterative bounding box regression相對應, 本文的結構:
這里每個regressor\(f_t\)都是預優化過的,
它與iterative bounding box regression(IBBR for short)的不同有以下幾點:
- IBBR是對同一個網絡重復迭代優化, cascaded regression是通過resample使每一級輸出都能被下級使用.
- cascaded regressor是既用於訓練又用於推理, 那么訓練集和推理集就不會有不匹配的情況了.
- 每一級輸出需要resample, 其后對每一級都會進行優化而不是向IBBR一樣只是最終相當於對輸入優化.
我想解釋一下, 為什么輸入為低IOU最后還會優出適應較高IOU的regressor, 這利用到全文第二張圖的左圖, 我再貼出來一邊便於觀察:
左圖中我們可以看出輸出在大多數情況都是好於輸入的, 那么我們逐級遞增地設置regressor, 最終輸出的也就是單一regressor幾乎不可能達到的高IOU.
Cascade Detection
在分布圖中我們可以發現, 每一階段處理之后分布重心都會向高IOU移動,這樣有兩個好處:
- 不容易過擬合.
- detector就可以對高IOU example訓練, 而減輕以前的不匹配問題.
在每個階段\(t\), R-CNN都要對classifier\(h_t\)和regressor\(f_t\)在閾值\(u^t, u^t > u^{t - 1}\)的狀態下優化, loss為:
其中\(b^t = f_{t - 1}(x^{t -1}, b^{t - 1})\), g是\(x^t\)的ground truth. \(\lambda\)是調節參數. \([y^t \geq 1]\)是指只有不是bg時才計算\(L_{loc}\).
Experimental Results
這里只使用了水平翻轉, 在沒有使用其他trick.
以下與各模型對比實驗, 因為內容都比較直觀, 以后可能不會補充對他們的分析.
Conclusion
正如一開始提到的兩點問題, 作者在本文也是在盡力解決這些問題:
- 采用多階段逐步提升IOU, 從而在低IOU樣本中獲取更多的"高IOU"樣本.
- 對於最后一個階段輸出了高IOU樣本, 訓練classifier從而使其適應高IOU樣本, 當其推理時對於高IOU的樣本處理表現也更好.