加权框融合 WBF(Weighted Boxes Fusion: combining boxes for object detection models)

最近阅读目标检测论文,看到一位博主对论文总结不错,通俗易懂,特转载

————————————————
版权声明:本文为CSDN博主「Yemiekai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Yemiekai/article/details/117839686

文章标题:《Weighted Boxes Fusion: combining boxes for object detection models》
文章PDF地址:https://arxiv.org/abs/1910.13302
GitHub地址:https://github.com/ZFTurbo/Weighted-Boxes-Fusion

简介
作者认为,在目标检测任务中,当实时性要求不强时,集成多个推理模型有助于我们得到更好的结果。

于是作者在文中提出了一种方法,可以把多个目标检测模型的预测结果结合起来。
这个方法称为 weighted boxes fusion,简称 WBF 。

在筛选预测框的过程中,常用的方法是非极大值抑制(non-maximum, NMS),还有一种 soft-NMS 方法也被用于改进筛选性能。这些方法在单个模型上效果不错,但只能简单地从预测框中,“筛选” 框框。不能有效地结合多个模型的预测结果来产生一个平均的框框。与单一模型相比,结合多个模型的预测会得到更好更准确的效果,这样做在打比赛中通常名列前茅。

NMS、soft-NMS等方法只是简单地删除部分预测框。
与之不同,作者提出的 WBF 方法用上了所有预测框的置信度(得分),来构造出融合的框框

在实际应用中,还有一种技术也经常被用到,叫做测试时增强(test-time augmentation, TTA),它类似于训练时的数据增强。举个例来说,测试的时候使用一个训练好的模型,对原始图片推理、又把图像做垂直/水平反转等变换,分别推理,把这几个结果平均,作为一次最终的结果。这种有多个结果的情况也可以用 WBF。

WBF 的过程

关于 NMS 和 soft-NMS 资料网上很多,这里主要介绍 WBF 的过程。

 为了便于理解,我对这些框进行了分类,相同颜色的框表示它们选中了同一个目标。
这里有 3 朵花,每朵花上应该只保留 1 个框,这是我们本次任务的目标。
先透露一下,用 WBF 处理过后,可以得到这样的结果:

显然我们也可以用 NMS 直接干掉那些重叠的框,最后得到 3 个干净的框,效果也差不多。
但 WBF 不是这么做的。它不是直接干掉这些框,而是对现有的框进行融合,生成新的框。
这个例子里,它把 3 个蓝色的框融合成 1 个框;2 个黄色的框融合成1个框;4 个红色的框融合成 1 个框。

WBF 首先对这些框做一个预处理,把这些框按照得分从高到低进行排序,放在一个数组里:

 上面的图示中,对 9 个框(3个蓝框,4个红框,2个黄框)进行了排序,右边那一列是排序的结果。数组的每个元素里面记录了该框框的得分和坐标。然后从最高分的开始,一个一个取出来,进行加权融合。

先说一下:
  在我们的程序里面,每个框的数据只有坐标和分数,并不知道哪个框属于哪朵花。
  所以哪个框要和哪个框融合?首先要这些框进行聚类:把同一朵花上面的框归到一起。
  这可以通过 IOU(交并比)做到,我们一步一步来。 (只能把这些框归到一起,但仍然不知道是哪朵花)

 

可以看到,这里用框的得分作为权值,把两个框的坐标进行融合,得到一个新的框。
  所以得分越高的框,权值越大,在生成新框的过程中,它的贡献更大。
  新框的形状和位置更偏向于权值大的框。

  对于 2 个以上的框,也是按照这个公式往后面加就行了。

  论文提供的源码里还有一种计算方式,是直接求平均的,没有把得分作为权值来用。具体可以看代码。


回到 WBF 的处理流程,对这 9 个框排序完成之后,再维护 2 种容器(可以用数组之类的东西):

其中一种容器叫做 clusters,是聚类的结果,用于存放同一朵花上面的所有框
在这个例子中,有 3 个聚类:clusterA,clusterB,clusterC,分别代表这 3 朵花上面的框。

另外一种容器叫做 fusions,一个 fusion 对应一簇 cluster。
把某 cluster 中所有的框用融合框公式算出一个新的框,记录在fusion 里。
同理这里也有 3 个:fusionA,fusionB,fusionC,是与其对应的 3 种 cluster 各自融合的结果。


为了快速描述 WBF 的处理流程,假设现在已经按照排序顺序,处理完数组里的前 6 个数据了:

 处理完前面 6 个数据后,已经得到 2 组 cluster 和 2 个 fusion 了。
它们是怎么来的呢? 再看第 7 个数据是怎么处理的就知道了。

现在从 preDatas 中取出第 7 个数据(黄色的框),首先对它做聚类,聚类的方法是:
把这个新来的 7 号框,与现有 fusions 中的所有 fusion 做 IOU,如果 IOU 结果大于指定阈值,则聚类成功,把这个框放到该 fusion 对应的 cluster 中。

按照上述说法,我们分别把 7 号框与 fusionA 和 fusionB 的框做 IOU,发现都小于阈值。
显然 7 号框不属于 clusterA,也不属于clusterB,应该给它新建一个 cluster。聚类完毕。

姑且把这个新的 cluster 命名为 clusterC,把 7 号框放到 clusterC 里面。
同时对 clusterC 里所有的框做 加权融合(用上面讲的融合框公式),得到 fusionC。
由于 clusterC 里只有一个框,所以融合的结果 (fusionC) 就是它自己。

现在已经处理完第 7 个框了,接下来第 8 个也同样处理。
第 8 个是红色的框,经过聚类(算IOU) 后,它被分到 clusterB 里了。
分配完后,对 clusterB 里的所有框(此时共有4个)做加权融合,得到新的 clusterB
结果如图:

可以看到现在 clusterB 里有 4 个框, 这 4 个框就是下面那朵花上的 4 个框。
第 9 个框的处理方式也一样,我就不画了。

所有数据处理完毕后,得到 3 个fusion,这 3 个框就是 WBF 算法的结果。
把这个 3 个框画到图片上,就得到文章开头展示的结果:

总结
这个 WBF 算法可以直接用来代替 NMS,不过计算量可能会大一点。

对于一张图片,可以用多个不同的模型来做预测,然后对所有预测结果运用 WBF 算法,得到 1 个结果。作者说这个结果可能好过单个模型的预测结果。作者提出 WBF 算法也是主要应用于这种场景。

如果只有 1 个模型,也可以用 WBF 算法。方法就是把得分阈值设低一点,让网络输出一堆框框,然后对这些框做 WBF。如果网络判别能力强,得分低的框往往是一些垃圾框,它在融合过程中也没什么权重,所以直接做 WBF 应该没有问题。


在一些情况下,WBF 还能用于改善漏检、误检等问题。

 

不过 WBF 的能力有限,毕竟它还得依赖于网络输出结果,并不能颠覆这个结果。

另外,WBF 和 NMS 选哪个,还要看具体应用和具体情况。

REF:WBF:继NMS和Soft-NMS后的过滤候选框新方法 - 知乎 (zhihu.com)

原文地址:https://www.cnblogs.com/cy0628/p/15568398.html