Oefening: een NVIDIA DeepStream Graph Composer-referentietoepassing uitvoeren
Laten we eens kijken naar de werkstroom van de IVA-toepassing die is ingeschakeld door DeepStream Graph Composer. We hebben eerder gezegd dat NVIDIA's Cloud Repository of een ander extern register slepen-en-neerzetten onderdelen kan bieden voor gebruik in de DeepStream Composer-toepassing.
Met deze extensies kunt u functies en functionaliteit toevoegen aan de Composer-toepassing. Uiteindelijk kunt u dit hulpprogramma gebruiken om IVA-workloads te verpakken en te distribueren met behulp van de gebundelde containerbouwer. In het volgende diagram ziet u dit proces.
Om te beginnen synchroniseert u met de openbare cloudopslagplaats van NVIDIA om de nieuwste beschikbare extensies in te voeren. Voer de volgende opdracht uit in een terminal op de hostcomputer om dit proces uit te voeren:
registry repo sync -n ngc-public
Met deze opdracht wordt uitvoer geproduceerd die vergelijkbaar is met de volgende uitvoer:
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
Controleer of de extensies zijn geïnstalleerd en beschikbaar zijn met behulp van deze opdracht:
registry extn list
Mogelijk merkt u dat veel van deze extensies beginnen met voorvoegsels die zijn toegewezen aan de voor NVIDIA geoptimaliseerde GStreamer-invoegtoepassingen die zijn opgenomen in de DeepStream SDK. De NvDsMuxDemuxExt-extensie biedt bijvoorbeeld een visueel onderdeel voor interactie met Gst-nvstreamdemux.
Open nu de toepassing Composer met behulp van deze opdracht:
composer
U ziet dat een lijst met onderdelen aan de rechterkant van de gebruikersinterface van de toepassing wordt ingevuld. De onderdelen worden gegroepeerd op extensienaam. Als er geen lijst wordt weergegeven, moet u mogelijk opnieuw synchroniseren naar de openbare ncg-opslagplaats met behulp van de stappen die u eerder hebt uitgevoerd. Selecteer de extensienaam om de onderdelen weer te geven die worden geleverd, zoals hier wordt weergegeven:
De volgende richtlijnen helpen u te begrijpen hoe u kunt communiceren met de Composer-toepassing om aangepaste toepassingen te ontwikkelen:
- Als u een nieuw onderdeelexemplaren wilt toevoegen, selecteert en houdt u de naam van een onderdeel vast. Sleep deze vervolgens naar de ruimte van de grafiekeditor.
- Als u de naam van een onderdeel wilt weergeven, bekijkt u de koptekst in het grafiekgebied. Het onderdeel kan ook ingangen voor invoer-/uitvoerpoorten bevatten.
- Als u onderdelen met elkaar wilt verbinden, selecteert u een ingang en tekent u een verbinding tussen compatibele invoer-/uitvoerpoorten.
- Als u onderdeeldetails wilt weergeven, selecteert u het onderdeel. Details worden weergegeven in een detailvenster aan de rechterkant van de toepassing. U kunt de eigenschappen in dit venster bewerken om het gedrag van het onderdeel aan te passen.
Laten we een referentietoepassing bekijken om te laten zien wat u kunt maken door de voorgaande richtlijnen te volgen. Eerder toen u het Pakket DeepStream-referentiegrafieken installeerde, zijn er veel voorbeelden geïnstalleerd in het volgende pad:
/opt/nvidia/deepstream/deepstream/reference_graphs/
Selecteer In de Composer-toepassing File>Open Graph en ga naar het pad /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1. Selecteer het bestand deepstream-test1.yaml . Selecteer vervolgens Ok.
Selecteer het onderdeel NvDsSingleSrcInput en het deelvenster Details wordt aan de rechterkant van de toepassing geopend. Schuif omlaag in het deelvenster Details en let op de URI-eigenschap waarin we het videobestand instellen dat wordt gebruikt als invoer in deze IVA-pijplijn.
Als u de URI-eigenschap wilt wijzigen om een RTSP-stream te gebruiken, stelt u het type in dat gelijk is aan 4. Geef het RTSP-pad op rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov. Deze actie heeft hetzelfde effect als de configuratiegroepvermelding DeepStream [source0] die hier wordt weergegeven:
[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
Bekijk vervolgens de algehele stroom van de IVA-pijplijn die in dit voorbeeld wordt gepresenteerd. Nadat u de algehele werkstroom en het verwachte gedrag van de grafiek hebt begrepen, gaat u deze workload vervolgens omhoog als een gecontaineriseerde workload voor herdistributie en uitvoering.
Deze toepassing neemt een videobron op als invoer met behulp van
NvDsSingleSrcInput
, die wordt doorgegevenNvDsStreamMux
(die technisch gezien meerdere video-invoer kan verwerken). De uitvoer vanNvDsStreamMux
biedt een frame van elke video-invoer, die wordt verzonden voor verwerking inNvDsInferVideo
. Deductie wordt toegepast met behulp van een ResNet 4-klasse objectdetector, zoals fiets, auto, persoon of wegteken. De deductieresultaten wordenNvDsInferVideo
doorgegeven aan beideNvDsPerClassObjectCounting
, om een telling weer te geven voor elke gedetecteerde klasse enNvsOSD
, waarmee de detecties op het scherm met begrenzingsvakken worden gegenereerd. De vakken worden weergegeven door de uiteindelijke verbinding metNvDsVideoRenderer
.Als u dit gedrag wilt controleren en in actie wilt zien, roept u het opgenomen
execute_graph.sh
script aan en geeft u de benodigde parameters door inparameters.yaml
. Voer de volgende opdrachten uit in een terminal om de grafiek voor deepstream-test1.yaml uit te voeren op de x86-host: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
Als het goed is, ziet u uitvoer die lijkt op de uitvoer die hier wordt weergegeven:
Notitie
Als u van plan bent een virtuele machine te gebruiken om te voldoen aan de vereisten voor de hostmachine, kunnen er problemen optreden wanneer u probeert een DeepStream-toepassing uit te voeren die gebruikmaakt van een EGL-sink voor gevisualiseerde uitvoer. Om deze beperking te omzeilen, wijzigt u het type van uw URI-bron in 1 voor FakeSink. Houd er rekening mee dat FakeSink geen visuele uitvoer levert. Hiermee kan uw workload worden uitgevoerd, maar zonder een gekoppelde schermweergave van verwerkte resultaten.