-
Notifications
You must be signed in to change notification settings - Fork 0
Fusion Strategies
Gaurav14cs17 edited this page Jun 21, 2026
·
1 revision
FlashFusion provides multiple fusion strategies for combining predictions from multiple models.
| Strategy | Key | Best For |
|---|---|---|
| Weighted Box Fusion | wbf |
Detection ensembles (best mAP) |
| Voting Ensemble | voting |
Classification consensus |
| Cascade Fusion | cascade |
Sequential refinement |
| Stacking Ensemble | stacking |
Learned combination |
| NMS Fusion | nms |
Fast duplicate removal |
WBF merges overlapping boxes using confidence-weighted averaging. It produces more accurate localizations than NMS by averaging coordinates rather than selecting a single box.
from flashfusion.strategies import WeightedBoxFusion
wbf = WeightedBoxFusion(
weights=[0.6, 0.4], # per-model importance
iou_threshold=0.55, # clustering threshold
skip_box_threshold=0.01, # minimum confidence
conf_type="avg", # 'avg', 'max', 'box_and_model_avg'
)
fused = wbf.fuse(model_outputs)- Collect all boxes from all models with associated weights
- Sort by weighted confidence
- Cluster overlapping boxes (IoU > threshold) with same class
- Compute weighted average coordinates for each cluster
- Return cluster centers as fused detections
Majority voting for classification or box selection based on agreement across models.
from flashfusion.strategies import VotingEnsemble
voting = VotingEnsemble()
fused = voting.fuse(model_outputs)Sequential pipeline where each stage refines the previous output.
from flashfusion.strategies import CascadeFusion
cascade = CascadeFusion()
# Stage 1 proposes, Stage 2 refines
fused = cascade.fuse([coarse_output, refined_output])Standard Non-Maximum Suppression applied across all model predictions.
from flashfusion.strategies import NMSFusion
nms = NMSFusion()
fused = nms.fuse(model_outputs)Learned meta-model that combines base model outputs.
from flashfusion.strategies import StackingEnsemble
stacking = StackingEnsemble()
fused = stacking.fuse(model_outputs)Use get_strategy() to instantiate by name:
from flashfusion.strategies import get_strategy
strategy = get_strategy("wbf", weights=[0.5, 0.5], iou_threshold=0.6)Register your own strategy via the registry:
from flashfusion.registry import STRATEGIES
@STRATEGIES.register("my_fusion")
class MyFusion:
def fuse(self, predictions, weights=None):
# Your fusion logic here
...Use the benchmark example to compare strategies:
python examples/benchmark_fusion.py --device cudaFlashFusion — Multi-model vision fusion | PyPI | MIT License