zoukankan      html  css  js  c++  java
  • 加权框融合 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)

  • 相关阅读:
    主库binlog(master-log)与从库relay-log的关系
    binlog_format不同模式下,对mysqlbinlog恢复的影响
    主从 binlog_format 设置关系
    Mysql5.7多源复制,过滤复制一段时间后增加复制一个库的实现方法
    mysql 5.7安装过程中,初始化的问题
    mysql复制过滤参数说明
    模块化发展
    Angular指令内容小结
    vue项目打包到腾讯云服务器全过程
    Centos7安装Mysql5.7
  • 原文地址:https://www.cnblogs.com/cy0628/p/15568398.html
Copyright © 2011-2022 走看看