
Weighted-Boxes-Fusion
多模型检测结果融合,提升目标检测精度
项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-08-10 · 当前星标 ★ 1832
技术标签
使用教程
环境要求
- Python 3.*
- 已安装 pip
- 依赖 Numpy 与 Numba(pip 安装时自动处理)
- 目标检测模型的预测框需归一化到 [0,1] 区间
安装与启动步骤
-
1安装 ensemble-boxes
README 给出的唯一安装方式是通过 pip 从 PyPI 安装该库,会自动带上 Numpy、Numba 依赖。建议在虚拟环境中安装避免污染全局环境。
pip install ensemble-boxes -
2验证导入
安装完成后确认包能正常导入且函数可访问,import * 会带入 nms、soft_nms、non_maximum_weighted、weighted_boxes_fusion 等方法。
python -c "from ensemble_boxes import *; print('ok')" -
3准备各模型预测结果
把每个模型的框整理成列表:boxes_list 为归一化 [x1,y1,x2,y2],scores_list 为置信度,labels_list 为类别标签,三者嵌套层级要对应。
-
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开发环境与测试(可选)
想改源码或跑测试时,先克隆仓库并用 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
上一篇:photonix
同类项目推荐
kraken
开源
多语言古籍手写文本,一键转成可编辑文字
OCR engine for all the languages
Awesome-LLMs-for-Video-Understan···
开源
一页看全视频大模型论文代码数据集
[IEEE TCSVT] Latest Papers, Codes and Datasets on Vid-LLMs.
MiniCPM-OCR
开源
图片转文字,还告诉你识别得准不准
Fast, accurate OCR with correctness assessment.
QMUPD
开源
无需配对数据,自动生成高质量人像线条画
Code for TPAMI "Quality Metric Guided Portrait Line Drawing Generation from Unpaired···
GammaCV
开源
浏览器里用 GPU 跑图像处理,实时滤镜和特征提取不卡顿
GammaCV is a WebGL accelerated Computer Vision library for browser
EMLight
开源
单图秒出光照环境贴图,让虚拟物体无缝融入真实场景
[AAAI 2021] EMLight: Lighting Estimation via Spherical Distribution Approximation, [···
obs-backgroundremoval
开源
无需绿幕,直播录屏实时抠像换背景
An OBS plugin for removing background in portrait images (video), making it easy to ···
awesome-yolo-object-detection
开源
一份清单,快速找到你想要的 YOLO 模型和数据集。
A collection of some awesome public YOLO object detection series projects and the re···
computer-vision-challenge
开源
边做边学,用Jupyter玩转计算机视觉经典任务
A hands-on collection of computer vision projects for everyone.