Hi,
Just to give a quick background, we are trying to assess the performance levels of NVIDIA GPUs for an analytics application. The Resnet10 seems to be too simplified model for any practical use. Similarly, using a tiled output is of no use in many scenarios. The sample deepstream-app performs reasonably well (and appears to process even upto 30 FPS). What we want to do is process 8+ independent RTSP streams and output 8+ RTSP streams.
We have modified the application slightly:
(1) To fix the issue of application crash when more than one sink is used in the code create_pipeline() of deepstream_app.c, patch released by NVIDIA is used.
(2) We also have included the NVIDIA nvdsanalytics and nvof plugins in the pipeline. However, they are disabled as far this testing (as seen in the config file).
The machine configuration is:
CPU: Ryzen 9 3900X, (12 Cores, 24 Threads)
Memory: 64GB
GPU: ZOTAC GAMING GeForce RTX 2080 Ti Twin Fan 11GB GDDR6
With this configuration, when we run the application, we notice:
CPU: about 30% with load average between 4-8, GPU: about 50%, just 30% memory being used and FPS reduced to about 15. The problem is not just the low FPS but also the Jitter, large delay in output streams when compared to inputs. So, something is not right with the model/pipeline or we are missing something. Appreciate your inputs. Here is the config file:
[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5
#gie-kitti-output-dir=streamscl
[tiled-display]
enable=0
rows=2
columns=2
width=1280
height=720
gpu-id=0
nvbuf-memory-type=0
[source0]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
type=3
#uri=file://…/streams/sample_1080p_h264.mp4
#uri=file://…/streams/Dog4727.mp4
uri=rtsp://localhost:9000/
#uri=rtsp://192.168.2.68:9000/
num-sources=1
#drop-frame-interval=2
gpu-id=0
cudadec-memtype=0
[source1]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
type=3
#uri=file://…/streams/sample_1080p_h264.mp4
#uri=file://…/streams/Dog4727.mp4
uri=rtsp://localhost:9000/
#uri=rtsp://192.168.2.68:9000/
num-sources=1
#drop-frame-interval=2
gpu-id=0
cudadec-memtype=0
[source2]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
type=3
#uri=file://…/streams/sample_1080p_h264.mp4
#uri=file://…/streams/Dog4727.mp4
uri=rtsp://localhost:9000/
#uri=rtsp://192.168.2.68:9000/
num-sources=1
#drop-frame-interval=2
gpu-id=0
cudadec-memtype=0
[source3]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
type=3
#uri=file://…/streams/sample_1080p_h264.mp4
#uri=file://…/streams/Dog4727.mp4
uri=rtsp://localhost:9000/
#uri=rtsp://192.168.2.68:9000/
num-sources=1
#drop-frame-interval=2
gpu-id=0
cudadec-memtype=0
[source4]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
type=3
#uri=file://…/streams/sample_1080p_h264.mp4
#uri=file://…/streams/Dog4727.mp4
uri=rtsp://localhost:9000/
#uri=rtsp://192.168.2.68:9000/
num-sources=1
#drop-frame-interval=2
gpu-id=0
cudadec-memtype=0
#latency=1000
[source5]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
type=3
#uri=file://…/streams/sample_1080p_h264.mp4
#uri=file://…/streams/Dog4727.mp4
uri=rtsp://localhost:9000/
#uri=rtsp://192.168.2.68:9000/
num-sources=1
#drop-frame-interval=2
gpu-id=0
cudadec-memtype=0
#latency=1000
[source6]
enable=0
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
type=3
#uri=file://…/streams/sample_1080p_h264.mp4
#uri=file://…/streams/Dog4727.mp4
uri=rtsp://localhost:9000/
#uri=rtsp://192.168.2.68:9000/
num-sources=1
#drop-frame-interval=2
gpu-id=0
cudadec-memtype=0
#latency=1000
[source7]
enable=0
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
type=3
#uri=file://…/streams/sample_1080p_h264.mp4
#uri=file://…/streams/Dog4727.mp4
uri=rtsp://localhost:9000/
#uri=rtsp://192.168.2.68:9000/
num-sources=1
#drop-frame-interval=2
gpu-id=0
cudadec-memtype=0
#latency=1000
[sink0]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=0
sync=0
#iframeinterval=10
bitrate=4000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
#set below properties in case of RTSPStreaming
rtsp-port=5000
udp-port=5400
source-id=0
#link-to-demux=1
[sink1]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=0
sync=0
#iframeinterval=10
bitrate=4000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
#set below properties in case of RTSPStreaming
rtsp-port=5001
udp-port=5401
source-id=1
#link-to-demux=1
[sink2]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=0
sync=0
#iframeinterval=10
bitrate=4000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
#set below properties in case of RTSPStreaming
rtsp-port=5002
udp-port=5402
source-id=2
[sink3]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=1
sync=1
#iframeinterval=10
bitrate=4000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
#set below properties in case of RTSPStreaming
rtsp-port=5003
udp-port=5403
source-id=3
output-file=out.mp4
container=1
[sink4]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=1
sync=1
#iframeinterval=10
bitrate=4000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
#set below properties in case of RTSPStreaming
rtsp-port=5004
udp-port=5404
source-id=4
output-file=out.mp4
container=1
[sink5]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=1
sync=1
#iframeinterval=10
bitrate=4000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
#set below properties in case of RTSPStreaming
rtsp-port=5005
udp-port=5405
source-id=5
output-file=out.mp4
container=1
[sink6]
enable=0
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=1
sync=1
#iframeinterval=10
bitrate=4000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
#set below properties in case of RTSPStreaming
rtsp-port=5006
udp-port=5406
source-id=6
output-file=out.mp4
container=1
[sink7]
enable=0
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=1
sync=1
#iframeinterval=10
bitrate=4000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
#set below properties in case of RTSPStreaming
rtsp-port=5007
udp-port=5407
source-id=6
output-file=out.mp4
container=1
[osd]
enable=1
gpu-id=0
border-width=1
text-size=8
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=1
clock-x-offset=00
clock-y-offset=00
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0
[streammux]
gpu-id=0
##Boolean property to inform muxer that sources are live
live-source=1
batch-size=8
##time out in usec, to wait after the first buffer is available
##to push the batch even if the complete batch is not formed
batched-push-timeout=40000
##Set muxer output width and height
width=1920
height=1080
##Enable to maintain aspect ratio wrt source, and allow black borders, works
##along with width, height properties
enable-padding=0
nvbuf-memory-type=0
##If set to TRUE, system timestamp will be attached as ntp timestamp
##If set to FALSE, ntp timestamp from rtspsrc, if available, will be attached
#attach-sys-ts-as-ntp=1
#YoloV3
[primary-gie]
enable=1
gpu-id=0
model-engine-file=model_b8_gpu0_int8.engine
labelfile-path=labels.txt
batch-size=8
#Required by the app for OSD, not a plugin property
bbox-border-color0=1;0;0;1
bbox-border-color1=0;1;1;1
bbox-border-color2=0;0;1;1
bbox-border-color3=0;1;0;1
interval=0
gie-unique-id=1
nvbuf-memory-type=0
config-file=config_infer_primary_yoloV3.txt
[tracker]
enable=1
#For the case of NvDCF tracker, tracker-width and tracker-height must be a multiple of 32, respectively
tracker-width=640
tracker-height=384
#ll-lib-file=…/lib/libnvds_mot_iou.so
#ll-lib-file=…/lib/libnvds_nvdcf.so
ll-lib-file=…/lib/libnvds_mot_klt.so
#ll-config-file required for DCF/IOU only
#ll-config-file=tracker_config.yml
#ll-config-file=iou_config.txt
gpu-id=0
#enable-batch-process applicable to DCF only
enable-batch-process=1
[secondary-gie0]
enable=0
model-engine-file=…/models/Secondary_VehicleTypes/resnet18.caffemodel_b16_gpu0_int8.engine
gpu-id=0
batch-size=16
gie-unique-id=4
operate-on-gie-id=1
operate-on-class-ids=2;
config-file=config_infer_secondary_vehicletypes.txt
[secondary-gie1]
enable=0
model-engine-file=…/models/Secondary_CarColor/resnet18.caffemodel_b16_gpu0_int8.engine
batch-size=16
gpu-id=0
gie-unique-id=5
operate-on-gie-id=1
operate-on-class-ids=2;
config-file=config_infer_secondary_carcolor.txt
[secondary-gie2]
enable=0
model-engine-file=…/models/Secondary_CarMake/resnet18.caffemodel_b16_gpu0_int8.engine
batch-size=16
gpu-id=0
gie-unique-id=6
operate-on-gie-id=1
operate-on-class-ids=2;
config-file=config_infer_secondary_carmake.txt
[secondary-gie3]
enable=0
gpu-id=0
#model-engine-file=
batch-size=16
#Required by the app for OSD, not a plugin property
bbox-border-color0=0;0;1;1
bbox-border-color1=0;0;1;1
bbox-border-color2=0;0;1;1
bbox-border-color3=0;0;1;1
interval=0
gie-unique-id=8
operate-on-gie-id=1
operate-on-class-ids=0;
config-file=face_detection.txt
[tests]
file-loop=1
[analytics]
enable=0
config-file=…/configs/config_nvdsanalytics.txt
[opticalflow]
enable=0
motion-detection-threshold=50
motion-block-threshold=0