ObjectTracker stops working when track_thresh > 0.8 in DeGirum Tools

Hi everyone

I’m currently using DeGirum Tools to run an object detection model on my local device.
The inference works perfectly when I attach an ObjectTracker with track_thresh=0.8.
However, when I increase the threshold to 0.9, all tracking IDs disappear — the bounding boxes still appear, but the tracker no longer assigns IDs or shows trails.

Here’s a simplified version of my code

from degirum_tools import (
    ModelSpec, predict_stream, Display,
    ObjectTracker, attach_analyzers, AnchorPoint
)

# Local model details (paths sanitized)
LOCAL_MODEL_NAME = "my_model"
LOCAL_ZOO_PATH = "file:///path/to/resource"

# Load model
model_spec = ModelSpec(
    model_name=LOCAL_MODEL_NAME,
    zoo_url=LOCAL_ZOO_PATH,
    inference_host_address="@local",
    model_properties={"device_type": ["HAILORT/HAILO8"]},
)

# Configure tracker
tracker = ObjectTracker(
    class_list=['log'],
    track_thresh=0.9,          # Works at 0.8, fails at 0.9
    track_buffer=120,
    match_thresh=0.80,
    trail_depth=10,
    anchor_point=AnchorPoint.BOTTOM_CENTER,
)

try:
    model = model_spec.load_model()
    print("Load model complete.")

    attach_analyzers(model, [tracker])
    print("ObjectTracker attached successfully.")

    VIDEO_SOURCE = "rtsp://<camera_url>"  # sanitized
    print(f"Start inference on RTSP Stream: {VIDEO_SOURCE}")

    with Display("AI Camera — IP Stream", w=1020, h=640) as disp:
        for result in predict_stream(model, VIDEO_SOURCE):
            disp.show(result.image_overlay)

    print("Stop Inference")

except Exception as e:
    print(f"Load error: {e}")

I set track_thresh=0.9 because at lower values (like 0.8), the bounding boxes are less accurate and often cover part of the background. But once I go above 0.8, tracking IDs completely disappear.

I have another question: how can I delete this menu?

251104_16h37m49s_screenshot

Hi @Assachan_sanepaserth

When you say “bounding boxes still appear”: do all the bounding boxes have score>0.9?

@Assachan_sanepaserth ,

Original BYTETrack algorithm, which is used in ObjectTracker uses two thresholds: detection threshold and tracking threshold. The tracking threshold you pass as constructor argument, and detection threshold is calculated as tracking threshold + 0.1. That 0.1 provides hysteresis. Tracker starts tracking objects with confidence greater than detection threshold, and continues to actively track objects above tracking threshold, while keeping eye on objects above 0.1 threshold (so-called seconds). You may read more here: FoundationVision/ByteTrack: [ECCV 2022] ByteTrack: Multi-Object Tracking by Associating Every Detection Box.

So, when you specify tracking threshold as 0.9, tracking threshold + 0.1 becomes 1.0, and all objects are discarded. Bottom line: 0.9 is maximum, you should use lower than 0.9.