• Hardware Platform ( Jetson nano )
• DeepStream Version 6.0
• JetPack Version (4.6)
• TensorRT Version 8.0.1
• Issue Type( questions )
Hi,
the main topic here is the necessity of reduce the frame rate of the Deepstream inference. We are developing a global application and need to share the Jetson nano resources with other areas/programs.
As global configuration:
USB camera: 640*480 - 30 FPS
PeopleNet at FP16
Primary-gie at interval at 0.
Actual maximum performance approx 11~12 FPS
Reading the documentation of the new Nvstreammux the configurable parameters of “overall max/min fps” limit the camera FPS of the stream between 8 and 6 FPS. We never see this FPS limitation, as we understand, you limit the FPS of the muxer, so to brute force yo need to be reduced the overall performance of the output. So the FPS to inference are limited to 8FPS, so if you inference in every each frame, you inference 8 frames per second, so you have a performance of 8FPS. I’m in the right line?
Share to us the nvstreammux configuration:
[nvstreammux]
batch-size=1
num-surfaces-per-frame=1
config-file-path=gst-nvstreammux2.txt
sync-inputs=0
max-latency=0
Nvstreammux configuration file:
[property]
enable=1
algorithm-type=1
batch-size=1
overall-max-fps-n=8
overall-max-fps-d=1
overall-min-fps-n=6
overall-min-fps-d=1
max-same-source-frames=1
adaptive-batching=0
[source-config-0]
max-fps-n=8
max-fps-d=1
min-fps-n=6
min-fps-d=1
priority=0
max-num-frames-per-batch=1
Deepstream output:
max_fps_dur 8.33333e+06 min_fps_dur 2e+08
gstnvtracker: Loading low-level lib at /opt/nvidia/deepstream/deepstream-6.0/lib/libnvds_nvmultiobjecttracker.so
gstnvtracker: Batch processing is ON
gstnvtracker: Past frame output is ON
[NvMultiObjectTracker] Initialized
0:00:04.009883558 14495 0x15e3d8c0 INFO nvinfer gstnvinfer.cpp:638:gst_nvinfer_logger:<primary_gie> NvDsInferContext[UID 1]: Info from NvDsInferContextImpl::deserializeEngineAndBackend() <nvdsinfer_context_impl.cpp:1900> [UID = 1]: deserialized trt engine from :/***/resnet34_peoplenet_pruned_2_3.etlt_b1_gpu0_fp16.engine
INFO: [Implicit Engine Info]: layers num: 3
0 INPUT kFLOAT input_1 3x544x960
1 OUTPUT kFLOAT output_bbox/BiasAdd 12x34x60
2 OUTPUT kFLOAT output_cov/Sigmoid 3x34x60
0:00:04.010076426 14495 0x15e3d8c0 INFO nvinfer gstnvinfer.cpp:638:gst_nvinfer_logger:<primary_gie> NvDsInferContext[UID 1]: Info from NvDsInferContextImpl::generateBackendContext() <nvdsinfer_context_impl.cpp:2004> [UID = 1]: Use deserialized engine model: /resnet34_peoplenet_pruned_2_3.etlt_b1_gpu0_fp16.engine
0:00:04.023211655 14495 0x15e3d8c0 INFO nvinfer gstnvinfer_impl.cpp:313:notifyLoadModelStatus:<primary_gie> [UID 1]: Load new model:/* sucessfully
Runtime commands:
h: Print this help
q: Quit
p: Pause
r: Resume
** INFO: <bus_callback:194>: Pipeline ready
** INFO: <bus_callback:180>: Pipeline running
max_fps_dur 8.33333e+06 min_fps_dur 2e+08
**PERF: FPS 0 (Avg)
**PERF: 12.15 (11.88)
**PERF: 11.40 (11.54)
**PERF: 11.39 (11.48)
We are missing some configuration? or only works with multiple streams? or we have a misunderstanding?
In any case, can we limit the FPS of the Deepstream inference in other way? we use in some cases the “interval” parameter, but give us performance stats divert of the reality. (ex. PERF 29FPS with an Interval=2 and camera FPS acquisition of 30FPS → your inference performance is 10FPS).
Thanks in advance.
Best Regards