Inconsistency Issues with NvTracker in DeepStream

• Hardware Platform : DGPU
• DeepStream Version : 6.2.0 **
• TensorRT Version : 8.5.2.2

• NVIDIA GPU Driver Version : 530.30.02

I am working with the DeepStream in python and have encountered inconsistency issues when using the NvTracker . I hope someone can provide guidance or possible solutions.

Problem Description : When I run object detection alone, it produces consistent and correct outputs. However, when I include the NvTracker , some object detections are missed in the frames and the values are inconsistent .

I need to get the object detection output with the trackID, instead I am getting tracker output.

I am using probe function in  Nvdsosd to get the output:

def osd_sink_pad_buffer_probe(self,pad,info,u_data):
    
        gst_buffer = info.get_buffer()
        
        batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(gst_buffer))
        l_frame = batch_meta.frame_meta_list



        while l_frame is not None:
            try:
                frame_meta = pyds.NvDsFrameMeta.cast(l_frame.data)
            except StopIteration:
                break

            frame_number=frame_meta.frame_num
            l_obj=frame_meta.obj_meta_list
            
            bboxes = []
            while l_obj is not None:
                try:
                    # Casting l_obj.data to pyds.NvDsObjectMeta
                    obj_meta=pyds.NvDsObjectMeta.cast(l_obj.data)

                except StopIteration:
                    break

                rect_params = obj_meta.rect_params

                top = int(rect_params.top)
                left = int(rect_params.left)
                b_width = int(rect_params.width)
                b_height = int(rect_params.height) 
                object_id =  int(obj_meta.object_id) 
                object_class = 1 if obj_meta.obj_label.strip() == "Face" else 0
                bboxes.append([left,top,left+b_width,top+b_height,object_id, object_class])

                try: 
                    l_obj=l_obj.next
                except StopIteration:
                       break

            self.bounding_boxes[frame_number] = bboxes

            try:
                l_frame=l_frame.next
            except StopIteration:
                break

        return Gst.PadProbeReturn.OK

Here object detection output is replaced by the tracker outputs.
Can anyone help me to get the object detection bounding box with Tracker ID.

Can you upgrade to latest DeepStream version 6.3?

Yes, nvtracker will filter the detected objector to avoid false positive: Gst-nvtracker — DeepStream 6.3 Release documentation

nvtracker is filtering False Positives but true positives are also being missed from tracker output
Is there a way we can get the Object detection output with the Tracker ID .
I dont want to get rid of any detection from object detector.

Is there a feature in Deepstream 6.3 that solves my problem?

Can you have a try with probationAge=0? Which tracker are you use in your project? You can also tune minDetectorConfidence if probationAge=0 isn’t enough in your project. Please refer: NvMultiObjectTracker Parameter Tuning Guide — DeepStream 6.3 Release documentation

I am using NVDCF in performance mode:

probation period = 0
minDetectorConfidence = 0

Yet its dropping the bounding box
When i reduce the minMatchingScore4VisualSimilarity score from 0.7 to 0.2 , I can see that there is no drop,
Theoretically it was not supposed to drop any bounding box, It has to provide different track ID.
I am missing anything here?
Reducing the minMatchingScore4VisualSimilarity will have other impact in the tracking.

Glad to know you fixed BBox drop issue. We need tune nvtracker parameters based on the use case.