您當前的位置:首頁 > 書法

Soft-NMS(2)_論文_ICCV2017

作者:由 胡孟 發表于 書法時間:2018-12-03

本筆記介紹Soft-NMS,作者Bharat Singh也是SNIP、SNIPER作者,作者寫論文的風格就是:實驗很有說服力,分析很細緻,論文公式很少,粗讀起來很爽,感覺一下就懂了,但細度發現很多很多細節要深挖,這裡不得不佩服作者研究得細緻且深入啊;

再回到論文,Soft-NMS本身很簡單,透過fig1、2、3很容易理解,但更佩服的是作者的思維,能發現NMS中的問題,並透過一個很簡單的方案就很顯著地提升了效能,贊~~~

Abstract

1 NMS是目標檢測中的一個模組,用於過濾檢測器檢出的冗餘bbox,但NMS操作有點粗暴,如fig 1,綠框此時也是一個正檢,但NMS就直接基於IoU閾值將其過濾,造成了一個漏檢;

2 本文提出Soft-NMS,不會那麼粗暴,比較溫柔,將fig 1中的綠框score不會粗暴地置0,而是

根據與紅框的IoU,對綠框score做一個基於連續函式的降權對映

decays the detection scores

of all other objects as a

continuous function of their overlap with Max

);—— 這樣看來,NMS直接對score置0,當前高IoU的bbox就直接pass了,但Soft-NMS只會降低當前bbox的score,不會pass;

3 Soft-NMS替換NMS後,在VOC、COCO上對R-FCN、Faster-RCNN上都有效能提升,沒有額外的計算量開銷;單模型Deformable-RFCN + Soft-NMS直接將COCO上的mAP從39。8% -> 40。9%;

4 Soft-NMS無需訓練,僅一個超參,實現簡單,直接替換NMS就可即插即用,沒有比NMS新增開銷,實乃居家旅遊、目標檢測必備良藥;

1. Introduction

目標檢測任務很直觀:

對目標給出bbox loc + cls score

,處理流程也非常固定化,若想新增模組,就必須保證新增模組的開銷可接受,且最好不要對已有模組做大的調整,若還需要已有模型重新訓練,而效能提升不明顯,就直接pass吧;本文提出的Soft-NMS,無需訓練,僅一個超參,實現簡單,直接替換NMS就可即插即用,沒有比NMS新增開銷;

前CNN-based目標檢測器使用多尺度滑窗方式,透過提取視窗內的特徵進一步判定其類別,密集的滑窗雖然會提升召回率,但也會引入false positives,因此NMS就成為目標檢測post-process中必要的一環;CNN-based目標檢測器就不需要滑窗了,從SS、Edge boxes到RPN,proposals提取的數量更少,也更有針對性了,再就是如Fast RCNN中的標準操作,proposals內提特徵,cls子分支細分proposals類別,並行的reg子分支進一步refine proposals的位置;但refined proposals因為存在冗餘,會導致多個proposals往同一個RoI(gt bbox)上回歸,簡而言之:一個目標被檢出了多個bbox,因此為了減少false positives,NMS就必不可少了;

NMS再回顧一遍:

step-1

:將所有檢出的output_bbox按cls score劃分不同子類的bbox集合(如pascal voc分20個類,也即將output_bbox按照其對應的cls score劃分為21個集合,1個bg類,只不過bg類就沒必要做NMS而已);

step-2

:在每個子類集合內根據各個bbox的cls score做降序排列,得到一個降序的list_k;

step-3

:從list_k中top1 cls score開始,計算該bbox_x與list_k中其他bbox_y的IoU,若IoU大於閾值T,則剔除該bbox_y,最終保留bbox_x,從list_k中取出;

step-4

:選擇list_k中top2 cls score(step-3取出top 1 bbox_x後,原list_k中的top 2就相當於現list_k中的top 1了,但如果step-3中剔除的bbox_y剛好是原list_k中的top 2,就依次找top 3即可,理解這麼個意思就行),重複step-3中的迭代操作,直至list_k中所有bbox都完成篩選;

step-5

:對每個子類集合的list_k,重複step-3、4中的迭代操作,直至所有list_k都完成篩選;

NMS中的一個操作為:若任意bbox_i與當前max score bbox_M的IoU大於閾值Nt,直接將bbox_i的score置0,因此如fig 1,綠框bbox確實是跟紅框高score bbox IoU過大,若一刀切將其幹掉,就相當於漏檢了一個目標,自然AP就下降了;但如果將綠框bbox score降低(

lower the detection scores

as a

function of its overlap with bbox_M

),而不是直接pass,起碼還有進一步被召回的可能性;

Soft-NMS(2)_論文_ICCV2017

本文提出的Soft-NMS,如fig 2,虛擬碼上僅需對NMS替換一行,原理很簡單:

decrease the detection scores

as an

increasing function of overlap instead of setting the score to zero as in NMS

也即:如果bbox_i與bbox_M的IoU高,bbox_i的score就下降得多,若IoU低,bbox_i的score就下降得少,或不下降;NMS、Soft-NMS對比如fig 2,至於函式 f 如何是啥?可參照公式2、3:

Soft-NMS(2)_論文_ICCV2017

Soft-NMS替換NMS後,在VOC、COCO上對R-FCN、Faster-RCNN上都有效能提升,沒有額外的計算量開銷;單模型Deformable-RFCN + Soft-NMS直接將COCO上的mAP從39。8% -> 40。9%;且Soft-NMS無需訓練,實現簡單,直接替換NMS就可即插即用,沒有比NMS新增開銷;

2. Related Work

NMS並不是目標檢測首創,在Canny邊緣檢測中就有使用,使得檢測的邊緣更加 “細” (edge thinning to remove spurious responses):

Adaboost:NMS將bbox partitioning為disjoint subsets,再將set內的bbox座標取平均,即可得到最終檢測結果;行人檢測的經典論文HOG + SVM,就是NMS的標準版操作,自此之後,NMS就成為目標檢測的標配了,但近些年,目標檢測演算法是層出不窮,NMS卻被忽略了,改進不多:

APC:Affinity Propagation Clustering,計算檢出bbox對之間的overlap,再透過APC為每個類選擇有代表性exemplars作為最終檢測bbox;

但作者提到了,通用目標檢測不僅要檢出bbox,也要為bbox劃分具體類別,且所有bbox的類別同時在一張圖片內操作,因此需要設定一個合適的閾值能適配所有檢出bbox,但不同影象、不同場景中這個閾值太難確定了,

目標檢測的mAP評估方案中,也是逐類按照score計算AP精度

(AP is computed using a

ranked list of all object instances in a particular class

),因此剛好跟NMS操作比較適配;

顯著性目標檢測中,也有使用mAP-based subset最佳化來替換NMS,聯合最佳化檢出bbox數量和位置的方式;但顯著性目標檢測僅限於檢出顯著性目標,而非所有通用目標;

行人檢測中,QUBO(quadratic unconstrained binary optimization)也有使用,但與NMS一樣,也是使用一個固定的閾值(hard threshold)抑制冗餘bbox;

當前目標檢測中,NMS還是非常牛逼的,實現簡單,效能好,但Soft-NMS可以做到更好;

3. Background

本小節基於Fast RCNN、Faster RCNN,回顧下目標檢測inference流程(可參照frcnn中的proposal_layer。py,對應

RPN中第一次nms的應用

);

1 輸入影象,檢測器利用各種conv操作梭一下,得到feature map L;

2 在L上分出兩個分支:RPN分支、Fast RCNN分支;RPN分支用於生成proposals,Fast RCNN分支接受RPN分支輸出的RoIs,做完RoI pooling提特徵後,進一步計算loc + cls;

3 RPN分支中,對feature map L上密集取樣的多尺度、長寬比anchor,計算object / non-object二分類cls score + bbox reg offsets;並基於offsets調整anchors位置;

4 限定超出影象邊界的fg anchors為影象邊界(防止後續roi pooling時proposal超出影象邊界)、剔除非常小的fg anchors;

5 按照RPN輸出的fg softmax scores由大到小排序anchors,提取前pre_nms_topN(e。g。 6000)個anchors,即提取修正位置後的fg anchors;

6 對fg anchor做NMS抑制;——

作者強調了,此處的NMS不被替換為soft-NMS

7 再次按照NMS後的fg softmax scores由大到小排序fg anchors,

提取前post_nms_topN(e.g. 300)結果作為proposal輸出

8 proposals做RoI pooling提特徵;

9 Fast RCNN分支接受做完RoI pooling提的特徵後,

進一步計算loc + cls(具體類別)

因為對單個目標,並未限制其只能對應一個proposals,因此一個目標上可能對應多個檢出的bboxes,按照mAP評估方案,只選擇top score bbox作為正檢,那麼其他檢出bboxes就只能作為FP了,進而就是step-10;

10 對所有檢出bboxes,

按具體類別劃分後,每個類別下的bboxes單獨做NMS操作

;——

Soft-NMS會替換之

11 一般還會有若干後處理操作,如:過濾小尺度bbox、修正超出邊界bbox、整圖只儲存top-N score bbox等;

Soft-NMS(2)_論文_ICCV2017

fig 3是論文中目標檢測的流程示意,與Fast RCNN、frcnn一致:

step-1

:輸入影象;

step-2

RPN生成類別無關(category independent)的proposals

,並結合1st-stage的RPN對bbox做1st-refine;如fig 3右上角框,都是

黃色的,僅能表示其為object,無具體類別資訊

step-3

:frcnn的2nd-stage操作Fast RCNN,

對proposals細化分類其具體類別,並做2nd-refine

;如fig 3右下角框,

各個框有了不同顏色,代表屬於不同的類別

step-4

:fig 3右下角檢出框明顯太多了,經過NMS操作,得到左下角結果,每個目標上的檢出框少了,沒那麼多冗餘了;

4. Soft-NMS

本節分析NMS、Soft-NMS;當前目標檢測評估標準更關注bbox定位的精度,如COCO,在[0。5:0。95:0。05]的區間IoU閾值內,多維度評估bbox的AP定位精度;定義以下兩個概念:

Ot

:VOC、COCO評估期間,判斷bbox為FP、TP的閾值;—— detection evaluation threshold;

Nt

:NMS、Soft-NMS操作期間,衡量各個bbox間IoU的閾值;

試想:如果評估階段,使用一個高閾值Ot = 0。7來判斷bbox是否為TP,但NMS階段使用低閾值Nt = 0。3篩選冗餘bbox,自然會導致AP比較低;原因為:若存在一個pred bbox bi非常靠近gt bbox目標(定位精度很高,如二者IoU > Ot = 0。7),但最高score的pred bbox M_bj,其與該gt bbox的IoU卻不那麼高(如二者IoU < Ot = 0。7,如fig 1),此時使用比較低的Nt,就直接幹掉了bi,保留了M_bj,最終評估標準中Ot閾值就認為M_bj是一個FP;這種情況會隨著Ot的逐步提高,帶來的FP更多;因此,使用低閾值 Nt 篩選M附近的冗餘bbox,將會提升miss-rate;—— 這裡我覺得作者稍微有點沒說清楚,理清思路後應該解釋為:

對M_bj、bi使用org NMS操作時,如果設定的Nt比較低,M_bj就把bi給pass了(但bi其實定位得更準),只保留了M_bj,卻又被Ot卡掉了,造成了FP;如果使用高閾值Nt,起碼這一輪下來,bi得以保留;

但如果使用高Nt = 0。7,對Ot = 0。7是沒問題的,但在Ot低、Nt高的情況下,相當於M_bj、bi都會輸入COCO中評估,都沒被Ot pass,但也僅僅是讓bi通過了,最終依然會存在FP,最終在COCO的multi Ot下依然會降低AP;且這種情況下,透過高Nt確實帶來了bi的TP,使之沒被幹掉,但可能會引入更多數量的FP(因為更多的FP在高Nt下會被透過);原因很簡單,影象中bbox數量(對應的TP bi數量)肯定是遠少於檢測器生成的RoI數量,自然大部分pred bbox都是FP,高Nt可以召回更多的TP bi,卻肯定引入了更多的FP;因此使用高Nt也並不能帶來好的效果;

為克服以上弊端,簡單回顧下NMS,NMS的bbox篩選過程可以認為是對bbox_i cls_score si的re-scoring過程:

Soft-NMS(2)_論文_ICCV2017

NMS使用一個固定的閾值Nt(hard threshold),來掌控著pred bbox M_bj附近 bi 的生死大權;

但如果M_bj並不是直接幹掉 bi,而是適度地降低 bi 的cls score,會不會更好點?

1 如果 bi 確實預測到了一個gt bbox,M_bj卻沒有cover這個目標(按照fig 1),最起碼在低Nt下,保留了 bi 預測gt bbox的機會;

2 如果 bi 沒有預測到任何目標,但M_bj預測到了gt bbox,降低了cls score的bi沒有被幹掉,依然存在,最終就會造成一個FP;—— 也不科學

因此,NMS的設計必須考慮到以下三個問題:

1 對M_bj而言,其附近的bi若與之存在IoU,bi的cls score確實是需要以合適的方式降低,使之儘量不會提升FP rate,但bi的cls score也不能太低,又必須高於所有pred bbox list中那些很明顯的FPs(should be

decreased to an extent

that

they have a smaller likelihood of increasing the false positive rate

, while

being above obvious false positives in the ranked list of detections

);

2 若使用低Nt,也是sub-optimal的,NMS階段幹掉的bbox太多,在高Ot下,會造成很多miss-rate;

3 若使用高Nt,在Ot = [0。5:0。95:0。05]時,其mAP會下降;

Rescoring Functions for Soft-NMS

透過M_bj、bi間的IoU,來適度調整bi的cls score,似乎是個不錯的改進NMS的方案,若bi與M_bj的IoU高,bi的cls score就降低得多(FP的可能性更大),反之則少,公式如下:

Soft-NMS(2)_論文_ICCV2017

IoU < Nt的未變,IoU > Nt的,si降低的方式是M_bj、bi間IoU的線性函式

;這樣與M_bj過遠的bi不會受到影響,過近的bi懲罰更重,但也不會粗暴地直接幹掉;

但以上penalty function有一點不好,就是

其不是連續函式,在Nt附近存在一個斷點,低於Nt的bi沒啥問題,負方向接近Nt的bi也沒問題,但Nt正方向附近的bi就需要降低cls score了,視覺上就會有一個sudden penalty的斷崖

;如果penalty function是連續的就更好,起碼不會造成ranked list of detections的abrupt changes;

這個連續的penalty function最好是這樣:

與M_bj高IoU的 bi ,penalty比較大,低IoU的 bi,penalty逐步降低,無IoU的 bi,penalty = 0

;那麼最終Soft-NMS選擇使用Gaussian penalty function調整si:

Soft-NMS(2)_論文_ICCV2017

以上Soft-NMS操作可以在每次iter中使用,si都做相應更新即可;

Soft-NMS操作流程如fig 2,f(iou(M, bi)))就對應以上公式了,每次iter中,Soft-NMS的計算複雜度為O(N),N對應pred bbox數量,極端情況就是N的pred bbox都需要調整si,因此對於N次iter而言,Soft-NMS的計算複雜度為O(N^2),與org NMS保持一致;—— 不過NMS可能計算量更少點,因為NMS直接幹掉了高IoU的bbox,每次iter中,參與NMS的bbox數量就更少了,Soft-NMS還是需要所有bbox都參與的;

作者提到,Soft-NMS雖然很牛逼,但也是一個貪心演算法,

並不能為所有pred bbox帶來globally optimal re-scoring

Re-scoring of detection boxes

is performed

in a greedy fashion

and hence

those detections which have a high local score are not suppressed

);

再就是

Soft-NMS是NMS的泛化版本(generalized version),NMS是Soft-NMS的special case,只是使用了更加粗暴的二分離散權重調整函式而已(discontinuous binary weighting function)

作者進一步提到,以上Soft-NMS中所提到的兩個公式並不是唯一的,也可以使用其他公式替換(只需考慮到IoU與cls score的處理方式即可);

5. Datasets and Evaluation

VOC:20類,VOC 2007 test上進一步分析;

COCO:80類目標,train / val / test:80k / 40k / 20k(train + val = 123000張影象,test-dev = 20288張影象);test集無gt公開;

train 80k + val 35k用於訓練(也稱trainval35k,共118000張影象),剩餘val 5k(也稱minival)用於驗證 + 消融實驗;最終模型提交至MS COCO伺服器上,在test集(也稱test-dev)上評估效能;

三個sota檢測器對比:Faster-RCNN、RFCN、Deformable-RFCN;

VOC:使用三個檢測器公開的pre-trained models,Faster-RCNN在VOC 2007 train上訓練,R-FCN在VOC 2007 + 2012上訓練;

COCO:Faster-RCNN直接複用作者提供的模型,R-FCN沒有公開的模型,使用ResNet-101的backbone訓練,RPN中5個尺度的anchor,影象最小尺度800pix,每張圖使用256個ROIs,最終效能比R-FCN論文中高1。9%(作者並未使用multi-scale training or testing);

測試階段,三個檢測器的RPN中,org-NMS閾值設定為0。3;

在COCO上,每張影象內最多檢出400個bbox,每個類別最多檢出100個bbox;

6. Experiments

對比下Soft-NMS、NMS,並分析Soft-NMS比NMS強在哪;

6.1. Results

Soft-NMS(2)_論文_ICCV2017

COCO上結果如table 1,L / G中Nt分別為:0。3 / 0。5,可以發現Soft-NMS提升效能明顯;

Soft-NMS(2)_論文_ICCV2017

VOC上結果如table 2,AP與COCO一致,使用[0。5:0。95:0。05]的區間IoU閾值評估;

作者提到Soft-NMS對SSD、YOLO v2效能提升不明顯,作者認為對於

proposal based檢測器(2-stage)而言,其獲得的召回率更高,因此Soft-NMS在高Ot下更有大展拳腳的空間

Soft-NMS(2)_論文_ICCV2017

Soft-NMS在COCO上對各類的效能提升如fig 6,作者說對動物類的效能提升最明顯,因為影象中存在很多動物靠得很近的場景,如fig 7;

6.2. Sensitivity Analysis

NMS中的超參就是Nt,Soft-NMS(高斯函式style)也只有一個超參:

σ

,fig 4在COCO minival上評估了這兩個超參所帶來的影響;

Soft-NMS(2)_論文_ICCV2017

可以發現當Nt、

σ

在[0。3,0。6]範圍內,AP效能比較穩定,Soft-NMS在[0。1,0。7]範圍內效能優於NMS;文中設定σ = 0。5;

6.3. When does Soft-NMS work better?

Localization Performance

Soft-NMS(2)_論文_ICCV2017

單純的AP並不能多維度解釋Soft-NMS為毛這麼牛逼,如table 3,作者進一步在不同Nt、

σ

、Ot下對比二者效能差異;

可以發現:

1 隨著NMS閾值Nt的提升,AP逐步下降(各個AP列的維度);

2 在高Ot下(如AP@0。8),Nt設定得高,效能會好一點,但提升不明顯,低Nt下效能也沒下降多少;

3 在低Ot下(如AP@0。5、0。6),Nt設定得高,效能竟然下降了很多;

總結:org NMS中,在低Ot下,高Nt得到的目標bbox並不是最優,會導致模型效能下降明顯,最終導致了整體的mAP比較低;

但Soft-NMS就比較牛逼了,

σ

的取值不同,效能都比較平穩:

1 在高、低Ot下,

σ

的取值不同,整體mAP效能都很平穩;

2 在高Ot下(如AP@0。7、0。8),Soft-NMS效能明顯優於org NMS 2%;

3 在低Ot下(如AP@0。5、0。6),Soft-NMS效能略微優於org NMS;

4 Soft-NMS中,在低Ot下,σ比較小,AP效能比較好;在高Ot下,σ比較大,AP效能比較好;org NMS雖然在高Ot下,AP效能有提升,但提升得非常之微不足道;那麼相比org NMS,Soft-NMS透過更大的

σ

可以讓目標的bbox定位更準確;

總結:Soft-NMS就是在各種Ot下,都比org NMS好,整體mAP也會好;

Precision vs Recall

Soft-NMS(2)_論文_ICCV2017

fig 5對比了NMS、Soft-NMS在不同Ot下的prec-recall結果,可以發現Soft-NMS效能優於NMS;

作者認為原因在於:

NMS對所有與 M IoU > Nt的bbox,直接置score = 0,很多bbox就被無情地過濾掉了,在高recall標準下,prec自然不會很高;Soft-NMS對這些bbox det-score降權,起碼還給它們留了一線生機

6.4. Qualitative Results

Soft-NMS(2)_論文_ICCV2017

Soft-NMS、NMS的對比結果如fig 7,在COCO驗證集上使用R-FCN + det-score = 0。45的閾值;

在No。8 / 。9中,存在一個較大的誤檢bbox,NMS篩選不掉,但Soft-NMS卻可以在每次iter中,使之逐步降低score權重,最終就可以被閾值給過濾掉了;

在No。2 / 。5 / 。7 / 。13中,一些動物的檢測,NMS就粗暴地過濾掉了靠得很近的動物,Soft-NMS會降低這些高重疊bbox的score,但只要不降低的太明顯,還是有召回的空間的;

論文參考

ICCV2017_Soft-NMS_Improving Object Detection With One Line of Code

程式碼:

https://

github。com/bharatsingh4

30/soft-nms

:官方

https://

github。com/bharatsingh4

30/soft-nms/blob/master/lib/nms/cpu_nms。pyx

https://

github。com/wushuang01/s

oft-nms/blob/master/soft-nms。py

NMS各種變體,寫得很好,贊:

標簽: nms  bbox  soft  score  BI