Weighted Boxes Fusion

Weighted Boxes Fusion: ensembling boxes for object detection models

1 简介

文章地址https://arxiv.org/abs/1910.13302, 对应的github代码https://github.com/ZFTurbo/Weighted-Boxes-Fusion

2 算法模块

1 参考代码流程,主函数输入 weighted_boxes_fusion(boxes_list, scores_list, labels_list, weights=None, iou_thr=0.55, skip_box_thr=0.0, conf_type=‘avg’, allows_overflow=False),其中iou_thr对应iou阈值;skip_box_thr是对应每个框的得分,如果小于这个值就舍去这个框;weights是对应不同模型取不同的权重,如果是None,则默认每个模型权重一样都是1;
2 对于输入的boxes,scores,labels,通过函数 prefilter_boxes(boxes, scores, labels, weights, thr),将不同模型同一个label的框合并到一起,做后续处理,这里的thr就是上一步的skip_box_thr,小于这个阈值框被舍弃
3 然后就是对每个label的框进行处理,通过计算两个框的iou,iou大于iou_thr,那么这两个框进行融合,通过函数 get_weighted_box(boxes, conf_type=‘avg’),也就是核心部分,第一步是得分融合,type分为avg和max;对于框的坐标融合,是将框坐标和对应的得分相乘,之后求和在除以融合后的得分(这一块,作者也提到或许有别的方法进行框融合we can use some nonlinear weightslikeC2to check if it is better or not etc),并将所有进行融合的原始框保存起来,融合后的框保存起来
4 对融合后的框得分再进行rescale,也就是考虑模型数量和原始框数量,也就是融合后的得分乘以原始框数量和总模型的数量的较小值,然后在除以所有模型的数量,如下 weighted_boxes[i][1] = weighted_boxes[i][1] * min(weights.sum(), len(new_boxes[i])) / weights.sum()(这里weights就是代表每个模型的权重,这里默认是1)
5 以上步骤就得到最终结果。这里作者提出几个改进,第一个是wbf可以用在一般nms或者softnms之后(这里好像是说nms对应的conf_type是max,soft-nms对应的conf_type是avg);第二个是如果两个模型得分相差太大,会有问题,这个可以事先对得分进行归一化处理;第三个是wbf计算效率比nms慢3倍左右,可能是因为代码里面很多都是循环计算

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值