目标框加权融合-$Weighted$ $Boxes$ $Fusion$

简介

在之前的文档中我们有介绍 $NMS$ 的原理和代码,今天我们来看一个在多个模型进行目标检测中对于目标候选框筛选性能更好的一种算法——$Weighted$ $Boxes$ $Fusion$,简称 $WBF$。

简单来说,$WBF$ 算法首先将所有边界框按照置信度分数的递减顺序进行排序;然后生成另一个可能的框“融合”(组合)列表,并尝试检查这些融合是否与原始框匹配;最后使用一个公式来调整坐标和框列表中所有框的置信度分数。下面我们就来详细看一下 $WBF$ 的计算流程和代码。

理论部分

如下图 $1$ 所示是原文中给出的一个 $NMS$/$soft-NMS$ 和 $WBF$ 的原理示意图。$NMS$ 在原理上是删除不符合筛选规则的框来得到最后的候选框,而 $WBF$ 是针对于集成学习来设计的,即对多个模型预测出来的预测框采用融合的方式获取最终一个候选框,这样的话就可以综合各个模型下的对于同一个物体预测出来的 $bounding$ $box$,从而获得更好的性能。

图 $1$

$WBF$ 的详细算法步骤如下:

1、建立两个链表 $List$ $B$ 和 $List$ $C$,其中 $B$ 中储存的是多个模型预测出来的每一个 $bounding$ $box$,然后对 $B$ 中的 $bounding$ $box$ 进行降序排列得到 $C$。

2、建立空链表 $List$ $L$ 和 $List$ $F$,其中 $F$ 是用于储存 $L$ 中每一个 $cluster$ 融合后的 $bounding$ $box$,$L$ 中的每一个 $postion$ 都储存是一个 $bounding$ $box$ 的集合,称之为 $cluster$。

3、遍历循环 $B$ 中的 $bounding$ $box$ 在 $F$ 中寻找对应匹配的 $bounding$ $box$,匹配规则是根据两个框的 $IOU$ 值来的,在原论文中匹配的 $IOU$ 为 0.55。

4、在步骤 $3$ 中如果没有找到匹配的 $bounding$ $box$,则将这个框加到 $L$ 和 $F$ 的尾部。

5、在步骤 $3$ 中如果找到了匹配的 $bounding$ $box$,则将这个框加入到 $L$,加入的位置是该框在 $F$ 中匹配到这个框的 $Index$。$L$ 中每个位置可能有多个框,需要根据这多个框更新对应 $F$[$index$]的值。

6、匹配到框后,使用 $L$[$pos$]每一个 $cluster$ 中的框($T$ 个)重新计算在 $F$[$pos$]中的框的坐标和 $score$,其中 $score$ 和坐标的计算方式如下,$score$ 计算是取算数平均值得到的,而坐标值是通过框的置信度 $score$ 和坐标值相乘然后累加再除以 $score$ 的累加值得到,这样做可以使得具有较大置信度的框比较小置信度的框对融合后坐标的贡献值更大。

C=i=1TCiTC = \frac{\sum_{i=1}^{T}C_i}{T}
X1,2=i=1TCiX1,2ii=1TCiX_{1,2} = \frac{\sum_{i=1}^{T}C_i*X_{1,2_i}}{\sum_{i=1}^{T}C_i}
Y1,2=i=1TCiY1,2ii=1TCiY_{1,2}=\frac{\sum_{i=1}^{T}C_i*Y_{1,2_i}}{\sum_{i=1}^{T}C_i}

7、当 $B$ 中所有的框都循环完后,对于 $F$ 中每个框的 $score$ 进行 $re-scale$,原因是因为如果一个 $cluster$ 中的框的数量太少的话,可能意味着若干模型中只有很少的模型预测到了这个框,因此是需要减少这种情况下对应框的置信度,作者给出了两种如下 $re-scale$ 的方式。作者在原论文中指出,这两种方式没有显著的差异,第一种 $re-scale$ 方式的性能会略好一点点。

C=Cmin(T,N)NC = C * \frac{min(T, N)}{N}
C=CTNC = C * \frac{T}{N}

具体实现代码如下:

实验结论

原论文中作者也给出了多个模型使用 $NMS$ 和 $WBF$ 后的 $mAP$ 对比图,结果如下所示,从图表可以看出,使用了 $WBF$ 后,相较于使用 $NMS$/$soft-NMS$ 各个模型下的 $mAP$ 值均有不同程度的提升。

总结

本文分享了 $Weighted$ $Boxes$ $Fusion$ 这种预测框加权融合的方式,对多个模型预测出来的框进行融合,这种方式采用了集成学习的思想,综合各个模型下的对于同一个物体预测出来的 $bounding$ $box$,从而获得更好的性能。

引用

  • https://arxiv.org/pdf/1910.13302.pdf

  • https://github.com/ZFTurbo/Weighted-Boxes-Fusion

  • https://blog.csdn.net/lyk_ffl/article/details/116024800

Last updated