Esercizio: Eseguire un'applicazione di riferimento del Graph Composer NVIDIA DeepStream

Completato

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.

Diagramma che mostra il flusso di lavoro di NVIDIA DeepStream rivisitato.

  1. 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
    
  2. 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.

  3. Aprire ora l'applicazione Composer usando questo comando:

    composer
    

    Screenshot che mostra l'apertura di NVIDIA DeepStream Graph 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:

    Screenshot che mostra i componenti di NVIDIA DeepStream Graph Composer.

    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.
  4. 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/
    
    1. 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.

      Screenshot che mostra l'apertura dell'applicazione Test1 di NVIDIA DeepStream Graph Composer.

    2. 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.

      Screenshot che mostra le proprietà dell'applicazione Test1 di NVIDIA DeepStream Graph Composer.

    3. 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
      
  5. 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.

    Screenshot che mostra l'applicazione Test1 di NVIDIA DeepStream Graph Composer completa.

    Questa applicazione accetta un'origine video come input usando NvDsSingleSrcInput, che viene passata in NvDsStreamMux (che tecnicamente potrebbe elaborare più input video). L'output di NvDsStreamMux fornisce un frame da ogni input video, che viene inviato per l'elaborazione in NvDsInferVideo. 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 di NvDsInferVideo vengono passati sia a NvDsPerClassObjectCounting, per visualizzare un conteggio per ogni classe rilevata sia a NvsOSD, che genera i rilevamenti sullo schermo con rettangoli di selezione. I riquadri vengono visualizzate dalla connessione finale a NvDsVideoRenderer.

  6. Per verificare questo comportamento e vederlo in azione, richiamare lo script incluso execute_graph.sh e passare i parametri necessari in parameters.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:

    Screenshot che mostra l'esecuzione di Test1 di NVIDIA DeepStream Graph Composer.

    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.