最近目標(biāo)檢測新范式匯總SparseRCNN,OneNet,DeFCN等

極市導(dǎo)讀
?本文匯總了近期新的目標(biāo)檢測算法范式的相關(guān)論文,內(nèi)容包括SparseRCNN,OneNet,DeFCN,作者對每篇論文進行了自己的解讀并給出了相關(guān)的見解和想法。>>【重磅】珠港澳首屆AI人工智能大會將在珠海召開,免費門票限時領(lǐng)取中!
最近有許多新的目標(biāo)檢測范式出現(xiàn),我想著這些論文或多或少有著很強的相同之處,比如他們都是后現(xiàn)代的目標(biāo)檢測方法,不僅僅要超越Anchor-Based的古老目標(biāo)檢測,還要革了Anchor-Free的命,從此目標(biāo)檢測朝著簡單易懂真正E2E的方向邁進,于是乎有必要來做一個整理,把這些算法放到一篇文章里面來介紹,也當(dāng)是個人閱讀這些論文和代碼的一個小總結(jié)吧,拋磚引玉,期待更多的后來之士有更加獨到的見解。
近幾年來,目標(biāo)檢測是發(fā)展的很快,去年很火的Anchor-Free的方法提出了一系列不依賴于Anchor的目標(biāo)檢測范式,比如CenterNet,它結(jié)構(gòu)簡單,輸入輸出通熟易懂,同時也保持著較高的準(zhǔn)確率,再比如FCOS,也是不可多得的創(chuàng)新性目標(biāo)檢測思路,縱然這些算法都摒棄了古老的Anchor思維,狠狠的把前輩們按在沙灘上摩擦了一陣子,但長江后浪推前浪,一浪更比一浪強,今年新出的這波新范式里面,大家不僅僅要把Anchor給你去掉,連煩人的NMS也得給你革掉!其中最具代表性的就是這篇SparseRCNN了,人家不僅僅去掉了Anchor,還把2Stage里面的Proposal,以及many2one的assigment也去掉了,更厲害的是,由于縮小了這些建議框的集合,加上2stage的精修,它可以做到后處理不需要NMS直接得到目標(biāo)框!數(shù)據(jù)勝于一切,SparseRCNN可以做到Resnet50 backbone 最高達45的mAP,這不可謂不強啊!而且速度還可以保持在一個較快的速度!
順著這個思路下去,明年,是不是會有基于E2E,沒有NMS的更多的目標(biāo)檢測、實力分割的算法出現(xiàn)呢?到時候又快又好的instance segmentation模型就不再是夢想了!
讓我們拭目以待吧!現(xiàn)在要做的就是耐心的閱讀完本篇論文,我會在末尾做一個展望和總結(jié),干貨總是在最后,當(dāng)然,此時你可以把手指移到左下方,點個贊,完了再吐槽一句,做一個文明的吃瓜群眾。
SparseRCNN
SparseRCNN這篇論文的motivation其實很簡單,就是革掉2stage里面的Proposal和NMS,我估計作者一開始可能并沒有想到效果這么好,但是去掉了海量的Proposal之后發(fā)現(xiàn)生成的框效果竟然可以直接用,結(jié)果就有了這么一個一石二鳥的高品質(zhì)作品。不管怎么樣吧,做到這個效果的難度還是很大的。
讓我們來看看SparseRCNN到底做了什么事情。眾所周知,在2 stage算法里,最核心的部分,其實就是RPN的設(shè)計,RegionProposalNetwork部分,決定了你的整個模型的performance,這里你需要生成盡可能囊括所有目標(biāo)的候選框,才能讓結(jié)果盡可能的好,而這就涉及到Anchor的設(shè)計,Proposal的產(chǎn)出等等,這其實和one stage的Proposal generator類似,只不過是不同的算法系列具體的算法不同而已,而SRCNN做的,其實就是重新評估了這個過程,他們發(fā)現(xiàn),即使他們把RPN從幾千個boxes縮減到N,N可能為100這么小的數(shù),加之動態(tài)的學(xué)習(xí),也可以把這些個box變成質(zhì)量很高、幾乎囊括所有目標(biāo)的Proposal。
那么現(xiàn)在的問題就是: 如何去生成這些小的Proposal set?
作者提出直接通過一個 4d的矩陣去預(yù)測這些proposals,每個維度就是歸一化之后的中心點和w,h的數(shù)值,說到這里,恕我直言,這其實就是借鑒了Anchor-Free里面的思想了,最直接的就是FCOS的思想了。

這部分作者稱之為Learnable proposal. 其實我感覺就是一個anchor-free的粗框預(yù)測,但是呢,這個粗框的精度可能就比RPN的要高很多了。因為本來人家就可以用來生成一個很高質(zhì)量的框的嘛。至于這部分的loss是怎么計算的,得具體看看代碼才知道。
接下來就是第二階段,拿到了這個Proposal set之后,如何進一步生成最終的框呢?
接著作者引入了另外一個東西,proposal features, 這是個什么東西呢?如果你只是把這些box輸出到第二階段做位置精修,那么必然會丟失很多信息,因為你的輸入的只有位置呀,沒有語義。那么這個時候引入這個features就理所應(yīng)當(dāng)了。不僅僅如此,這個proposal features 的數(shù)目,和proposals是一樣。記住他們存在一一對應(yīng)的關(guān)系.
然后做什么呢?接著就是把這個位置坐標(biāo),和features輸入到后面做預(yù)測了。但是接下來,就是整篇文章最核心的內(nèi)容,也就是作者提出的這個Dynamic Head, 這年頭,一旦引入這個Dynamic這個詞,我腦海里面就想到兩點:
牛逼 部署很坑
我感覺這個也不例外,我們繼續(xù)深入看看,深入之后發(fā)現(xiàn),SRCNN會引入ROIAlign,來講features和box做對應(yīng),然后每個feature負責(zé)預(yù)測這個精修的坐標(biāo)信息,

我就在想,你這每個proposal都引入ROIAlign來做對齊,然后輸入conv來做cls和reg,這不會很浪費時間么?這個我沒有在論文里面找到答案,但是仔細看了下代碼的實現(xiàn),這部分實現(xiàn)其實不是很耗時:
# inst_interact.
pro_features = pro_features.view(nr_boxes, N, self.d_model).permute(1, 0, 2).reshape(1, N * nr_boxes, self.d_model)
pro_features2 = self.inst_interact(pro_features, roi_features)這個inst_interact 其實就是一個DynamicConv,似乎把所有的proposal features和摳出來的roi_features都丟到一個矩陣?yán)锩嫒ニ懔恕?br>
這個算法的大致脈絡(luò)就這些了,我總結(jié)下來,它的創(chuàng)新點其實顯而易見,除了論文中提到這些,我覺得這兩點也是值得墻裂借鑒的:
作者對標(biāo)的其實是DETR,這篇用transformer做目標(biāo)檢測的論文,而且對標(biāo)的恰恰就是object query這個部分,只不過論文里面用的是proposal feature + roiAlign來做的; 以前都是革1 stage的命,作者這次革了2 stage的命,雖然直觀感覺效果收益和復(fù)雜度不成正比。
所以總的來說,這篇paper還是很有借鑒意義的,通過2 stage的方式結(jié)束了nms時代,讓就如同我所說,這帶來的代價當(dāng)然是多出來的一個階段,同時也不可避免的引入了很多我們不喜歡的操作,比如ROIAlign。
我猜測這個思路繼續(xù)深挖下去,將會是把DETR的object query思想再次引入2 stage?亦或是把這個砍掉NMS的旗號發(fā)揚光大,直接基于one stage來開刀?讓我們拭目以待。
最后從工業(yè)界角度來評價一下:
不適合部署,不適合部署,不適合部署; 收益和復(fù)雜度不成正比,作為工業(yè)和商業(yè)用途來說,過于復(fù)雜; 但是不要NMS確實很香,不過話說回來,現(xiàn)在NMS帶來的lantency,在工業(yè)武裝到牙齒的業(yè)界,真的是一個bottleneck嗎?
OneNet
好像這篇文章也是PeizeSun大佬所作?HKU人才輩出啊!~觀測下來這篇文章的motivation其實是在強調(diào)classfication的loss對于one stage目標(biāo)檢測的重要性~,對于一個classfication loss設(shè)計的不夠好的one stage detector,最終可能會在后處理的時候出現(xiàn)很壞的結(jié)果。而文章提出了一個同時考慮box iou和classification 的loss。
我又仔細看了一下,作者的motivation其實還是想做一個e2e的 one stage detector,簡單來說,就是我上面說的SRCNN接下來要做的事情,而且作者確實也是按照這個思路做了。他認為他提出的這個classification cost幾乎是創(chuàng)造一個真正的e2e的one stage detector比較核心的東西。如果沒有它,就會導(dǎo)致最后產(chǎn)出很多多余的框,因而必須要使用nms才能去掉。

這張圖非常有意思,直觀的告訴你,創(chuàng)造一個真正的沒有nms的e2e的one stage detector,加上classification cost是多么的重要,不然的話,你設(shè)置一個很低的threshold,就是一堆框,設(shè)置一個較高的,直接就沒有框。
說到這里,我就有一個疑問了,到底什么是你說的這個classification cost?

論文里面提到的這個minimum cost方法,就是上面提到的classification cost?我認為是作者說的,每個正樣本只分配一個對應(yīng)的loss,其他的統(tǒng)統(tǒng)用負值來表示,這可能稱之為loss的分類對待。
DeFCN
還有一篇論文,我沒有具體的論文,貌似作者還沒有release,但是在Megvii的倉庫里有release,叫做DeFCN,感興趣的朋友去搜來看看。這篇文章其實也是在探究到底是什么東西導(dǎo)致了NMS?為什么會有這么一個東西產(chǎn)生?實際上是因為一對多的這么一個因素,導(dǎo)致的,作者也提出了一個基于FCOS的改進版本,可以去掉NMS,真正的做到E2E.
這篇文章看起來更厲害,但是木有太大的指標(biāo)超越,但是解決了一個有史以來一直困擾大家的點,其實本篇文章所涉及到的論文,都是在試圖去解決這個問題。
今年的目標(biāo)檢測,總結(jié)來說就是 Towards Real E2E Object Detector. 相信 明年會有更多的基于Yolo,EfficientDet等算法的去掉NMS的嘗試,到那時或許才能真正的匯集我們這些工業(yè)界的白嫖黨啦!
推薦閱讀
拋棄Anchor box和NMS,目標(biāo)檢測新范式開源:Sparse R-CNN 丟棄Transformer,F(xiàn)CN也可以實現(xiàn)E2E檢測 統(tǒng)一視角理解目標(biāo)檢測算法:最新進展分析與總結(jié)

