Weighted-Boxes-Fusion

多模型检测结果融合,提升目标检测精度

Weighted-Boxes-Fusion 是一个用于目标检测模型集成预测的 Python 库,核心实现了论文《Weighted boxes fusion (WBF)》中的方法。它解决的是多个目标检测模型对同一图像产生不同预测框时,如何融合这些结果以获得更准确、更鲁棒的检测输出问题。该库提供了多种框融合算法,包括非极大值抑制(NMS)、软非极大值抑制(Soft-NMS)、非极大值加权融合(NMW)以及 WBF,其中 WBF 通过加权融合所有框的坐标和置信度,能有效处理重叠框,提升检测精度,尤其在模型集成场景下效果显著。其 API 简洁,支持 numpy 数组输入,易于集成到现有检测流程中。

开源 free 计算机视觉
访问官网 ↗ GitHub ↗ 文档 ↗
GitHub 星标 ★ 1829
维护状态 维护中
是否开源 是
定价模式 free

项目数据

分类计算机视觉
开发团队ZFTurbo
所属国家
官网地址
定价模式free
价格说明开源项目,MIT许可证,完全免费,无付费版本。
访问状态
是否开源是
开源协议MIT
主要语言Python
技术栈/模型boxes,ensemble-prediction,object-detection
GitHub 星标★ 1829
30天Star增速
HF 下载量
上线时间2019-10-27 00:00:00
最近更新2026-09-11 00:00:00
维护状态维护中
中文支持
访问方式
移动端支持
综合评分
收录时间2026-08-10
浏览次数3

使用教程

难度:入门 约 10 分钟 部署方式:库/依赖 5 步

环境要求

  • Python 3.*
  • 已安装 pip
  • 依赖 Numpy 与 Numba(pip 安装时自动处理)
  • 目标检测模型的预测框需归一化到 [0,1] 区间

安装与启动步骤

  1. 1安装 ensemble-boxes

    README 给出的唯一安装方式是通过 pip 从 PyPI 安装该库,会自动带上 Numpy、Numba 依赖。建议在虚拟环境中安装避免污染全局环境。

    pip install ensemble-boxes
  2. 2验证导入

    安装完成后确认包能正常导入且函数可访问,import * 会带入 nms、soft_nms、non_maximum_weighted、weighted_boxes_fusion 等方法。

    python -c "from ensemble_boxes import *; print('ok')"
  3. 3准备各模型预测结果

    把每个模型的框整理成列表:boxes_list 为归一化 [x1,y1,x2,y2],scores_list 为置信度,labels_list 为类别标签,三者嵌套层级要对应。

  4. 4调用融合方法

    按 README 示例调用 weighted_boxes_fusion 做 WBF 融合,或用 nms / soft_nms / non_maximum_weighted。weights 长度需与模型数量一致,此处两个模型权重设为 [2,

    from ensemble_boxes import *
    
    boxes_list = [[
        [0.00, 0.51, 0.81, 0.91],
        [0.10, 0.31, 0.71, 0.61],
        [0.01, 0.32, 0.83, 0.93],
        [0.02, 0.53, 0.11, 0.94],
        [0.03, 0.24, 0.12, 0.35],
    ],[ 
        [0.04, 0.56, 0.84, 0.92],
        [0.12, 0.33, 0.72, 0.64],
        [0.38, 0.66, 0.79, 0.95],
        [0.08, 0.49, 0.21, 0.89],
    ]]
    scores_list = [[0.9, 0.8, 0.2, 0.4, 0.7], [0.5, 0.8, 0.7, 0.3]]
    labels_list = [[0, 1, 0, 1, 1], [1, 1, 1, 0]]
    weights = [2, 1]
    
    iou_thr = 0.5
    skip_box_thr = 0.0001
    sigma = 0.1
    
    boxes, scores, labels = nms(boxes_list, scores_list, labels_list, weights=weights, iou_thr=iou_thr)
    boxes, scores, labels = soft_nms(boxes_list, scores_list, labels_list, weights=weights, iou_thr=iou_thr, sigma=sigma, thresh=skip_box_thr)
    boxes, scores, labels = non_maximum_weighted(boxes_list, scores_list, labels_list, weights=weights, iou_thr=iou_thr, skip_box_thr=skip_box_thr)
    boxes, scores, labels = weighted_boxes_fusion(boxes_list, scores_list, labels_list, weights=weights, iou_thr=iou_thr, skip_box_thr=skip_box_thr)
  5. 5开发环境与测试(可选)

    想改源码或跑测试时,先克隆仓库并用 setup 脚本创建名为 wbf 的虚拟环境,再执行 pytest 跑测试。

    git clone https://github.com/ZFTurbo/Weighted-Boxes-Fusion.git
    cd Weighted-Boxes-Fusion
    source setup_dev_env.sh
    python -m pytest tests/

关键配置

配置项必填说明示例
weights是每个模型的融合权重,长度与模型数量一致[2, 1]
iou_thr是判定两个框是否匹配的 IoU 阈值0.5
skip_box_thr否低于该置信度的框会被跳过(WBF/NMW 使用)0.0001
sigma否soft_nms 的高斯参数,控制衰减强度0.1
thresh否soft_nms 的置信度过滤阈值0.0001

如何确认成功

导入 ensemble_boxes 不报错,并跑通 README 示例,能打印出融合后的 boxes、scores、labels 三个数组即成功。

常见问题

Q:框的坐标应该是什么格式?

A:必须归一化到 [0; 1],顺序为 x1, y1, x2, y2(左上、右下)。如果用的是像素坐标,需先除以图像宽高。

Q:WBF 和 NMS 该选哪个?

A:README 指出 WBF 是相对其他方法效果更好的新方法,模型集成场景推荐用 weighted_boxes_fusion;只需单模型去重时用 nms 即可。

Q:weights 参数怎么设置?

A:weights 是一组长度等于模型数量的权重,权重越大表示该模型结果越被信任。示例中第一个模型权重 2、第二个为 1。

Q:各方法的参数不完全一样?

A:是的,soft_nms 用 thresh 和 sigma,nms/soft_nms/NMW 一般不接收 skip_box_thr(NMW 与 WBF 接收),请对照 README 示例传参。

Q:怎么跑自带测试?

A:克隆仓库后执行 source setup_dev_env.sh 创建 wbf 虚拟环境并装依赖,然后运行 python -m pytest tests/。

注意事项

  • boxes_list、scores_list、labels_list 必须一一对应,每个模型一个子列表,长度需一致。
  • 除 WBF 外还可选 NMS、Soft-NMS、NMW,用法与 WBF 类似,可按需切换。
  • 开发脚本 setup_dev_env.sh 依赖 source 方式执行,直接 sh 执行可能不生效。

核心亮点

  • 实现了多种融合算法(NMS、Soft-NMS、NMW、WBF),灵活选择
  • WBF 方法在公开数据集上验证能显著提升检测精度
  • API 简单,输入输出均为 numpy 数组,易于集成

不足之处

  • 主要针对二维图像框,未直接支持三维检测或分割结果
  • 文档和示例相对较少,社区规模较小

适用场景

  • 目标检测模型集成,提升竞赛或实际应用精度
  • 多模型预测结果融合,减少漏检和误检
  • 研究 WBF 算法效果对比实验

替代项目

Ensemble-Pytorch、NMS-Lib、Torchvision.ops.nms

项目介绍

Weighted-Boxes-Fusion 是计算机视觉领域的开源项目,由 ZFTurbo 开发,2019 年首次发布。

在全站 13,090 个收录项目中,它的 GitHub 星标数(1,829)位列前 30%,在计算机视觉分类中处于中上游。

项目仍在小幅维护中,最近一次代码更新于 2026-09-11。MIT许可证,完全免费,无付费版本。

它主要面向的使用场景是:目标检测模型集成,提升竞赛或实际应用精度。同类可对比的替代方案包括 Ensemble-Pytorch、NMS-Lib、Torchvision.ops.nms。

上一篇:photonix

下一篇:obs-backgroundremoval

同类项目推荐

modlens 开源

给纯文本编码代理装上眼睛,粘贴图片即刻获得结构化视觉证据。

The first vision plugin for DeepSeek Harness, and the vision bridge for every text-o···

★ 4019 2026-08-19
opencv 开源

开箱即用的视觉算法库,搞定图像视频处理与识别

Open Source Computer Vision Library

★ 90930 2026-08-10
OpenCVTutorials 开源

中文 OpenCV 教程,从入门到实战,边看边跑代码

OpenCV-Python4.1 中文文档

★ 1430 2026-08-20
DEIMv2 开源

用DINOv3做实时检测,又快又准,直接落地。

[DEIMv2] Real Time Object Detection Meets DINOv3

★ 2046 2026-08-14