Nvtracker/ Nvdsanalytics Not Working at 50 fps?

Please provide complete information as applicable to your setup.

• Hardware Platform (Jetson / GPU)

- Jetson AGX Orin 64 MB Devkit

• DeepStream Version

- Deepstream 6.1

• JetPack Version (valid for Jetson only)

- JetPack 5.0.1

• TensorRT Version

- TensorRT 8.4

• Issue Type( questions, new requirements, bugs)

- Questions, possible bugs.

• How to reproduce the issue ? (This is for bugs. Including which sample app is using, the configuration files content, the command line used and other details for reproducing)

- Using python sample apps: deepstream-nvdsanalytics and deepstream-test3.
- Model was initially a yolov5s model (.pt). Exported to TensorRT and deployed using Deepstream-Yolo to make the config file for the nvinfer plugin.

• Requirement details( This is for new requirement. Including the module name-for which plugin or for which sample application, the function description)

- Need to be able to run 50 fps video through an app that resembles the deepstream-nvdsanalytics app using our custom model.
- The model runs fine on deepstream-test3 at the 50 fps range. I looked through the code for deepstream-nvdsanalytics and am confused why the same video and same model are performing so poorly.
- I tested the same video slowed down to 0.25X speed through the nvdsanalytics app and saw improved results, is there a setting I’m missing to handle 50 fps?

Can you share some video to show the issue? Is it possible to provide reproduce?

Cannot share the video due to it being proprietary, but I will do my best to expand on how to reproduce the issue further.

I am running a custom yolov5s model that was converted to a tensorrt engine file using the cfg and wts files produced by the Deepstream-yolo repo (GitHub - marcoslucianops/DeepStream-Yolo: NVIDIA DeepStream SDK 6.1 / 6.0.1 / 6.0 configuration for YOLO models).

When I run the converted model through the deepstream-test3 example, it runs fine. The performance dips slightly when compared to running the model as a native yolo detector, but it is within an acceptable range.

However, when I run the same model, with an identical pgie config file, through the deepstream-nvdsanalytics example it detects very little. If I slow the video down significantly, it detects more accurately.

I did not need to do this for deepstream-test3, and as far as I can tell deepstream-nvdsanalytics is set up the same as test3 as far as the inference is concerned. Have I hit a limitation within deepstream by adding nvtracker and nvdsanalytics?

Both deepstream-test3 and deepstream-nvdsanalytics are being used untouched (aside from changing the pgie config file to use our model and changing the classes in the code to reflect this change).

How you slow the video down? What is the mean of accurate? Do you mean miss bound box or analytics output isn’t accurate? Can you reproduce the issue with sample video in: /opt/nvidia/deepstream/deepstream/samples/streams/?

If anyone encounters this post in the future, the solution was to go into "config_tracker_NvDCF_perf.yml and change the “probationAge” on line 29 to “0”.

This is not a perfect solution, my model still seems to be performing worse than it did in test3 by itself without the tracker.

I will ask again if I am missing any other pertinent parameters in these config files? I’ve looked through most everything in the code and in documentation and this was the only change I could think to make.

I will go ahead and answer the above questions now:

  • I slowed the video down by processing it through Adobe Media Encoder on a separate device. I slowed it down to 1/4th speed, all codecs and video parameters were left untouched.
  • When I say accurate I mean that a bounding box does not appear and also there is no output for analytics in the terminal.
  • I cannot reproduce the issue with the sample video … No. When I run the sample app with the original config and the original sample video it works fine.

There is no update from you for a period, assuming this is not an issue anymore.
Hence we are closing this topic. If need further support, please open a new one.
Thanks

Yes, you can tuning below parameter for create and terminate object. such as set probationAge to 0 and minIouDiff4NewTarget to 1. We can provide more help if we can reproduce it in my side.

[Creation & Termination Policy]

minIouDiff4NewTarget: 0.5 # If the IOU between the newly detected object and any of the existing targets is higher than this threshold, this newly detected object will be discarded.
minTrackerConfidence: 0.2 # If the confidence of an object tracker is lower than this on the fly, then it will be tracked in shadow mode. Valid Range: [0.0, 1.0]
probationAge: 0 # If the target’s age exceeds this, the target will be considered to be valid.
maxShadowTrackingAge: 30 # Max length of shadow tracking. If the shadowTrackingAge exceeds this limit, the tracker will be terminated.
earlyTerminationAge: 1 # If the shadowTrackingAge reaches this threshold while in TENTATIVE period, the target will be terminated prematurely.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.