Esercizio: Eseguire un'applicazione di riferimento del Graph Composer NVIDIA DeepStream
Esaminiamo in dettaglio il flusso di lavoro dell'applicazione IVA abilitato dal Graph Composer DeepStream. In precedenza è stato indicato che il repository cloud di NVIDIA o un altro registro esterno può fornire componenti di trascinamento della selezione da usare all'interno dell'applicazione Composer DeepStream.
Usando queste estensioni, è possibile aggiungere caratteristiche e funzionalità all'applicazione Composer. Infine, è possibile usare questo strumento per inserire i carichi di lavoro IVA in un pacchetto e distribuirli usando il generatore di contenitori in bundle. Il diagramma seguente mostra questo processo.
Per iniziare, eseguire la sincronizzazione con il repository cloud pubblico di NVIDIA per visualizzare le estensioni più recenti disponibili. Per completare questo processo, eseguire il comando seguente in un terminale nel computer host:
registry repo sync -n ngc-public
Questo comando consente di generare un output analogo a quello illustrato di seguito:
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
Verificare che le estensioni siano installate e disponibili usando questo comando:
registry extn list
È possibile notare che molte di queste estensioni iniziano con prefissi che corrispondono ai plug-in GStreamer ottimizzati per NVIDIA inclusi nell'SDK DeepStream. Ad esempio, l'estensione NvDsMuxDemuxExt fornisce un componente visivo per l'interazione con Gst-nvstreamdemux.
Aprire ora l'applicazione Composer usando questo comando:
composer
Si noti che un elenco di componenti viene visualizzato sul lato destro dell'interfaccia utente dell'applicazione. I componenti vengono raggruppati in base al nome dell'estensione. Se non viene visualizzato un elenco, potrebbe essere necessario eseguire la risincronizzazione del repository ncg-public usando i passaggi eseguiti in precedenza. Selezionare il nome dell'estensione per visualizzare i componenti forniti, come illustrato di seguito:
Le linee guida seguenti consentono di comprendere come interagire con l'applicazione Composer per sviluppare applicazioni personalizzate:
- Per aggiungere una nuova istanza del componente, selezionare il nome di un componente, quindi tenendolo selezionato trascinarlo nell'area dell'editor di grafi.
- Per visualizzare il nome di un componente, esaminare l'l'intestazione nell'area del grafo. Il componente può anche contenere handle per le porte di input/output.
- Per connettere i componenti tra loro, selezionare un handle e tracciare una connessione tra le porte di input/output compatibili.
- Per visualizzare i dettagli del componente, selezionare il componente. I dettagli vengono visualizzati in una finestra Dettagli sul lato destro dell'applicazione. È possibile modificare le proprietà in questa finestra per personalizzare il comportamento del componente.
Esaminiamo un'applicazione di riferimento per mostrare cosa è possibile creare seguendo le linee guida precedenti. In precedenza, quando è stato installato il pacchetto di grafi di riferimento DeepStream, molti esempi sono stati installati nel percorso seguente:
/opt/nvidia/deepstream/deepstream/reference_graphs/
Nell'applicazione Composer selezionare File>Open Graph e passare al percorso /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1. Selezionare il file deepstream-test1.yaml. Selezionare quindi OK.
Selezionare il componente NvDsSingleSrcInput e il riquadro Dettagli viene aperto sul lato destro dell'applicazione. Scorrere verso il basso nel riquadro Dettagli e notare la proprietà uri in cui è stato impostato il file video che verrà usato come input in questa pipeline IVA.
Se si vuole modificare la proprietà uri per usare un flusso RTSP, impostare il tipo uguale a 4. Specificare il percorso RTSP rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov. Questa azione ha lo stesso effetto della voce del gruppo di configurazione DeepStream [source0] illustrata di seguito:
[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
Esaminare quindi il flusso complessivo della pipeline IVA presentata in questo esempio. Dopo aver compreso il flusso di lavoro complessivo e il comportamento previsto del grafo, questo carico di lavoro verrà quindi aggiornato come carico di lavoro in contenitori per la ridistribuzione e l'esecuzione.
Questa applicazione accetta un'origine video come input usando
NvDsSingleSrcInput
, che viene passata inNvDsStreamMux
(che tecnicamente potrebbe elaborare più input video). L'output diNvDsStreamMux
fornisce un frame da ogni input video, che viene inviato per l'elaborazione inNvDsInferVideo
. L'inferenza viene applicata usando un rilevatore di oggetti di classe ResNet 4, ad esempio una bicicletta, un'auto, una persona o un segnale stradale. I risultati dell'inferenza diNvDsInferVideo
vengono passati sia aNvDsPerClassObjectCounting
, per visualizzare un conteggio per ogni classe rilevata sia aNvsOSD
, che genera i rilevamenti sullo schermo con rettangoli di selezione. I riquadri vengono visualizzate dalla connessione finale aNvDsVideoRenderer
.Per verificare questo comportamento e vederlo in azione, richiamare lo script incluso
execute_graph.sh
e passare i parametri necessari inparameters.yaml
. Per eseguire il grafo per deepstream-test1.yaml nell'host basato su x86, eseguire i comandi seguenti in un terminale: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
Verrà visualizzato un output simile al seguente:
Nota
Se si intende usare una macchina virtuale per soddisfare i requisiti del computer host, è possibile che si verifichino problemi quando si tenta di eseguire un'applicazione DeepStream che usa un sink EGL per l'output visualizzato. Per risolvere questa limitazione, modificare il tipo dell'origine uri in 1 per FakeSink. Tenere presente che FakeSink non fornirà alcun output visivo. Consente l'esecuzione del carico di lavoro, ma senza una visualizzazione sullo schermo associata dei risultati elaborati.