releasing 2.6.0 - #536
Merged
Merged
Conversation
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.
v2.6.0: McByte and dynamic frame rate
📋 Summary
trackers v2.6.0 adds
McByteTracker, a new mask-conditioned tracker that extends BoT-SORT-styleassociation with SAM/Cutie temporal segmentation masks as an extra matching cue. It also adds
dynamic frame rate support (
timestamp=onupdate()) for all six trackers, tightenstrack-lifecycle validation with two breaking changes, fixes nine correctness bugs, and hardens ZIP
extraction against path traversal (CWE-22).
✨ Spotlights / highlights
McByteTracker
Mask-conditioned association via SAM (box→mask) + Cutie (temporal mask propagation), opt-in via
pip install trackers[mask]. Defaultenable_mask_manager=Falseruns ByteTrack-parity with noextra weights required.
Dynamic frame rate via
timestamp=Elapsed wall-clock seconds convert into Kalman frame units; omitting
timestamppreserves theexisting fixed-rate behavior.
Breaking: stricter lifecycle validation
Tracker performance improvements
CMC's sparse optical-flow status filter is now vectorized (~24x on that op);
KalmanMotionModelcaches transition/noise matrices and defers DWNA calibration (~38% lower BoT-SORT/CBIoU predict
cost).
Security: hardened ZIP extraction
Dataset-download ZIP extraction rejects archive members with absolute paths, traversal segments,
or Windows backslash paths (Zip Slip / CWE-22).
🔄 Migration guide
Breaking changes
lost_track_buffer/frame_ratenow validatedSORTTracker,ByteTrackTracker,OCSORTTracker,BoTSORTTracker, andCBIoUTracker(whichforwards its constructor args to
BoTSORTTracker) now raiseValueErrorat construction iflost_track_bufferis negative orframe_rateis not finite and positive.lost_track_buffer=0remains valid (no missed-frame grace period).Missed-frame boundary is now inclusive
Confirmed tracks now survive one additional missed frame — comparison changed from
time_since_update < maximum_frames_without_updatetotime_since_update <= maximum_frames_without_update(the frame-rate-scaled form oflost_track_buffer), matchingOC-SORT's prior behavior. Expect small IDSW/HOTA shifts when comparing metrics across versions.
Behavior changes (non-breaking)
Unmatched sub-activation-threshold detections are now emitted
ByteTrackTracker,BoTSORTTracker, andCBIoUTracker.update()now return detections betweenthe two confidence thresholds (below
track_activation_thresholdbut abovehigh_conf_det_threshold) withtracker_id=-1instead of dropping them.📝 Notable changes
🚀 Added
McByteTracker— mask-conditioned tracker combining SAM box-mask generation and Cutie maskpropagation with BoT-SORT-style association; exported from
trackersalong withMcByteMaskConfig. Newtrackers[mask]extra (torch,torchvision,rf-segment-anything,rf-cutie[inference];rf-cutienow ships on PyPI instead of git). Device selection defaults to"auto"(CUDA → MPS → CPU). Frames are expected in RGB (other trackers expect BGR).([McByte part 1] Add McByte tracker skeleton #388, [McByte part 2] Feat/mcbyte mask manager #418, [McByte part 3] Add SAM box mask generator #441, [McByte part 4] Add Cutie mask propagator #452, [McByte part 5] Add dynamic mask lifecycle support for Cutie #459, [McByte part 6] Mask manager lifecycle wiring #481, [McByte part 7] Mask manager delayed mask creation #491, [McByte part 8] Complete McByte with mask-conditioned association #508, feat: McByteTracker [rebase & merge] #513, docs(mcbyte): schema figures, mask scoring, tuning #519–perf(mcbyte): default-off precision/compile knobs #526, feat(mcbyte): defer short-lived mask creation #529, fix(mcbyte): advance the miss clocks from the predict timing #532)
timestamp=onBaseTracker.update()— all six trackers convert elapsedwall-clock seconds into Kalman frame units and prune lost tracks on a seconds budget. (Feat/dynamic frame rate integration #446)
KalmanMotionModelintrackers.utils.motion_models— supplies KalmanF/Qfor a givenframe_step.ValueError—lost_track_buffermust benon-negative and
frame_ratefinite and positive across all five classic trackers (SORT,ByteTrack, OC-SORT, BoT-SORT, CBIoU). (Unify lost track buffer semantics #420)
to inclusive to match OC-SORT. (Unify lost track buffer semantics #420)
🌱 Changed
KalmanMotionModelcaches matrices (~38% lower BoT-SORT/CBIoU predict cost), predicted boxescached across association stages, KF-copy trimming. (feat(mcbyte): MPS support + Cutie streaming cfg #522, perf(kf): trim KF copies + OCSORT assoc hygiene #527, perf(assoc): cache predicted boxes across stages #528)
hatchling→setuptools(src-layout +py.typed); direct dependencyconstraint
pydeprecate>=0.7.0raised to>=0.8.0. (fix(pkg,ci): building package #492)🔧 Fixed
(fix(botsort): keep instant-activated tracks alive on a miss #478, fix(cbiou): keep instant-activated tracks alive on a miss #504)
instead of silently dropping them. (fix(bytetrack): return unmatched detections between the two confidence thresholds #475)
[0, 1]before score fusion. (fix(iou): clamp signed-variant fusion normalization to [0, 1] #476)cv2.resizecrash on tiny downscaled images. (fix(cmc): prevent cv2.resize crash on tiny downscaled images #488)xcycsr_to_xyxy: prevent zero-division on zero-aspect boxes. (fix: prevent zero division inxcycsr_to_xyxyconverter #485)srclayout. (fix(pkg,ci): building package #492)🔒 Security
🏆 Contributors
confidence thresholds instead of dropping them.
Kalman scale fix.
public API export, package build/publish fix.
xcycsr_to_xyxyzero-division fix.McByte tracker end-to-end: skeleton, dynamic Cutie mask lifecycle management, mask-conditioned
association.
01_side_by_side.mp4
03_moment_of_decision.mp4
04_how_the_mask_decides.mp4
Full changelog: 2.5.0...2.6.0