feat(reid): appearance ReID association via standalone reid package#511
Open
AlexBodner wants to merge 36 commits into
Open
feat(reid): appearance ReID association via standalone reid package#511AlexBodner wants to merge 36 commits into
AlexBodner wants to merge 36 commits into
Conversation
Add the optional trackers[reid] extra (git-pinned roboflow-reid during review) plus the lazy trackers._reid boundary that resolves reid.ReIDModel on demand. Ship association-only, torch-free modules under trackers.core.reid: the ReIDEncoder protocol, FeatureBank (per-track EMA), and appearance_similarity / extract_detection_embeddings. The model stack (encoder, weights, preprocessing, catalog, gallery eval) lives in the standalone reid package and is never vendored. Co-authored-by: Cursor <cursoragent@cursor.com>
Add appearance-IoU fusion (botsort/fusion.py) and wire it into BoT-SORT's
first and unconfirmed association stages, gated by proximity (standard IoU)
and appearance thresholds. Tracklets gain an optional per-track feature
bank; matched high-confidence detections update it. reid_model,
reid_ema_alpha, appearance_threshold, and proximity_threshold are new
BoTSORTTracker params; reid_model is excluded from CLI reflection.
Add --tracker.reid.{enable,model,device,architecture} CLI flags routed
through trackers._reid to reid.ReIDModel.from_pretrained. Importing BoT-SORT
stays torch-free (asserted by an isolation test). Add association/fusion/CLI
unit tests and a reid-backed integration smoke; docs and mkdocs nav cover
the association-only surface and link the model/eval stack out to reid.
CI installs the reid extra (unfrozen while the dep is a git pin).
Co-authored-by: Cursor <cursoragent@cursor.com>
- FeatureBank.update now L2-normalizes the incoming embedding and the resulting EMA, keeping the stored feature on the unit hypersphere (matches upstream BoT-SORT STrack.update_features). reid returns raw embeddings; normalization happens in the bank. Docstrings/tests updated. - Vectorize appearance._l2_normalize_rows. Co-authored-by: Cursor <cursoragent@cursor.com>
AlexBodner
force-pushed
the
feat/core/reid-consume-reid-package
branch
from
July 21, 2026 14:15
5afd3b9 to
fbbe664
Compare
…tion. Ports eval_trackers_reid from the reid-training branch with standalone reid imports and Colab-friendly private git installs for both trackers and re-ID. Co-authored-by: Cursor <cursoragent@cursor.com>
Exclude the default dev group from build/docs sync, authenticate git in integration/pytest workflows, and fix pre-commit failures in the ReID benchmark notebook and codespell config. Co-authored-by: Cursor <cursoragent@cursor.com>
Move the private git dependency to the reid extra only, avoid uv run re-syncing the dev group in build/docs jobs, and fix notebook JSON for pre-commit. Co-authored-by: Cursor <cursoragent@cursor.com>
State what trackers.core.reid covers positively, defer model/eval to the reid package, and drop subtractive architecture prose. Align install extra wording with develop (no roboflow-reid in prose). Co-authored-by: Cursor <cursoragent@cursor.com>
Add MOT17 val with/without ReID reference scores to the ReID API page and align the BoT-SORT optional ReID section with trackers docs style. Co-authored-by: Cursor <cursoragent@cursor.com>
Load frames by MOT index, use per-sequence FPS, re-encode to H.264 for notebook/Colab playback, and embed at the combined panel width. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Inline the optional reid import in the CLI like detection/tune, and keep all BoT-SORT ReID coverage in one test module. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Default proximity to the association matrix so callers only pass a separate standard-IoU gate when association uses GIoU/DIoU/CIoU. Co-authored-by: Cursor <cursoragent@cursor.com>
Match upstream BoT-SORT: one IoU compute, proximity mask from the pre-fusion matrix, score fusion only for association. Recompute only for IoU variants. Co-authored-by: Cursor <cursoragent@cursor.com>
Only compute standard IoU for ReID proximity when association uses a variant metric; plain IoU reuses the association matrix. Co-authored-by: Cursor <cursoragent@cursor.com>
One helper builds score-fused geometry plus optional appearance fusion, shared by first and unconfirmed association. Drop thin wrappers and redundant comments. Co-authored-by: Cursor <cursoragent@cursor.com>
Drop the duplicate prerequisite helper and reject --tracker.reid.architecture without --tracker.reid.model so bare architecture cannot load random weights. Co-authored-by: Cursor <cursoragent@cursor.com>
Use the published package name `reid` (git@main until PyPI), keep unit tests free of `--extra reid`, and clean up ReID association glue/docs/tests for the cutover. Co-authored-by: Cursor <cursoragent@cursor.com>
Drop redundant embedding validation, dead reset/is_initialized API, and defensive getattr; keep device="auto" for reid to resolve. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds optional appearance-ReID to BoT-SORT, sourcing the model stack from the standalone
reidpackage. Trackers ships only NumPy association glue (ReIDEncoder,FeatureBank,appearance_similarity,extract_detection_embeddings) plus BoT-SORT appearance–IoU fusion. Encoder weights, preprocessing, catalog, and gallery evaluation live inreidand are never vendored.This branch is rebased onto current
developand is independent of the earlier stacked ReID PRs (#480/#501/#502).Depends on publishing
reid(re-ID#1 is merged tomain; PyPI / public install still pending).Added things
trackers[reid]optional extra → temporary git pinreid @ git+…@mainuntil PyPI.reid.*in mypy overrides;uv.lockupdated.src/trackers/core/reid/, torch-free):ReIDEncoder,FeatureBank(BoT-SORT EMA L2 before/after blend),appearance_similarity,extract_detection_embeddings.reid.ReIDModelat use time (same pattern as detection); Importing BoT-SORT stays free ofreid/ torch (isolation test).reid_model,reid_ema_alpha,appearance_threshold,proximity_threshold.--tracker.reid.{enable,model,device,architecture}ontrackers track(BoT-SORT only).--extra reidrequired),@integrationsmoke with a realreid.ReIDModel, isolation test.docs/api/reid.md, install notes, BoT-SORT Appearance ReID section; eval notebook uses publictrackers[reid]install path.ci-tests.yml) syncs without--extra reid; integration (ci-integrations.yml) keeps--extra reid.Pre-merge checklist
reidto PyPI (dev / pre-release is fine).pyproject.tomlto a PyPI range (e.g.reid>=0.1.0,<0.2or the chosen pre-release pin) and refreshuv.lock.--extra reid(smoke should run, not skip).