总体概要:
对NMS进行分类,大致可分为以下六种,这里是依据它们在各自论文中的核心论点进行分类,这些算法可以同时属于多种类别。
传统NMS有多个名称,据不完全统计可以被称为:Traditional / Original / Standard / Greedy NMS,为统一起见,下称Traditional NMS。
Traditional NMS算法是最为经典的版本,伪代码如下:
作为最为人所知晓的版本,Traditional NMS不仅有CPU版本,并且现已有GPU版本,GPU版本为Ross Girshick大神编写,俗称CUDA NMS。多个深度学习框架也已将CUDA NMS纳入,作为基本函数使用,如Pytorch在Torchvision 0.3中正式集成了CUDA NMS。
缺点:
Soft-NMS是Traditional NMS的推广,主要旨在缓解Traditional NMS的第二条缺点。
数学上看,Traditional NMS的剔除机制可视为
s i = { 0 , I o U ( M , B i ) ⩾ t h r e s h s i , I o U ( M , B i ) < t h r e s h s_i=\left\{ \begin{array}{lc} 0, & IoU(M,B_i)\geqslant thresh\\ s_i, & IoU(M,B_i)
显然,对于IoU≥NMS阈值的相邻框,Traditional NMS的做法是将其得分暴力置0。这对于有遮挡的案例较不友好。因此Soft-NMS的做法是采取得分惩罚机制,使用一个与IoU正相关的惩罚函数对得分 s 进行惩罚。
线性惩罚:
s i = { s i ( 1 − I o U ( M , B i ) ) , I o U ( M , B i ) ⩾ t h r e s h s i , I o U ( M , B i ) < t h r e s h s_i=\left\{ \begin{array}{lc} s_i(1-IoU(M,B_i)), & IoU(M,B_i)\geqslant thresh\\ s_i, & IoU(M,B_i)
其中 M M M 代表当前的最大得分框。
线性惩罚有不光滑的地方,因而还有一种高斯惩罚:
s i = s i e − I o U ( M , B i ) 2 σ s_i=s_ie^{-\frac{IoU(M,B_i)^2}{\sigma}} si=sie−σIoU(M,Bi)2
在迭代终止之后,Soft-NMS依据预先设定的得分阈值来保留幸存的检测框,通常设为0.0001
该文对两种惩罚方法的超参数也进行了实验,结果验证了超参数的不敏感性。经本人实测,Soft-NMS在Faster R-CNN中的提升约有0.5-0.8个点的AP提升。
缺点:
IoU-Guided NMS出现于IoU-Net一文中,研究者认为框的定位与分类得分可能出现不一致的情况,特别是框的边界有模棱两可的情形时。因而该文提出了IoU预测分支,来学习定位置信度,进而使用定位置信度来引导NMS。
具体来说,就是使用定位置信度作为NMS的筛选依据,每次迭代挑选出最大定位置信度的框 M M M,然后将IoU≥NMS阈值的相邻框剔除,但把冗余框及其自身的最大分类得分直接赋予 M M M,这样一来,最终输出的框必定是同时具有最大分类得分与最大定位置信度的框。
优点:
IoU-Guided NMS有助于提高严格指标下的精度,如AP75, AP90。
缺点:
多框共同决定一框
Weighted NMS出现于ICME Workshop 2017《Inception Single Shot MultiBox Detector for object detection》一文中。论文认为Traditional NMS每次迭代所选出的最大得分框未必是精确定位的,冗余框也有可能是定位良好的。那么与直接剔除机制不同,Weighted NMS顾名思义是对坐标加权平均,加权平均的对象包括 M M M 自身以及IoU≥NMS阈值的相邻框。
M = ∑ i w i B i ∑ i w i , B i ∈ { B ∣ I o U ( M , B ) ⩾ t h r e s h } ∪ { M } M=\frac{\sum\limits_iw_iB_i}{\sum\limits_iw_i},\quad B_i\in\{B|IoU(M,B)\geqslant thresh\}\cup\{M\} M=i∑wii∑wiBi,Bi∈{B∣IoU(M,B)⩾thresh}∪{M}
加权的权重为 w i = s i I o U ( M , B i ) w_i=s_iIoU(M,B_i) wi=siIoU(M,Bi) ,表示得分与IoU的乘积。
优点:
Weighted NMS通常能够获得更高的Precision和Recall,以本人的使用情况来看,只要NMS阈值选取得当,Weighted NMS均能稳定提高AP与AR,无论是AP50还是AP75,也不论所使用的检测模型是什么。
缺点:
Softer-NMS同样是坐标加权平均的思想,不同在于权重 w i w_i wi 发生变化,以及引入了box边界的不确定度。
关于目标检测box不确定度,可参考笔者的另一篇文章《一文了解目标检测边界框概率分布》
加权公式如下:
M = ∑ i w i B i / σ i 2 ∑ i w i / σ i 2 , B i ∈ { B ∣ I o U ( M , B ) ⩾ t h r e s h } ∪ { M } M=\frac{\sum\limits_iw_iB_i/\sigma_i^2}{\sum\limits_iw_i/\sigma_i^2},\quad B_i\in\{B|IoU(M,B)\geqslant thresh\}\cup\{M\} M=i∑wi/σi2i∑wiBi/σi2,Bi∈{B∣IoU(M,B)⩾thresh}∪{M}
其中权重 w i = e − ( 1 − I o U ( M , B i ) ) 2 σ t w_i=e^{-\frac{(1-IoU(M,B_i))^2}{\sigma_t}} wi=e−σt(1−IoU(M,Bi))2 抛弃了得分 s i s_i si ,而只与IoU有关。
在加权平均的过程中,权重越大有两种情形:1. 与 M M M 的IoU越大;2. 方差越小,代表定位不确定度越低。
优点:
缺点:
以上这些NMS都基于这样的假设:与当前最高得分框重叠越大,越有可能是冗余框。
Adaptive NMS的研究者认为这在物体之间有严重遮挡时可能带来不好的结果。我们期望当物体分布稀疏时,NMS大可选用小阈值以剔除更多冗余框;而在物体分布密集时,NMS选用大阈值,以获得更高的召回。既然如此,该文提出了密度预测模块,来学习一个框的密度。
一个GT框 B i B_i Bi 的密度标签定义如下,
d i : = max B i , B j ∈ G T I o U ( B i , B j ) , i ≠ j d_i:=\max\limits_{B_i,B_j\in GT}IoU(B_i,B_j), \quad i\neq j di:=Bi,Bj∈GTmaxIoU(Bi,Bj),i=j
模型的输出将变为 ( x , y , w , h , s , d ) (x,y,w,h,s,d) (x,y,w,h,s,d) ,分别代表box坐标,宽高,分类得分,密度,其中密度 d d d 越大,代表该框所处的位置的物体分布越密集,越有可能是遮挡严重的地方;反之密度 d d d 越小,代表该框所处的位置的物体分布越稀疏,不太可能有遮挡。
论文以Traditionnal NMS和Soft-NMS的线性惩罚为基础,将每次迭代的NMS阈值更改如下:
N t = max { t h r e s h , d M } N_t=\max\{thresh, d_M\} Nt=max{thresh,dM}
其中 t h r e s h thresh thresh 代表最小的NMS阈值。
优点:
缺点:
DIoU-NMS出现于Distance-IoU一文,研究者认为若相邻框的中心点越靠近当前最大得分框 M M M 的中心点,则其更有可能是冗余框。也就是说,考虑IoU相同的情况,如下所示
第一种相比于第三种越不太可能是冗余框。基于该观点,研究者使用所提出的DIoU替代IoU作为NMS的评判准则,公式如下:
s i = { 0 , D I o U ( M , B i ) ⩾ t h r e s h s i , D I o U ( M , B i ) < t h r e s h s_i=\left\{ \begin{array}{lc} 0, & DIoU(M,B_i)\geqslant thresh\\ s_i, & DIoU(M,B_i)
DIoU=IoU-d²/c²
而在实际操作中,研究者还引入了参数 β \beta β ,用于控制 d 2 c 2 \frac{d^2}{c^2} c2d2 的惩罚幅度。即
D I o U = I o U − ( d 2 c 2 ) β DIoU=IoU-(\frac{d^2}{c^2})^\beta DIoU=IoU−(c2d2)β
由公式可以看出,
研究者进一步比较了Traditional NMS和DIoU-NMS的性能,在YOLOv3和SSD上,选取NMS阈值为[0.43,0.48]。可以看到DIoU-NMS在每个阈值上都优于Traditional NMS,此外还值得一提的是,即便是性能最差的DIoU-NMS也比性能最好的Traditional NMS相当或更优,说明即便不仔细调整NMS阈值,DIoU-NMS也通常能够表现更好。
这里顺便一提,既然都比了[0.43, 0.48]的阈值,就让人比较好奇更宽的阈值范围会怎样?Traditional NMS会不会有反超DIoU-NMS的情况?当然我个人比较认同DIoU-NMS更优的范围会大一些,也就是NMS阈值不必精调也可放心使用DIoU-NMS。
优点:
缺点:
就分享到这了,有任何错误,欢迎指正,一起学习。
未完待续。。。
一文打尽目标检测NMS——效率提升篇