Übung: Ausführen einer NVIDIA DeepStream Graph Composer-Referenzanwendung
Werfen wir einen genaueren Blick auf den Workflow der IVA-Anwendung, der durch den DeepStream Graph Composer ermöglicht wird. Wir haben bereits erwähnt, dass das NVIDIA-Cloudrepository oder eine andere externe Registrierung Drag & Drop-Komponenten für die Verwendung in der DeepStream-Composer-Anwendung bereitstellen kann.
Mithilfe dieser Erweiterungen können Sie der Composer-Anwendung Features und Funktionen hinzufügen. Letztendlich können Sie dieses Tool verwenden, um IVA-Workloads mithilfe des gebündelten Containergenerators zu verpacken und zu verteilen. Im folgenden Diagramm wird der Prozess veranschaulicht.
Synchronisieren Sie zunächst mit dem öffentlichen Cloudrepository von NVIDIA, um die neuesten verfügbaren Erweiterungen zu nutzen. Führen Sie hierzu den folgenden Befehl in einem Terminal auf dem Hostcomputer aus:
registry repo sync -n ngc-public
Dieser Befehl erzeugt eine Ausgabe ähnlich der folgenden:
2021-09-13 21:32:39,127 - Registry - INFO - Syncing repo ngc-public ... 2021-09-13 21:32:41,022 - Registry - INFO - Syncing extension NvDsBaseExt version 0.0.1 2021-09-13 21:32:45,833 - Registry - INFO - Syncing extension NvDsAnalyticsExt version 0.0.1 2021-09-13 21:32:50,676 - Registry - INFO - Syncing extension NvDsCloudMsgExt version 0.0.1 2021-09-13 21:32:55,743 - Registry - INFO - Syncing extension NvDsConverterExt version 0.0.1 2021-09-13 21:33:00,579 - Registry - INFO - Syncing extension NvDsDewarperExt version 0.0.2 2021-09-13 21:33:05,283 - Registry - INFO - Syncing extension NvDsDewarperExt version 0.0.1 2021-09-13 21:33:10,300 - Registry - INFO - Syncing extension NvDsInferenceExt version 0.0.1 2021-09-13 21:33:15,899 - Registry - INFO - Syncing extension NvDsInferenceUtilsExt version 0.0.2 2021-09-13 21:33:20,574 - Registry - INFO - Syncing extension NvDsInferenceUtilsExt version 0.0.1 2021-09-13 21:33:25,722 - Registry - INFO - Syncing extension NvDsInterfaceExt version 0.0.1 2021-09-13 21:33:30,814 - Registry - INFO - Syncing extension NvDsMuxDemuxExt version 0.0.1 Repository synced
Überprüfen Sie mithilfe dieses Befehls, ob die Erweiterungen installiert und verfügbar sind:
registry extn list
Möglicherweise fällt Ihnen auf, dass viele dieser Erweiterungen mit Präfixen beginnen, die den von NVIDIA optimierten GStreamer-Plug-Ins im DeepStream SDK zugeordnet sind. Beispielsweise stellt die NvDsMuxDemuxExt-Erweiterung eine visuelle Komponente für die Interaktion mit Gst-nvstreamdemux zur Auswahl.
Öffnen Sie nun die Composer-Anwendung mithilfe dieses Befehls:
composer
Beachten Sie, dass auf der rechten Seite der Benutzeroberfläche der Anwendung eine Liste mit Komponenten aufgefüllt wird. Die Komponenten werden nach dem Namen der Erweiterung gruppiert. Wenn keine Liste angezeigt wird, müssen Sie möglicherweise mithilfe der zuvor ausgeführten Schritte eine erneute Synchronisierung mit dem ncg-public-Repository vornehmen. Wählen Sie den Namen der Erweiterung aus, um die von ihr angebotenen Komponenten anzuzeigen, wie hier gezeigt:
Die folgenden Richtlinien helfen Ihnen zu verstehen, wie Sie mit der Composer-Anwendung interagieren, um benutzerdefinierte Anwendungen zu entwickeln:
- Zum Hinzufügen einer neuen Komponenteninstanz wählen Sie den Namen einer Komponente aus, und halten Sie ihn gedrückt. Ziehen Sie ihn dann auf den Diagramm-Editor-Bereich.
- Zum Anzeigen des Namens einer Komponente sehen Sie auf den Header im Diagrammbereich. Die Komponente kann außerdem Handles für Eingabe -/Ausgabeports enthalten.
- Zum Verbinden von Komponenten miteinander wählen Sie ein Handle aus, und zeichnen Sie eine Verbindung zwischen kompatiblen Eingabe-/Ausgabeports.
- Wählen Sie die Komponente aus, um Komponentendetails anzuzeigen. Details werden in einem Fenster Details auf der rechten Seite der Anwendung angezeigt. Sie können die Eigenschaften in diesem Fenster bearbeiten, um das Verhalten der Komponente anzupassen.
Sehen wir uns eine Referenzanwendung an, um zu zeigen, was Sie erstellen können, indem Sie die oben genannten Richtlinien befolgen. Als Sie zuvor das DeepStream-Referenzdiagrammpaket installiert haben, wurden viele Beispiele im folgenden Pfad installiert:
/opt/nvidia/deepstream/deepstream/reference_graphs/
Wählen Sie in der Composer-Anwendung File>Open Graph (Datei > Diagramm öffnen) aus, und navigieren Sie zum Pfad /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1. Wählen Sie die Datei deepstream-test1.yaml aus. Wählen Sie anschließend Okay aus.
Wählen Sie die Komponente NvDsSingleSrcInput aus, und der Bereich Details wird auf der rechten Seite der Anwendung geöffnet. Scrollen Sie im Detailbereich nach unten, und beachten Sie die URI-Eigenschaft, in der wir die Videodatei festlegen, die in dieser IVA-Pipeline als Eingabe verwendet wird.
Wenn Sie die URI-Eigenschaft so ändern möchten, dass sie einen RTSP-Stream verwendet, legen Sie type (Typ) auf 4 fest. Geben Sie den RTSP-Pfad rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov an. Diese Aktion hat die gleiche Wirkung wie der hier gezeigte DeepStream [source0]-Konfigurationsgruppeneintrag:
[source0] enable=1 #Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP type=4 uri=rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov num-sources=1 #drop-frame-interval=2 gpu-id=0 # (0): memtype_device - Memory type Device # (1): memtype_pinned - Memory type Host Pinned # (2): memtype_unified - Memory type Unified cudadec-memtype=0
Sehen Sie sich als Nächstes den Gesamtablauf der IVA-Pipeline an, der in diesem Beispiel dargestellt ist. Nachdem Sie die Gesamtworkflow und das erwartete Verhalten des Diagramms verstanden haben, richten Sie diese Workload für die Weiterverteilung und Ausführung als Containerworkload ein.
Diese Anwendung nimmt mithilfe von
NvDsSingleSrcInput
eine Videoquelle als Eingabe an, die anNvDsStreamMux
übergeben wird (technisch gesehen können mehrere Videoeingaben verarbeitet werden). Die Ausgabe vonNvDsStreamMux
stellt einen Frame aus jeder Videoeingabe zur Verfügung, der zur Verarbeitung anNvDsInferVideo
gesendet wird. Der Rückschluss wird mithilfe einer ResNet 4-Klassenobjekterkennung angewendet, z. B. Fahrrad, Auto, Person oder Straßenschild. Die Rückschlussergebnisse vonNvDsInferVideo
werden sowohl anNvDsPerClassObjectCounting
übergeben, um eine Anzahl für jede erkannte Klasse anzuzeigen, als auch anNvsOSD
, wodurch die Erkennungen auf dem Bildschirm mit Begrenzungsfeldern generiert werden. Die Felder werden von der endgültigen Verbindung mitNvDsVideoRenderer
angezeigt.Wenn Sie dieses Verhalten überprüfen und in Aktion sehen möchten, rufen Sie das enthaltene Skript
execute_graph.sh
auf, und übergeben Sie die erforderlichen Parameter inparameters.yaml
. Zum Ausführen des Diagramms für deepstream-test1.yaml auf dem x86-basierten Host führen Sie die folgenden Befehle in einem Terminal aus:cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1 /opt/nvidia/graph-composer/execute_graph.sh deepstream-test1.yaml parameters.yaml -d /opt/nvidia/graph-composer/config/target_x86_64_cuda_11_4.yaml
Die Ausgabe sollte der hier dargestellten ähnlich sein:
Hinweis
Wenn Sie beabsichtigen, einen virtuellen Computer zu verwenden, um die Anforderungen an den Hostcomputer zu erfüllen, können beim Ausführen einer DeepStream-Anwendung, die eine EGL-Senke für die visualisierte Ausgabe verwendet, Probleme auftreten. Zum Umgehen dieser Einschränkung ändern Sie den type (Typ) Ihrer URI-Quelle für FakeSink in 1. Beachten Sie, dass FakeSink keine visuelle Ausgabe bietet. Es ermöglicht die Ausführung Ihrer Workload, jedoch ohne eine zugehörige Anzeige der verarbeiteten Ergebnisse auf dem Bildschirm.