← all repositories
rmsalinas/fbow

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.

620 stars C++ Computer Vision
fbow
Velocity · 7d
+0.2
★ / day
Trend
steady
star history

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 tests directory; 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.

heatdrop uses Google Analytics to see which pages get read — nothing else. Your call. How we handle data.