DeepStream 9.1: nvtracker overwrites unique_component_id on interval frames when several detectors share class_id=0

Please provide complete information as applicable to your setup.

Hardware Platform (Jetson / GPU): NVIDIA GeForce RTX 2070 Mobile (TU106M), Compute Capability 7.5, 8 GB VRAM
DeepStream Version: 9.1.0
JetPack Version: N/A (discrete GPU)
TensorRT Version: 10.16
NVIDIA GPU Driver Version: 575.51.03
Issue Type: Question
How to reproduce the issue: N/A, this is a configuration/usage question. Details below.
Requirement details: N/A

I have a pipeline with four nvinfer models chained before an nvtracker:

nvstreammux → pgie_a → sgie_a → sgie_b → sgie_c → nvtracker → tiler

The gie-unique-ids are: pgie_a = 4, sgie_a = 13, sgie_b = 12, sgie_c = 11. All four models output class_id = 0, and all four have interval=5.

**All models are custom trained Yolo26 models

Observed behavior**

I put pad probes on each element and print unique_component_id, class_id and object_id for every object.

  • On inference frames (e.g. frame 518), all four models produce correct detections. The sgie_c output has components 11, 12, 13 and 4, all with object_id = UNTRACKED_OBJECT_ID (18446744073709551615), as expected.
    ===== PROBE: pgie_a =====

    Frame 518

    component=4 class=0 object_id=18446744073709551615
    ===== PROBE: sgie_a =====

    Frame 518

    component=13 class=0 object_id=18446744073709551615

    component=4 class=0 object_id=18446744073709551615
    ===== PROBE: sgie_b =====

    Frame 518

    component=12 class=0 object_id=18446744073709551615

    component=13 class=0 object_id=18446744073709551615

    component=4 class=0 object_id=18446744073709551615
    ===== PROBE: sgie_c =====

    Frame 518

    component=11 class=0 object_id=18446744073709551615

    component=12 class=0 object_id=18446744073709551615

    component=13 class=0 object_id=18446744073709551615

    component=4 class=0 object_id=18446744073709551615

  • On that same frame, nvtracker outputs the right four components (11, 12, 13, 4) with tracker ids 0, 1, 3, 4.
    ===== PROBE: nvtracker =====

    Frame 518

    component=11 class=0 object_id=0

    component=12 class=0 object_id=1

    component=13 class=0 object_id=3

    component=4 class=0 object_id=4

  • On the frames between inference frames (e.g. 512–517, 519–524), the tracker outputs four objects with ids 4, 3, 1, 0, but all four are component=11, the id of the last GIE in the chain (sgie_c).
    ===== PROBE: nvtracker =====

    Frame 520

    component=11 class=0 object_id=4

    component=11 class=0 object_id=3

    component=11 class=0 object_id=1

    component=11 class=0 object_id=0

  • The result is that most of the frames downstream of the tracker have every detection labeled as sgie_c id 0, even though the detections came from four different models.

What works

  • Removing nvtracker: everything works correctly, including with the intervals.
  • Setting the pgie_a model’s interval to 0 also gives the expected behavior .
  • Earlier in the pipeline, I have the same pgie → sgie setup with interval=5 and other models, and it works fine, it uses the same tracker at the end of the pipeline.

What I think is happening

Since every model uses class_id = 0, my guess is that nvtracker can’t distinguish objects from different GIEs, and the objects it predicts on skipped frames get a single unique_component_id. I’m not sure this is the actual mechanism.

Questions

  1. Is it expected that nvtracker changes unique_component_id on tracker-predicted objects on skipped frames?
  2. Is having multiple detectors with interval > 0 and identical class_id values feeding one tracker unsupported?
  3. Is the class_id remap the recommended approach, or is there a tracker property (e.g. operate-on-gie-id, operate-on-class-ids) or a config setting that handles this?

Please share the config file of nvtracker. What is the value of checkClassMatch in your config file?