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

文章目录[隐藏]

文章标题:《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 的过程

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

假设用多个模型对下面这张图做目标检测,得到许多框框。
(单个模型也能生成这么多框,把分数阈值设低一点)

在这里插入图片描述

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

在这里插入图片描述

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

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

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


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

  再给你讲一个公式(论文里的),我把它叫做融合框公式。假设现在有两个很接近的框,分别为:
  

b

o

x

A

:

[

A

x

1

,

A

y

1

,

A

x

2

,

A

y

2

,

A

s

]

boxA:[Ax_{1},Ay_{1},Ax_2, Ay_2, As]

boxA:[Ax1,Ay1,Ax2,Ay2,As]

b

o

x

B

:

[

B

x

1

,

B

y

1

,

B

x

2

,

B

y

2

,

B

s

]

boxB:[Bx_{1},By_{1},Bx_2, By_2, Bs]

boxB:[Bx1,By1,Bx2,By2,Bs]
  其中 (

x

1

,

y

1

x_1,y_1

x1,y1) 代表该

b

o

x

box

box 左上角的坐标, (

x

2

,

y

2

x_2,y_2

x2,y2) 代表该

b

o

x

box

box 右下角的坐标,

s

s

s 代表该

b

o

x

box

box 的置信度 (得分)。

  通过

b

o

x

A

boxA

boxA

b

o

x

B

boxB

boxB 融合得到

b

o

x

C

boxC

boxC,如图所示:

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

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

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


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

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

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

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

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

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

按照上述说法,我们分别把 7 号框与 fusionAfusionB 的框做 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 的能力有限,毕竟它还得依赖于网络输出结果,并不能颠覆这个结果。

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

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

Yemiekai

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐