你的NMS該換了!Confluence:實(shí)現(xiàn)更準(zhǔn)、更強(qiáng)的目標(biāo)檢測
點(diǎn)擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)

本文提出了一種優(yōu)于NMS的非IoU替代方案,其在邊界框保留和抑制方面不依賴IoU或最大置信度得分。在YOLOv3、RetinaNet和Mask R-CNN等檢測器上實(shí)驗(yàn)證明,Confluence比NMS性能更強(qiáng),更可靠!
1 簡介
本文提出了一種在目標(biāo)檢測中的邊界框選擇和抑制任務(wù)中替代貪婪非極大值抑制(NMS)的新穎方法。它提出了Confluence,該方法不僅不依賴于置信度得分來選擇最佳邊界框,也不依賴于IoU來消除誤檢。其通過使用“曼哈頓距離”來選擇最接近群集中其他所有邊界框的邊界框,并刪除具有高度融合的相鄰框。
因此,Confluence與基于Greedy NMS及其變體具有根本不同的理論原理,Confluence代表了邊界框選擇和抑制的范式轉(zhuǎn)變。使用MS COCO和PASCAL VOC 2007數(shù)據(jù)集在RetinaNet,YOLOv3和Mask-RCNN上對Confluence進(jìn)行了實(shí)驗(yàn)驗(yàn)證。使用具有挑戰(zhàn)性的0.50:0.95 mAP評估指標(biāo),在每個檢測器和數(shù)據(jù)集上,mAP改善了0.3-0.7%,而召回率則提高了1.4-2.5%。此外,跨mAP閾值的靈敏度分析實(shí)驗(yàn)支持以下結(jié)論:Confluence比NMS更可靠。

2 致敬NMS-們
2.1、NMS誕生的必要性
大多數(shù)基于深度卷積神經(jīng)網(wǎng)絡(luò)(DCNN)的目標(biāo)檢測方法,包括RetinaNet、Faster-RCNN和Mask R-CNN,都生成不同大小和尺度的獨(dú)立類別的Region Proposals。一個分類網(wǎng)絡(luò)分配每個類具體的置信度分?jǐn)?shù)。通過建議的回歸來改具體坐標(biāo)位置。這些經(jīng)常匯聚到相同的感興趣區(qū)域(RoI),特別是當(dāng)對象檢測器對RoI中存在的對象非常有信心時。這將導(dǎo)致在圖像中感興趣的區(qū)域周圍聚集建議的邊界框,如圖1所示。

YOLO v3基于不同的范式。它沒有使用不同大小和尺度的滑動窗口,而是將圖像分割成多個部分,并為每個部分分配特定類的置信值。排除低置信區(qū)間,由高置信區(qū)間生成邊界框,使用NMS選擇最優(yōu)邊界框。與基于Region Proposal的網(wǎng)絡(luò)相比,這種方法產(chǎn)生的邊界框要少得多,因此效率更高。
非極大值抑制(NMS)的作用是通過選擇最佳的邊界框來代表每個對象進(jìn)而細(xì)化這些檢測,同時抑制假陽性。圖1演示了此步驟的必要性。它演示了應(yīng)用Greedy NMS之前RetinaNet的原始輸出,然后是通過NMS的輸出。Greedy NMS通常被認(rèn)為是解決這個問題的首選解決方案,并且經(jīng)常用于最先進(jìn)的對象檢測器,比如Retininet-Resnet50、Yolo-V3、Mask R-CNN、Faster R-CNN和R-FCN等。
NMS操作流程
NMS用于剔除圖像中檢出的冗余bbox,標(biāo)準(zhǔn)NMS的具體做法為:
step-1:將所有檢出的output_bbox按cls score劃分(如pascal voc分20個類,也即將output_bbox按照其對應(yīng)的cls score劃分為21個集合,1個bg類,只不過bg類就沒必要做NMS而已);
step-2:在每個集合內(nèi)根據(jù)各個bbox的cls score做降序排列,得到一個降序的list_k;
step-3:從list_k中top1 cls score開始,計(jì)算該bbox_x與list中其他bbox_y的IoU,若IoU大于閾值T,則剔除該bbox_y,最終保留bbox_x,從list_k中取出;
step-4:選擇list_k中top2 cls score(步驟3取出top 1 bbox_x后,原list_k中的top 2就相當(dāng)于現(xiàn)list_k中的top 1了,但如果step-3中剔除的bbox_y剛好是原list_k中的top 2,就依次找top 3即可,理解這么個意思就行),重復(fù)step-3中的迭代操作,直至list_k中所有bbox都完成篩選;
step-5:對每個集合的list_k,重復(fù)step-3、4中的迭代操作,直至所有l(wèi)ist_k都完成篩選;
以上操作寫的有點(diǎn)繞,不過如果理解NMS操作流程的話,再結(jié)合下圖,應(yīng)該還是非常好理解的;

def?nms(boxes,?scores,?overlap=0.5,?top_k=200):
????keep?=?torch.Tensor(scores.size(0)).fill_(0).long()
????if?boxes.numel()?==?0:
????????return?keep
????x1?=?boxes[:,?0]
????y1?=?boxes[:,?1]
????x2?=?boxes[:,?2]
????y2?=?boxes[:,?3]
????area?=?torch.mul(x2?-?x1,?y2?-?y1)????#?IoU初步準(zhǔn)備
????v,?idx?=?scores.sort(0)??#?sort?in?ascending?order,對應(yīng)step-2,不過是升序操作,非降序
????#?I?=?I[v?>=?0.01]
????idx?=?idx[-top_k:]??#?indices?of?the?top-k?largest?vals,依然是升序的結(jié)果
????xx1?=?boxes.new()
????yy1?=?boxes.new()
????xx2?=?boxes.new()
????yy2?=?boxes.new()
????w?=?boxes.new()
????h?=?boxes.new()
????#?keep?=?torch.Tensor()
????count?=?0
????while?idx.numel()?>?0:???#?對應(yīng)step-4,若所有pred?bbox都處理完畢,就可以結(jié)束循環(huán)啦~
????????i?=?idx[-1]??#?index?of?current?largest?val,top-1?score?box,因?yàn)槭巧虻模蟹祷豬ndex?=?-1的最后一個元素即可
????????#?keep.append(i)
????????keep[count]?=?i
????????count?+=?1????#?不僅記數(shù)NMS保留的bbox個數(shù),也作為index存儲bbox
????????if?idx.size(0)?==?1:
????????????break
????????idx?=?idx[:-1]??#?remove?kept?element?from?view,top-1已保存,不需要了~~~
????????#?load?bboxes?of?next?highest?vals
????????torch.index_select(x1,?0,?idx,?out=xx1)
????????torch.index_select(y1,?0,?idx,?out=yy1)
????????torch.index_select(x2,?0,?idx,?out=xx2)
????????torch.index_select(y2,?0,?idx,?out=yy2)
????????#?store?element-wise?max?with?next?highest?score
????????xx1?=?torch.clamp(xx1,?min=x1[i])???#?對應(yīng)?np.maximum(x1[i],?x1[order[1:]])?
????????yy1?=?torch.clamp(yy1,?min=y1[i])
????????xx2?=?torch.clamp(xx2,?max=x2[i])
????????yy2?=?torch.clamp(yy2,?max=y2[i])
????????w.resize_as_(xx2)
????????h.resize_as_(yy2)
????????w?=?xx2?-?xx1
????????h?=?yy2?-?yy1
????????#?check?sizes?of?xx1?and?xx2..?after?each?iteration
????????w?=?torch.clamp(w,?min=0.0)????#?clamp函數(shù)可以去查查,類似max、mini的操作
????????h?=?torch.clamp(h,?min=0.0)
????????inter?=?w*h
????????#?IoU?=?i?/?(area(a)?+?area(b)?-?i)?????
????????#?以下兩步操作做了個優(yōu)化,area已經(jīng)計(jì)算好了,就可以直接根據(jù)idx讀取結(jié)果了,area[i]同理,避免了不必要的冗余計(jì)算
????????rem_areas?=?torch.index_select(area,?0,?idx)??#?load?remaining?areas)
????????union?=?(rem_areas?-?inter)?+?area[i]?????#?就是area(a)?+?area(b)?-?i
????????IoU?=?inter/union??#?store?result?in?iou,#?IoU來啦~~~
????????#?keep?only?elements?with?an?IoU?<=?overlap
????????idx?=?idx[IoU.le(overlap)]???#?這一輪NMS操作,IoU閾值小于overlap的idx,就是需要保留的bbox,其他的就直接忽略吧,并進(jìn)行下一輪計(jì)算
????return?keep,?count
2.2、Soft-NMS
不同于在NMS中采用單一閾值,對與最大得分檢測結(jié)果M超過閾值的結(jié)果進(jìn)行抑制,其主要考慮Soft-NMS,對所有目標(biāo)的檢測得分以相應(yīng)overlap with M的連續(xù)函數(shù)進(jìn)行衰減。其偽代碼如下:

2.3、ConvNMS
其主要考慮IoU閾值設(shè)定得高一些,則可能抑制得不夠充分,而將IoU閾值設(shè)定得低一些,又可能多個ture positive被merge到一起。其設(shè)計(jì)一個卷積網(wǎng)絡(luò)組合具有不同overlap閾值的greedyNMS結(jié)果,通過學(xué)習(xí)的方法來獲得最佳的輸出?;A(chǔ)框架如下:

2.4、Pure NMS Network
考慮目標(biāo)間具有高遮擋的密集場景,其提出一個新的網(wǎng)絡(luò)架構(gòu)來執(zhí)行NMS。經(jīng)分析,檢測器對于每個目標(biāo)僅產(chǎn)生一個檢測結(jié)果有兩個關(guān)鍵點(diǎn)是必要的,一是一個loss懲罰double detections以告訴檢測器我們對于每個目標(biāo)僅需一個檢測結(jié)果,二是相鄰檢測結(jié)果的joint processing以使得檢測器具有必要的信息來分辨一個目標(biāo)是否被多次檢測。論文提出Gnet,其為第一個“pure”NMS網(wǎng)絡(luò)。Gnet圖示如下:

2.5、Greedy NMS
IoU本質(zhì)上是計(jì)算兩個邊界框的交集與并集的比率(交并比)。然后利用聚類中每個框的平均坐標(biāo)選擇一個最優(yōu)的框。目前很多檢測任務(wù)中采用了這種方法,以產(chǎn)生現(xiàn)在所稱的Greedy NMS。Greedy NMS首先根據(jù)候選邊界框的置信度分?jǐn)?shù)從最高到最低進(jìn)行排序,從而提高了準(zhǔn)確性。選擇置信值最高的邊界框,然后用所選框抑制所有IoU超過預(yù)定義閾值的邊界框。這一過程重復(fù)進(jìn)行,直到候選集中沒有邊界框?yàn)橹?。?shí)驗(yàn)結(jié)果表明,與其他NMS變體相比,該方法的平均精度更高,因此具有更強(qiáng)的優(yōu)越性。
3 本文方法
所提出的方法稱為Confluence。名稱來源于一個目標(biāo)檢測器在檢測到一個對象時返回的檢測框的集合。Confluence并沒有將過多的建議視為一個問題,而是將其作為一種識別最優(yōu)邊界框的方法。這是通過識別與其他邊界框最Confluence的邊界框來實(shí)現(xiàn)的,也就是說,該邊界框最能代表集群內(nèi)其他框的相交集合。
Confluence是一個2階段的算法,它保留了最優(yōu)邊界框,并消除了假陽性。第1階段使用置信加權(quán)曼哈頓距離啟發(fā)接近測量來評估邊界框的一致性。第2階段涉及移除所有與保留的邊界框Confluence邊界框。
3.1 曼哈頓距離
曼哈頓距離或范數(shù),是兩個點(diǎn)之間垂直和水平距離的總和。與之間的可以表示為:

基于DCNN的傳統(tǒng)和現(xiàn)在目標(biāo)檢測器都有一個明顯的特點(diǎn),就是返回大量的檢測結(jié)果,在圖像中感興趣的位置周圍形成邊界框簇。
本文提出,任意兩個邊界框之間的接近程度可以用、、和坐標(biāo)對之間的之和表示:

圖2提供了接近測量的圖示:

P值比較小表示高度Confluence的邊界框,而P值比較高表示候選框不是由同一物體產(chǎn)生得到的,它們可能只是在某種程度上重疊,或者完全不相交。因此,可以推斷出,如果一個給定框的P與一組邊界框中的其他所有框進(jìn)行比較,它將提供它與其他所有框Confluence度量。當(dāng)邊界框密集匯聚時,這種計(jì)算將涉及大量的比較。
因此,被密集的一群邊界框包圍的邊界框,其P值會非常低,而沒有被相互競爭的邊界框包圍的邊界框,可以被正確地歸類為離群值。實(shí)際上,這提供了目標(biāo)檢測器在給定位置存在對象時的置信度的度量。在此基礎(chǔ)上,本文提出,聚類內(nèi)P值最低的邊界框b表示對給定對象的最自信檢測。
值得注意的是,這一理論方法克服了NMS及其替代方案所面臨的一個問題——在最高得分邊界框與另一個較低得分邊界框相比不是最優(yōu)的情況下,NMS返回次優(yōu)邊界框,如圖1所示。相比之下,P度量允許邊界框與指定一個給定對象的所有其他邊界框最Confluence,使其更魯棒。
3.2 標(biāo)準(zhǔn)化
前面討論的方法在邊界框大小相似的情況下有效地發(fā)揮作用。然而,在實(shí)踐中,目標(biāo)及其對應(yīng)的邊框?qū)⑹遣煌笮〉摹.?dāng)使用基于置信度加權(quán)的p的超參數(shù)來管理邊界框保留或刪除時,這就產(chǎn)生了一個問題。這是因?yàn)樾枰趧h除大量假陽性和保留少量真陽性之間進(jìn)行權(quán)衡。
為了解決這個問題,作者使用歸一化算法將邊界框坐標(biāo)縮放到0到1之間,同時保持它們之間的關(guān)系。歸一化算法對各坐標(biāo)進(jìn)行如下變換:

標(biāo)準(zhǔn)化允許通過使任意兩個大的目標(biāo)內(nèi)邊界框與任意兩個小的目標(biāo)間邊界框的關(guān)系相比較來區(qū)分目標(biāo)內(nèi)邊界框和目標(biāo)間邊界框,如圖3所示。

很明顯,在圖3中,右邊的兩個大邊框表示同一個對象。相反,左邊的兩個小邊框表示兩個獨(dú)立的對象。但當(dāng)計(jì)算P時,得到相同的值,如下:

這就產(chǎn)生了區(qū)分屬于相同或不同對象的邊界框的問題。標(biāo)準(zhǔn)化通過保留邊界框之間的重疊關(guān)系來解決這個問題,同時確保可以比較任意兩個邊界框關(guān)系。
3.3 類內(nèi)保留和刪除
由于所有坐標(biāo)對都?xì)w一化在0到1之間,因此任何一對相交的邊界框的接近值都小于2。因此,如果任意兩個邊界框的P值小于2,則假設(shè)它們屬于同一簇,因此指的是同一對象,或者指一個或多個高密度對象。一旦識別出簇,通過對P值升序排序,找到簇內(nèi)最優(yōu)邊界框。取第n個位置接近度最小的邊界框?yàn)樽頒onfluence的邊界框保留。
然后分析P值的聚類內(nèi)梯度,選擇最Confluence的邊界框。通過繪制P值的圖,可以顯示對象內(nèi)和對象間邊界框之間的差異,這是由于類blob集群的性質(zhì),如下圖所示。每個水平斑點(diǎn)表示一個對象。Confluence選擇最能代表給定blob內(nèi)其他所有框的邊界框。從本質(zhì)上說,這意味著它在一個梯度趨近于零的數(shù)據(jù)范圍內(nèi)選擇一個方框。

一旦選擇了最Confluence的邊界框,所有接近值低于預(yù)定義閾值的簇內(nèi)邊界框?qū)⒈灰瞥_f歸地重復(fù)這個過程,直到處理完所有的邊界框。
3.4 置信度得分加權(quán)
NMS使用由對象檢測器返回的單個置信度分?jǐn)?shù)作為唯一的方法,通過它選擇一個“最佳的”邊界框。相反,Confluence通過考慮置信分?jǐn)?shù)c和與之競爭的邊界框的P值來評估給定邊界框b的最優(yōu)性。通過用除以其置信度得分,可以得到加權(quán)接近性:

由于c是一個介于0.05和1之間的值,通過人為地降低的值,這實(shí)際上提供了對高置信框的偏愛(注意,置信分?jǐn)?shù)低于0.05的所有邊界框都不被考慮)。反之,低置信框的WP值會更大。這增加了選擇高置信度框的可能性,因?yàn)檫吔缈蚴腔谛〉腤P值選擇的。
4. 算法實(shí)現(xiàn)的偽代碼

第1步:變量, 和是用來存儲邊框以及相應(yīng)的分?jǐn)?shù)和類標(biāo)簽的集合,這些分?jǐn)?shù)和標(biāo)簽將返回并繪制在圖像上 第2步:算法分別遍歷每個類,這使它能夠處理多類對象檢測。對于每個類,它選擇n個邊界框,每個邊界框代表一個對象 第3步:定義變量、臨時存儲邊界框和對應(yīng)的分?jǐn)?shù),并選擇待處理類的最優(yōu)邊界框 第4步:變量被初始化為圖像的大小 第5步:循環(huán)遍歷所有邊界框,將每個邊界框與集合中的每個邊界框進(jìn)行比較: 第5.1步:規(guī)范化坐標(biāo)關(guān)系,然后進(jìn)行鄰近計(jì)算 第5.2步:如前所述,如果接近度計(jì)算值小于2,則邊界框是不相交的,將被視為單獨(dú)的對象。這個條件將的P值限制小于2 第5.3步:通過對最小置信加權(quán)匯合值的收斂,選擇一個最優(yōu)邊界框 第6步:選擇最優(yōu)邊界框后,將其添加到中,與其對應(yīng)的類和置信值一起作為最終檢測返回,并從集合B,S中去除。 第7步:隨后,將B中所有與預(yù)定義的超參數(shù)以下的最優(yōu)邊界接近的邊界框移除。 第8步:遞歸地執(zhí)行步驟3-5,直到處理完所有的邊界框。
5 實(shí)驗(yàn)
5.1 經(jīng)典方法插入對比


5.2 可視化對比



以上結(jié)果不難看出使用Confluence方法后檢測結(jié)果更加精準(zhǔn)。
上述論文PDF下載
鏈接:https://pan.baidu.com/s/1KXTrl7G0-SUYomIg-ZP12g?
提取碼:bx9o
下載1:何愷明頂會分享
在「AI算法與圖像處理」公眾號后臺回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析
下載2:leetcode?開源書
在「AI算法與圖像處理」公眾號后臺回復(fù):leetcode,即可下載。每題都 runtime beats 100% 的開源好書,你值得擁有!
下載3 CVPR2020 在「AI算法與圖像處理」公眾號后臺回復(fù):CVPR2020,即可下載1467篇CVPR?2020論文 個人微信(如果沒有備注不拉群!) 請注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱
覺得不錯就點(diǎn)亮在看吧


