深度学习之 Cascade R-CNN
- Zhaowei Cai, Nuno Vasconcelos. 《Cascade R-CNN: Delving into High Quality Object Detection》. CVPR 2018.
- 論文鏈接:https://arxiv.org/abs/1712.00726
- 代碼鏈接:https://github.com/zhaoweicai/cascade-rcnn
前言
IOU閾值被用來定義正負(fù)例,當(dāng)使用一個(gè)較低的IOU閾值訓(xùn)練object detector, 通常會(huì)導(dǎo)致noisy detection. 當(dāng)提高閾值后發(fā)現(xiàn)性能會(huì)有所下降. 這主要可能是又兩個(gè)原因:
本文提出的Cascade R-CNN主要就是為了解決此問題.
這篇文章是基于Faster RCNN進(jìn)行改進(jìn)的,Faster R-CNN網(wǎng)絡(luò)只有一個(gè)RCNN網(wǎng)絡(luò),而Cascade RCNN將多個(gè)RCNN網(wǎng)絡(luò)基于不同的IOU閾值進(jìn)行級(jí)聯(lián),對(duì)檢測(cè)的結(jié)果進(jìn)行不斷地優(yōu)化。前一個(gè)RCNN網(wǎng)絡(luò)的輸出可以作為后一個(gè)RCNN網(wǎng)絡(luò)的輸入,越往后的檢測(cè)模型,其界定正負(fù)樣本的IOU閾值是不斷上升的。 對(duì)這些逐級(jí)遞增地proposal(原文稱作hypotheses, 下同)resampling保證positive set的尺寸都相等, 這樣能緩解過擬合問題(可能是因?yàn)橹鸺?jí)提升的緣故, 因此可以使用一些比較差的數(shù)據(jù), 這樣就擴(kuò)充了positive set從而對(duì)過擬合緩解).
mismatch
- 在training階段,由于我們知道gt,所以可以很自然的把與gt的iou大于threshold(0.5)的Proposals作為正樣本,這些正樣本參與之后的bbox回歸學(xué)習(xí)。
- 在inference階段,由于我們不知道gt,所以只能把所有的proposal都當(dāng)做正樣本,讓后面的bbox回歸器回歸坐標(biāo)。
我們可以想到training階段和inference階段,bbox回歸器的輸入分布是不一樣的,training階段的輸入proposals質(zhì)量更高(被采樣過,IoU>threshold),inference階段的輸入proposals質(zhì)量相對(duì)較差(沒有被采樣過,可能包括很多IoU<threshold的),這就是論文中提到mismatch問題,這個(gè)問題是固有存在的,通常threshold取0.5時(shí),mismatch問題還不會(huì)很嚴(yán)重。
1. Introduction
R-CNN等模型常使用IOU閾值0.5, 這樣會(huì)對(duì)positives的要求太過于loose, 著就會(huì)導(dǎo)致產(chǎn)生太多不達(dá)標(biāo)的proposal(原文說法是noise bbox), 如圖, 圖中比較了0.5和0.7的差別:
(a)中u=0.5也是常用的正負(fù)樣本界定的閾值,但是當(dāng)閾值取0.5時(shí)會(huì)有較多的誤檢,因?yàn)?.5的閾值會(huì)使得正樣本中有較多的背景,這是較多誤檢的原因;
(b)用0.7的IOU閾值可以減少誤檢,但檢測(cè)效果不一定最好,主要原因在于IOU閾值越高,正樣本的數(shù)量就越少,因此過擬合的風(fēng)險(xiǎn)就越大。
本文解決的重要思想是每一個(gè)單獨(dú)的detector只對(duì)一個(gè)單獨(dú)的IOU(原文稱quality level)進(jìn)行優(yōu)化. 此前有類似的工作, 但本文的思想與其不同, 此前是對(duì)FP rate優(yōu)化, 本文是對(duì)一個(gè)給定的IOU閾值優(yōu)化.
(c)和(d)中的曲線是用來描述localization performance,其中橫坐標(biāo)表示輸入proposal和ground truth的IOU值,縱坐標(biāo)表示輸出的proposal和ground truth的IOU值。紅、綠、藍(lán)3條曲線代表訓(xùn)練檢測(cè)模型時(shí)用的正負(fù)樣本標(biāo)簽的閾值分別是0.7、0.6、0.5。從(c)可以看出,當(dāng)一個(gè)檢測(cè)模型采用某個(gè)閾值(假設(shè)u=0.6)來界定正負(fù)樣本時(shí),那么當(dāng)輸入proposal的IOU在這個(gè)閾值(u=0.6)附近時(shí),該檢測(cè)模型比基于其他閾值訓(xùn)練的檢測(cè)模型的效果要好。可以得出以下結(jié)論:
- 只有proposal自身的閾值和訓(xùn)練器訓(xùn)練用的閾值較為接近的時(shí)候,訓(xùn)練器的性能才最好。
- 如果兩個(gè)閾值相距比較遠(yuǎn),就會(huì)存在mismatch問題
- 單一閾值訓(xùn)練出的檢測(cè)器效果非常有限,單一閾值不能對(duì)所有的Proposals都有很好的優(yōu)化作用。
那么很自然地想到能不能直接用較大的閾值(比如u=0.7)來訓(xùn)練檢測(cè)模型呢?這樣是不行的,從(d)顯示,當(dāng)RPN輸出的proposal的IOU較小時(shí),閾值u=0.5的RCNN檢測(cè)器的效果要優(yōu)于閾值u=0.6的RCNN檢測(cè)器,當(dāng)RPN輸出的proposal的IOU較大時(shí)(接近0.6左右),效果相反。通常,單個(gè)IOU閾值的檢測(cè)器處理其他級(jí)別(IOU閾值和proposal與ground truth的IOU相差較大,不在同一個(gè)level)不一定是最佳的。
這些觀察表明,更高質(zhì)量的檢測(cè)要求檢測(cè)器與其處理的假設(shè)之間的質(zhì)量匹配更緊密,說的通俗一點(diǎn)就是,閾值高的檢測(cè)器要求RPN輸出的proposal與Ground truth的IOU也要高。
但是為了提高檢測(cè)器的質(zhì)量,僅在訓(xùn)練期間提高閾值u是不夠的。。從(d)中u = 0.7的檢測(cè)器可以看出,這會(huì)降低檢測(cè)性能。問題在于,從proposal檢測(cè)器出來的假設(shè)存在嚴(yán)重失衡(正負(fù)比例失衡,滿足閾值條件的正樣本數(shù)量很少),這種情況下容易導(dǎo)致過擬合。另一個(gè)原因就是inference時(shí)的mismatch問題。inference時(shí)RPN產(chǎn)生的proposal與ground truth一般不會(huì)很高,當(dāng)檢測(cè)器的網(wǎng)絡(luò)的IOU閾值設(shè)的很高的時(shí)候,就會(huì)存在mismatch。
因此這條路是走不通的,所以就有了這篇文章的cascade R-CNN,簡(jiǎn)單講cascade R-CNN是由一系列的檢測(cè)模型組成,每個(gè)檢測(cè)模型都基于不同IOU閾值的正負(fù)樣本訓(xùn)練得到,前一個(gè)檢測(cè)模型的輸出作為后一個(gè)檢測(cè)模型的輸入,因此是stage by stage的訓(xùn)練方式,而且越往后的檢測(cè)模型,其界定正負(fù)樣本的IOU閾值是不斷上升的。
為什么要設(shè)計(jì)成cascade R-CNN這種級(jí)聯(lián)結(jié)構(gòu)呢?
一方面:從(c)可以看出用不同的IOU閾值訓(xùn)練得到的檢測(cè)模型對(duì)不同IOU的輸入proposal的效果差別較大,因此希望訓(xùn)練每個(gè)檢測(cè)模型用的IOU閾值要盡可能和輸入proposal的IOU接近。另一方面:可以看(c)中的曲線,三條彩色曲線基本上都在灰色曲線以上,這說明對(duì)于這三個(gè)閾值而言,輸出IOU基本上都大于輸入IOU。那么就可以以上一個(gè)stage的輸出作為下一個(gè)stage的輸入,這樣就能得到越來越高的IOU。總之,很難讓一個(gè)在指定IOU閾值界定的訓(xùn)練集上訓(xùn)練得到的檢測(cè)模型對(duì)IOU跨度較大的proposal輸入都達(dá)到最佳,因此采取cascade的方式能夠讓每一個(gè)stage的detector都專注于檢測(cè)IOU在某一范圍內(nèi)的proposal,因?yàn)檩敵鯥OU普遍大于輸入IOU,因此檢測(cè)效果會(huì)越來越好。
3. Object Detection
作者首先給了一張當(dāng)時(shí)比較流行的方法示意圖, 此圖后文用到多次, 我們稱之為結(jié)構(gòu)圖, 各大寫字母含義圖中也給出解釋:
(a)是Faster RCNN,因?yàn)閠wo stage類型的object detection算法基本上都基于Faster RCNN,所以這里也以該算法為基礎(chǔ)算法。
(b)是迭代式的bbox回歸,從圖也非常容易看出思想,就是前一個(gè)檢測(cè)模型回歸得到的bbox坐標(biāo)初始化下一個(gè)檢測(cè)模型的bbox,然后繼續(xù)回歸,這樣迭代三次后得到結(jié)果。(c)是Integral Loss,表示對(duì)輸出bbox的標(biāo)簽界定采取不同的IOU閾值,因?yàn)楫?dāng)IOU較高時(shí),雖然預(yù)測(cè)得到bbox很準(zhǔn)確,但是也會(huì)丟失一些bbox。
(d)就是本文提出的cascade-R-CNN。cascade-R-CNN看起來和(b)這種迭代式的bbox回歸以及(c)這種Integral Loss很像,和(b)最大的不同點(diǎn)在于cascade-R-CNN中的檢測(cè)模型是基于前面一個(gè)階段的輸出進(jìn)行訓(xùn)練,而不是像(b)一樣3個(gè)檢測(cè)模型都是基于最初始的數(shù)據(jù)進(jìn)行訓(xùn)練,而且(b)是在驗(yàn)證階段采用的方式,而cascade-R-CNN是在訓(xùn)練和驗(yàn)證階段采用的方式。和(c)的差別也比較明顯,cascade R-CNN中每個(gè)stage的輸入bbox是前一個(gè)stage的bbox輸出,而(c)其實(shí)沒有這種refine的思想,僅僅是檢測(cè)模型基于不同的IOU閾值訓(xùn)練得到而已。
3.1 Bounding Box Regression
我們知道bbox對(duì)于所框選的圖片塊 xxx 通常由四個(gè)坐標(biāo)構(gòu)成: b=(bx,by,bw,bh)\text{b} = (b_{x},b_{y},b_{w},b_{h})b=(bx?,by?,bw?,bh?), bbox regression就是將這個(gè)預(yù)測(cè)的bbox對(duì)實(shí)際bbox ggg 進(jìn)行regress, 這個(gè)過程借助regressor f(x,b)f(x,b)f(x,b) 進(jìn)行, 因此最終就是優(yōu)化這樣一個(gè)函數(shù):
Rloc[f]=∑i=1NLloc(f(xi,bi),gi)R_{loc}[f] = \sum \limits_{i = 1}^{N}L_{loc}(f(x_{i},b_{i}),g_{i})Rloc?[f]=i=1∑N?Lloc?(f(xi?,bi?),gi?)
其中 LlocL_{loc}Lloc? 在R-CNN是一個(gè) L2L_{2}L2? loss, 而在Fast R-CNN, 是一個(gè) L1L_{1}L1? loss. 為了使預(yù)測(cè)盡可能與實(shí)際接近, LlocL_{loc}Lloc? 實(shí)際操作一個(gè)距離向量:
Δ=(δx,δy,δw,δh)\Delta = (\delta _{x},\delta _{y},\delta _{w},\delta _{h}) Δ=(δx?,δy?,δw?,δh?)
其中:
δx=(gx?bx)/bwδy=(gy?by)/bhδw=log(gw/bw)δh=log(gh/bh)\delta _{x} = (g_{x}?b_{x})/ b_{w}\:\delta _{y} = (g_{y}?b_{y})/ b_{h}\:\delta _{w} = log(g_{w}/ b_{w})\:\delta _{h} = log(g_{h}/ b_{h}) δx?=(gx??bx?)/bw?δy?=(gy??by?)/bh?δw?=log(gw?/bw?)δh?=log(gh?/bh?)
想要指出的是, bbox regression中一般b差異不大, 那么就會(huì)使 LlocL_{loc}Lloc? 很小, 為了提升他的effectiveness, 那么一般會(huì)使其歸一化 N(0,1)\text{ }N(0,1)?N(0,1), 也就是 δx′=(δx?μ)/σx\delta _{x}^{′} = (\delta _{x}?\mu )/ \sigma _{x}δx′?=(δx??μ)/σx?.
此前有工作argue單獨(dú)用一次regression step of f定位精度不夠, 因此他們就重復(fù)進(jìn)行f regress:
f′(x,b)=f°f°?°f(x,b)f^{′}(x,b) = f \circ f \circ ? \circ f(x,b) f′(x,b)=f°f°?°f(x,b)
即所謂迭代bbox regression(iterative bounding box regression), 此方法對(duì)應(yīng)上圖中(b), 但此方法還是有兩個(gè)問題:
從第一張圖(c)的實(shí)驗(yàn)可以知道基于不同IOU閾值訓(xùn)練的檢測(cè)模型對(duì)不同IOU的proposal輸入效果差別比較大,因此如果每次迭代都用基于相同IOU閾值的訓(xùn)練數(shù)據(jù)訓(xùn)練得到的檢測(cè)模型,那么當(dāng)輸入proposal的IOU不在你訓(xùn)練檢測(cè)模型時(shí)IOU值附近時(shí),效果不會(huì)有太大提升。regressorf 是在0.5的閾值訓(xùn)練, 對(duì)于更高閾值的proposal, regressor欠優(yōu)化, 對(duì)于IOU大于0.85的proposal抑制尤為明顯.
每次迭代之后的分布都在明顯變化, 很可能初始分布較好, 但經(jīng)過幾次迭代之后反而表現(xiàn)更差了. 下圖給出一例。下圖是關(guān)于迭代式bbox回歸在不同階段的四個(gè)回歸值分布情況(藍(lán)色點(diǎn)),可以看出在不同階段這4個(gè)值得分布差異較大,對(duì)于這種情況,一成不變的檢測(cè)模型顯然難以在這種改變中達(dá)到最優(yōu)效果。
正因?yàn)槠涮匦? 此方法需要一些后期處理. 此方法因此也是不穩(wěn)定的, 通常迭代超過兩次以后基本再無太大變化.
3.2 Classification
和先前的方法基本不變, 分類時(shí)對(duì)于proposal分成 M+1M + 1M+1 類, 其中第0類是bg, 預(yù)測(cè)結(jié)果 KaTeX parse error: Expected 'EOF', got '\right' at position 20: …}(x) = p(y = k|\?r?i?g?h?t?.x), 其中 yyy 是指被預(yù)測(cè)對(duì)象類別, 那么最終得到被優(yōu)化的函數(shù):
Rcls[h]=∑i=1NLcls(h(xi),yi)R_{cls}[h] = \sum \limits_{i = 1}^{N}L_{cls}(h(x_{i}),y_{i}) Rcls?[h]=i=1∑N?Lcls?(h(xi?),yi?)
這里 lclsl_{cls}lcls? 是經(jīng)典交叉熵?fù)p失.
3.3 Detection Quality
和以前一樣, 當(dāng) proposal IOU 大于某個(gè)閾值, 則預(yù)測(cè)label y, 否則為bg(label y = 0). IOU設(shè)置高或低的優(yōu)缺點(diǎn)此前已經(jīng)講過, 此前有通過結(jié)構(gòu)圖中?的做法對(duì)多l(xiāng)evel的輸出計(jì)算損失并優(yōu)化:
Lcls(h(x),y)=∑u∈ULcls(hu(x),yu)L_{cls}(h(x),y) = \sum \limits_{u \in U}L_{cls}(h_{u}(x),y_{u}) Lcls?(h(x),y)=u∈U∑?Lcls?(hu?(x),yu?)
U就是多IOU閾值. 因此所有classifiers在推理過程中一起使用, 但有個(gè)關(guān)鍵問 題是不同classifier接收的positives的數(shù)量不同! 在下圖中的左圖就是這種情況, 首先高IOU樣本數(shù)量太少, 很容易過擬合; 其次高預(yù)設(shè)IOU classifier又不得不處理眾多不適宜的第IOU樣本. 另外這張圖也請(qǐng)牢記, 我們稱之為分布圖.
cascade-R-CNN在不同階段預(yù)測(cè)得到的proposal的IOU值分布Cascade R-CNN 和Integral Loss比較
Integral Loss共用pooling,只有一個(gè)stage,但有3個(gè)不共享的H,每個(gè)H處都對(duì)應(yīng)不同的IoU閾值。Integral Loss存在的問題:
- 我們從上圖 proposal分布可以看到,第一個(gè)stage的輸入IoU的分布很不均勻,高閾值proposals數(shù)量很少,導(dǎo)致負(fù)責(zé)高閾值的detector很容易過擬合。
- 此外在inference時(shí),3個(gè)detector的結(jié)果要進(jìn)行ensemble,但是它們的輸入的IoU大部分都比較低,這時(shí)高閾值的detector也需要處理低IoU的proposals,它就存在較嚴(yán)重的mismatch問題,它的detector效果就很差了。
4. Cascade R-CNN
結(jié)構(gòu)如結(jié)構(gòu)圖所示.
Cascaded Bounding Box Regression
既然單個(gè)classifier很難適應(yīng)多IOU, 那么作者就設(shè)計(jì)了順序的多個(gè)classifier, 與iterative bounding box regression相對(duì)應(yīng), 本文的結(jié)構(gòu):
f′(x,b)=fT°fT?1°?°f1(x,b)f^{′}(x,b) = f_{T} \circ f_{T?1} \circ ? \circ f_{1}(x,b) f′(x,b)=fT?°fT?1?°?°f1?(x,b)
這里每個(gè) ftf_{t}ft? 都是預(yù)優(yōu)化過的,
它與iterative bounding box regression(IBBR for short)的不同有以下幾點(diǎn):
- IBBR是對(duì)同一個(gè)網(wǎng)絡(luò)重復(fù)迭代優(yōu)化, cascaded regression是通過resample使每一級(jí)輸出都能被下級(jí)使用.
- cascaded regressor是既用于訓(xùn)練又用于推理, 那么訓(xùn)練集和推理集就不會(huì)有不匹配的情況了.
- 每一級(jí)輸出需要resample, 其后對(duì)每一級(jí)都會(huì)進(jìn)行優(yōu)化而不是向IBBR一樣只是最終相當(dāng)于對(duì)輸入優(yōu)化.
我想解釋一下, 為什么輸入為低IOU最后還會(huì)優(yōu)出適應(yīng)較高IOU的regressor, 這利用到全文第二張圖的左圖, 我再貼出來一邊便于觀察:
左圖中我們可以看出輸出在大多數(shù)情況都是好于輸入的, 那么我們逐級(jí)遞增地設(shè)置regressor, 最終輸出的也就是單一regressor幾乎不可能達(dá)到的高IOU.
Cascade Detection
在分布圖中我們可以發(fā)現(xiàn), 每一階段處理之后分布重心都會(huì)向高IOU移動(dòng),這樣有兩個(gè)好處:
在每個(gè)階段 ttt, R-CNN都要對(duì)classifierht hth_{t}ht? 和regressorftftf_{t}ft?在閾值 ut,ut>ut?1u^{t},u^{t} > u^{t?1}ut,ut>ut?1 的狀態(tài)下優(yōu)化, loss為:
L(xt,g)=Lcls(ht(xt),yt)+λ[yt≥1]Lloc(ft(xt,bt),g)L(x^{t},g) = L_{cls}(h_{t}(x^{t}),y^{t}) + \lambda [y^{t} \geq 1]L_{loc}(f_{t}(x^{t},b^{t}),g) L(xt,g)=Lcls?(ht?(xt),yt)+λ[yt≥1]Lloc?(ft?(xt,bt),g)
其中 bt=ft?1(xt?1,bt?1)b^{t} = f_{t?1}(x^{t?1},b^{t?1})bt=ft?1?(xt?1,bt?1), g是 xtx^{t}xt 的ground truth. λ\lambdaλ 是調(diào)節(jié)參數(shù). [yt≥1][y^{t} \geq 1][yt≥1] 是指只有不是bg時(shí)才計(jì)算 LlocL_{loc}Lloc?.
Experimental Results
這里只使用了水平翻轉(zhuǎn), 在沒有使用其他trick.
以下與各模型對(duì)比實(shí)驗(yàn), 因?yàn)閮?nèi)容都比較直觀, 以后可能不會(huì)補(bǔ)充對(duì)他們的分析.
cascade R-CNN和Iterative bbox、Integral loss的對(duì)比。
COCO數(shù)據(jù)集上的提升確實(shí)非常明顯。主要通過在現(xiàn)有的two stage算法上添加cascade思想后的對(duì)比結(jié)果,另外還對(duì)比了訓(xùn)練、測(cè)試時(shí)間、參數(shù)量等信息。
Conclusion
正如一開始提到的兩點(diǎn)問題, 作者在本文也是在盡力解決這些問題:
參考:
- https://blog.csdn.net/u014380165/article/details/80602027
- https://www.cnblogs.com/edbean/p/11306577.html
- https://zhuanlan.zhihu.com/p/92779720
- https://zhuanlan.zhihu.com/p/42553957
總結(jié)
以上是生活随笔為你收集整理的深度学习之 Cascade R-CNN的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干货|软件测试简历的编写以及注意事项
- 下一篇: 梳理百年深度学习发展史-七月在线机器学习