Bag of Words at 80× speed: hand-tuned SIMD over academic C++
A drop-in replacement for DBOW2/3 that trades generality for raw vectorized throughput.

What it does FBOW rebuilds the DBOW2/DBOW3 visual bag-of-words pipeline with one goal: speed. It generates and loads vocabularies, converts images to BoW vectors, and supports both binary and floating-point descriptors. The API surface is deliberately narrow — OpenCV is the only dependency.
The interesting bit The author didn’t just optimize hot loops; they wrote separate SIMD paths for AVX, SSE, and MMX, plus distinct code paths for binary vs. real-valued descriptors. Vocabulary loading hits ~80× over DBOW2, and AVX-equipped machines see ~6.4× faster image-to-BoW conversion. That’s not algorithmic cleverness — it’s aggressive, tedious instruction-level tuning that most academic code skips.
Key highlights
- Single dependency: OpenCV only
- SIMD specialization for binary and float descriptors across AVX/SSE/MMX
- Pre-built ORB vocabulary included in repo
- Corrects bugs found in DBOW2/3’s dictionary creation
- MIT licensed
Caveats
- Image indexing (a core DBOW2/3 feature) is not yet implemented
- Speedups are self-reported from the
testsdirectory; no independent benchmarks cited - “Extremmely” appears twice in the README, which may or may not correlate with optimization thoroughness
Verdict Worth a look if you’re already using DBOW2/3 and bottlenecked on vocabulary I/O or BoW encoding — especially with AVX hardware. Skip it if you need the missing image indexing, or if your descriptors and pipeline aren’t already OpenCV-native.