0x01 从NMS到Soft-NMS
在detection中,通常为了避免prediction boxes的重合会使用非极大值抑制的方法筛选候选框,最简单的做法是将bounding box的Confidence排序后依次从C最大的box与其他计算IOU,设置一个固定的阈值,IOU超过阈值的bbox则被删除,将所有bbox遍历一次后得到最终的结果;这样的做法对有些模型来说会降低Recall,因此为了改进这个情况提出了Soft-NMS,即不直接删除掉IOU过高的候选框,而是降低IOU过高的框的C,再进行计算,如果置信度过低再将之剔除。
0x02 TTA & model ensembling
在后处理的方法上,除了NMS用的比较多的还有TTA(Test-Time Augmentation),将原图和增强后的图片都输入到model然后将结果平均。以分类为例来说,做模型融合是一个非常显而易见的问题:我可以训练a~c三个(或更多)模型,并将分类结果的概率求均值即可得到ensemble model的result。
0x03 WBF
wbf的提出我觉得还是比较自然的,直接像NMS一样把prediction丢掉(也许)会损失一部分信息,因此如何高效利用model的输出也是提高score的一环也是说得通的。原文写的是
However, both NMS and soft-NMS discard redundant boxes, and thus can not produce averaged localization predictions from different models effectively.
Both NMS and soft-NMS exclude some boxes, while WBF uses all boxes. Thus, it can fix cases where all boxes are predicted inaccurately by all models.
wbf的算法流程如下:
-
将每个bbox添加到一个空的list(B),并按Confidence排序.
-
创建两个新的列表L和F分别用于存放bbox的聚类结果和融合后的bbox,其中L的组织形式如下L=[[box1, box2], [box3,box4,box5]...],每个子list包含的是一个boxes集合(应该就是相近的用于融合的bboxes),F的组织形式如下F=[box1, box2, box3...],代表L中每一个子集的融合结果。
-
对每个在B中的box与F中的结果进行matching,计算IOU, 并根据阈值判断matching结果(论文中写的是他们用的THR=0.55)。
-
对B中的元素,如果没在F中找到IOU大于阈值的结果,则将B目前的box添加到F和L中,并进行下一次迭代.
-
如果找到了对应的matching,将B当前的box添加到L中对应F中matching位置的前方.
-
使用L中每个子集对F中的box重新计算坐标和Confidence
-
对B中所有box计算完后,还需要重新整理下F中的Confidence,具体做法是将C乘cluster中box个数再除以模型的个数(这里不说我差点忘了是model ensemble了= =)这样做的原因是如果一个类的box少意味着比较少的模型预测出了这个结果,因此它可能是不可信的,所以需要降低对应的C。
0x04 NMW
Non-Maximum Weighted(NMW)和wbf有点类似,但是它的结果并没有改变box的confidence,而是使用IOU去作为boxes的权重,与NMS的思路差不多,将C最大的暂时作为gt,然后将融合后的box作为gt和后面的比,迭代了属于是,多的不表了。
0x05 实验结果
对ensemble model效果明显好于NMS、SoftNMS。
- 不同模型ensemble
COCO
Open Image
- 相同模型不同backbone ensemble
在single model下使用Retinanet(Res152)反而不如直接使用NMS。
作者对此给出的解释是单个模型可能会给出过多错误的预测框导致WBF之后错误累积了
0x10086 拾遗
-
迭代中融合box的Confidence居然也是对子集类中的boxes求平均。。。但融合box的坐标是有权重的,根据Confidence来的,因此C高的会contribute更多,河里。
Set the confidence score for the fused box as the average confidence of all boxes that form it -
在discussion最后作者也说了现在使用WBF的速度大概是NMS的三倍。刷刷分还行,实际应用场景估计不指望了。
-
感觉实验做出来结果反过来推可能的原理都挺形而上的。。