目標(biāo)檢測(cè):Nms-Free時(shí)代
作者丨半日閑心@知乎(已授權(quán))
來(lái)源丨h(huán)ttps://zhuanlan.zhihu.com/p/453773468
編輯丨極市平臺(tái)
導(dǎo)讀
過(guò)去,無(wú)需nms的目標(biāo)檢測(cè),很美很純粹,但幾乎沒(méi)人想過(guò)應(yīng)用到業(yè)務(wù)上。然而經(jīng)過(guò)近些年的發(fā)展,性能甚至超過(guò)了nms-base。站在2021年的尾巴,回顧nms-free的發(fā)展,期待2022有更好的發(fā)展。
本文脈絡(luò)
什么是nms,為什么需要nms
什么是nms-free,有啥好處?
nms-free的發(fā)展歷程
nms-free的現(xiàn)狀與未來(lái)
什么是nms,為什么需要nms
nms是檸檬樹(shù)的簡(jiǎn)稱,懂得都懂,不懂請(qǐng)退出吧。nms原理請(qǐng)自行搜索。為啥需要檸檬樹(shù)呢?
因?yàn)镃NN做預(yù)測(cè)的時(shí)候,往往會(huì)對(duì)同一個(gè)目標(biāo)產(chǎn)生多個(gè)proposal,因此需要nms過(guò)濾掉多余的預(yù)測(cè)框。
產(chǎn)生duplicate bbox的原因有CNN自身結(jié)構(gòu)的原因,有時(shí)候feature map上很難決定相鄰的兩個(gè)特征點(diǎn)誰(shuí)表示目標(biāo)誰(shuí)表示背景。尤其在一些目標(biāo)邊緣比較模糊的時(shí)候,如下圖。另一方面,既然會(huì)產(chǎn)生duplicate bbox,還不如擁抱duplicate,通過(guò)規(guī)則讓一個(gè)目標(biāo)匹配多個(gè)proposal來(lái)增加正樣本數(shù)量,使訓(xùn)練的前景與背景更加均衡,最后理直氣壯用nms過(guò)濾就好了。Bounding Box Regression with Uncertainty for Accurate Object Detection. CVPR2019
圖片來(lái)源:Bounding Box Regression with Uncertainty for Accurate Object Detection. CVPR2019[1]
此處統(tǒng)一術(shù)語(yǔ)。模型輸出的框是候選框(proposal)。proposal會(huì)預(yù)測(cè)一個(gè)目標(biāo)稱為instance。人工標(biāo)注的框?yàn)镚T。訓(xùn)練階段,如何讓具體哪個(gè)proposal與哪個(gè)GT匹配的策略稱為label assign,上面提到一個(gè)GT只跟一個(gè)proposal匹配稱為one-to-one(o2o),一個(gè)GT匹配多個(gè)proposal的方法稱為many-to-one(m2o)。
so,要想實(shí)現(xiàn)nms-free,label assign必須是one-to-one的。
什么是nms-free,有啥好處?
nms-free就是不需要nms的目標(biāo)檢測(cè),甚至可以認(rèn)為沒(méi)有后處理的目標(biāo)檢測(cè)。優(yōu)勢(shì)1.整體框架簡(jiǎn)潔,更少超參數(shù)。2.目標(biāo)之間重疊嚴(yán)重的話就無(wú)法用了。
但目前的主流依然存在nms,足以說(shuō)明nms的優(yōu)勢(shì)大于劣勢(shì)。很多場(chǎng)景的目標(biāo)檢測(cè),目標(biāo)是稀疏的,此時(shí)many-to-one + nms組合簡(jiǎn)直不要太爽。
出現(xiàn)重疊怎么辦?忽略就行,出現(xiàn)概率很低啦。教育甲方不能這樣玩。甲方要退錢了?RotateAnchor[2]改一波。
Nice。甲方說(shuō)不可描述場(chǎng)景依然漏檢,還發(fā)來(lái)了圖片[色迷迷]。
此時(shí),nms黨不慌不忙的掏出了《Detection in Crowded Scenes: One Proposal, Multiple Predictions》[3]。每個(gè)proposal預(yù)測(cè)K個(gè)instance,意思是該proposal預(yù)測(cè)的地方可能有K個(gè)instance高度重疊。上圖K>=2即可。
是不是有點(diǎn)類似anchor-base一個(gè)特征點(diǎn)有k個(gè)anchor,但anchor形狀差異很大,人工匹配規(guī)則也無(wú)法解決高度重疊場(chǎng)景。一個(gè)proposal預(yù)測(cè)k個(gè)instance可看作對(duì)anchor做了修改。匹配的規(guī)則也做了修改:
b_i是第i個(gè)proposal,L_cls和L_reg分別是label交叉熵和bbox回歸的loss。L(b_i)可以看作是EMDLoss(推土機(jī)距離),距離最小就是匹配方案。
由于一個(gè)proposal包含了多個(gè)instance,所以nms也做了相應(yīng)的修改,稱為set-nms,出自同一個(gè)proposal的k個(gè)instance必然非同一目標(biāo),iou再高也不能干掉。
等等,nms-base好像沒(méi)啥毛病了,增加后處理算啥毛病。標(biāo)題起錯(cuò)了,”who care nms-free”。
有一說(shuō)一,nms使檢測(cè)算法不夠直觀、簡(jiǎn)單,更像tradeoff的行為[挽尊]。nms-free簡(jiǎn)單的結(jié)構(gòu),降低了det學(xué)習(xí)的門(mén)檻。
nms-free的發(fā)展歷程
此處挑比較有意思的論文介紹。如有遺漏或指正,歡迎留言。
《End-to-end people detection in crowded scenes》CVPR2016[4]
在Faster-rcnn、YOLOv1問(wèn)世的2015年,這篇LSTM跨界搞目標(biāo)檢測(cè)的論文顯得有些默默無(wú)聞。
該論文的主要思路是CNN作為enconder,LSTM作為decoder,把目標(biāo)檢測(cè)看成序列一個(gè)instance一個(gè)instance輸出,每個(gè)instance包含置信度和bbox,當(dāng)輸出的置信度<0.5,則看作停止符停止往下預(yù)測(cè)。
那如何訓(xùn)練?label assign如何做?由于LSTM decoder的機(jī)制,instance按順序輸出,而GT無(wú)順序。作者嘗試了讓GT按照從左到右等不同規(guī)則排序,并與排序的instance做匹配。
最后作者使用更好的策略,把instances與GTs匹配看成二分圖匹配問(wèn)題,并通過(guò)匈牙利算法確定最佳的匹配。具體算法自行搜索。簡(jiǎn)單的解析是:instance與GT做one-to-one匹配并求instance與GT的IoU,統(tǒng)計(jì)IoU之和。不同的匹配方案,IoU之和不同。通過(guò)匈牙利算法找到IoU之和最大的匹配方案,也就是本論文的最終方案。此算法后來(lái)幾乎成了nms-free做label assign的標(biāo)準(zhǔn)解法。
《Relation Networks for Object Detection》CVPR2018[5]
作者借鑒了隔壁NLP的《attention is all your need》的思想,在backbone里面融合self-attention,思路是每個(gè)proposal通過(guò)attention了解圖片中存在什么proposal,從而知道自身處于什么場(chǎng)景,提升準(zhǔn)確率。例如一個(gè)屏幕,在沙發(fā)旁邊是電視,在鍵盤(pán)旁邊是顯示器。如今沒(méi)人會(huì)懷疑self-attention在cv的作用。
另外,論文提出了Duplicate removal network(DRN)代替nms,實(shí)現(xiàn)端到端訓(xùn)練。參考下圖,DRN的思路是匹配到同一個(gè)GT的proposal,只取iou最大的,其他都是duplicate。DRN模塊里面有個(gè)attention,讓匹配到同一個(gè)GT的proposal只有iou最大的那個(gè)s1是1,其余是0。score是前景置信度,0-1之間,這里做了rank embed,根據(jù)score的大小降序排序,賦值范圍是[1,N]。
《End-to-End Object Detection with Transformers》ECCV2020[6]
鼎鼎大名的DETR,借鑒了隔壁NLP的transformer,跟上文提到的《End-to-end people detection in crowded scenes》基于一樣的方式,基本就是把LSTM部分改成了transformer。由于transformer同時(shí)輸出結(jié)果的特性,作者默認(rèn)DETR固定輸出100個(gè)預(yù)測(cè)結(jié)果,如果沒(méi)有那么多目標(biāo),則多出來(lái)的預(yù)測(cè)結(jié)果為空。同樣通過(guò)匈牙利算法做label assignment。
后面基于transformer的XXDert/SwinXX不一一介紹了。coco的最高記錄不斷被刷新,可見(jiàn)transformer之強(qiáng)悍。
《Pix2seq: A Language Modeling Framework for Object Detection》[7]
此處不得不提pix2seq,已經(jīng)不是借鑒隔壁NLP了,是把det套在NLP上。把GT的類別,坐標(biāo)都看作詞匯,一個(gè)一個(gè)輸出。把bbox的位置離散化成“詞匯表”,例如x方向的位置,離散成600個(gè)詞匯,每個(gè)詞匯表示圖片中x方向的特定位置。Loss函數(shù)統(tǒng)一只用交叉熵。
表現(xiàn)雖然一般,但更加表明了序列模型的通用性,不同屬性構(gòu)造成序列進(jìn)行預(yù)測(cè)。
上面幾篇論文都是從NLP借鑒過(guò)來(lái),LSTM - attention - transformer。他們都有一個(gè)特點(diǎn),backbone能捕獲全局特征,one-to-one做label assign沒(méi)有任何違和感。而CNN這邊many-to-one的label assign做了這么多年,看到transformer搞det效果不錯(cuò),結(jié)構(gòu)還優(yōu)雅。也做了類似的嘗試。
《End-to-End Object Detection with Fully Convolutional Network》CVPR2021[8]
從標(biāo)題就看出對(duì)DETR的致敬,簡(jiǎn)稱DeFCN。many2one的匹配策略是無(wú)法擺脫nms的關(guān)鍵,只有采用one2one的匹配策略才能擺脫nms。
POTO(Prediction-aware One-To-One)的label assign與DETR設(shè)計(jì)幾乎一樣。
Π是所有預(yù)測(cè)instance與GT的one2one匹配方案的集合,Π_hat是這個(gè)集合里面是Q之和最大的方案。Spatial prior是GT外接框所對(duì)應(yīng)的feature map區(qū)域=1,其他區(qū)域=0,人為的限定了匹配的proposal必須在GT框內(nèi)找。classification是預(yù)測(cè)類別的交叉熵,regression是定位的iou值。α是超參數(shù)。通過(guò)匈牙利算法找到最佳的Π_h。
然而融合spatial prior、classification、regression做label assignment并不是本論文的首次提出,AutoAssign就曾融合多種信息做many2one的label assign,效果讓人十分驚艷。
作者意識(shí)到卷積網(wǎng)絡(luò)結(jié)構(gòu)天然更適合many2one,因?yàn)閛ne2one的匹配讓feature map變得sharp,激活的feature與其四周有明顯的變化,不然容易出現(xiàn)duplicated predictions,顯然attention結(jié)構(gòu)更加擅長(zhǎng)。針對(duì)CNN不夠sharp,作者提出了3D Max Filtering(3DMF),通過(guò)max pooling抑制周圍Q得分也很高的proposal。
另外one2one帶來(lái)更少的正樣本使更難收斂,作者增加了一個(gè)one-to-many auxiliary loss(Aux Loss)。
類似基于FCN的nms-free的工作還有OneNet[9],PSS[10]這里不展開(kāi)介紹了。
nms-free的現(xiàn)狀與未來(lái)
nms-free已經(jīng)不單單只有結(jié)構(gòu)簡(jiǎn)單,精度也追上來(lái)了。det的工程研發(fā)變得越來(lái)越簡(jiǎn)單。從結(jié)構(gòu)上,類似模板匹配的CNN,天然不適用于one2one的匹配方法,本文介紹了RelationNet和DeFCN對(duì)此問(wèn)題的兩個(gè)解決方案?;赥ransformer的模型天然沒(méi)有這樣的問(wèn)題。沒(méi)有后處理的det未來(lái),也許FCN已經(jīng)支撐不起來(lái)了,也許未來(lái)更多是CNN + transformer/MLP/XX的方法,CNN慢慢成為特征提取或者篩選的手段。
考慮工程落地,transformer頻繁reshape對(duì)一些硬件不太友好。純CNN的模型結(jié)構(gòu)依然是首選,而純CNN的det,nms還是很難被取代。
參考
^Bounding Box Regression with Uncertainty for Accurate Object Detection. CVPR2019 https://readpaper.com/paper/2962677013
^Arbitrary-Oriented Scene Text Detection via Rotation Proposals https://readpaper.com/paper/3106228955
^Detection in Crowded Scenes: One Proposal, Multiple Predictions .CVPR2020 https://readpaper.com/paper/3035323039
^End-to-end people detection in crowded scenes. CVPR2016 https://readpaper.com/paper/607748843
^Relation Networks for Object Detection. CVPR2018 https://readpaper.com/paper/2964080601
^End-to-End Object Detection with Transformers. ECCV2020 https://readpaper.com/paper/3096609285
^Pix2seq: A Language Modeling Framework for Object Detection https://readpaper.com/paper/3199245537
^End-to-End Object Detection with Fully Convolutional Network. CVPR2021 https://readpaper.com/paper/3111272232
^What Makes for End-to-End Object Detection?. ICML2021 https://readpaper.com/paper/3179092682
^Object Detection Made Simpler by Eliminating Heuristic NMS https://readpaper.com/paper/3125728987
本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。