연습 - NVIDIA DeepStream Graph Composer 참조 애플리케이션 실행

완료됨

DeepStream Graph Composer에 의해 사용하도록 설정된 IVA 애플리케이션 워크플로를 자세히 살펴보겠습니다. 앞서 NVIDIA의 Cloud Repository 또는 다른 외부 레지스트리가 DeepStream Composer 애플리케이션 내에서 사용할 끌어서 놓기 구성 요소를 제공할 수 있다고 언급했습니다.

이러한 확장을 사용하여 Composer 애플리케이션에 기능을 추가할 수 있습니다. 궁극적으로 이 도구를 사용하여 번들로 제공되는 container-builder를 사용하여 IVA 워크로드를 패키지하고 배포할 수 있습니다. 다음 다이어그램은 이 프로세스를 보여줍니다.

NVIDIA DeepStream 워크플로를 검토 하는 방법을 보여주는 다이어그램

  1. 시작하려면 NVIDIA의 퍼블릭 Cloud Repository에 동기화하여 사용 가능한 최신 확장을 가져옵니다. 이 프로세스를 수행하려면 호스트 컴퓨터의 터미널에서 다음 명령을 실행합니다.

    registry repo sync -n ngc-public
    

    이 명령은 다음 출력과 유사한 출력을 생성합니다.

    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. 다음 명령을 사용하여 확장이 설치되어 있고 사용 가능한지 확인합니다.

    registry extn list
    

    이러한 확장의 대부분은 DeepStream SDK에 포함된 NVIDIA 최적화 GStreamer 플러그 인에 매핑되는 접두사로 시작됩니다. 예를 들어, NvDsMuxDemuxExt 확장은 Gst-nvstreamdemux와 상호 작용하기 위한 시각적 구성요소를 제공합니다.

  3. 이제 다음 명령을 사용하여 Composer 애플리케이션을 엽니다.

    composer
    

    NVIDIA DeepStream Graph 작성기 열기를 보여주는 스크린샷

    구성 요소 목록이 애플리케이션 사용자 인터페이스의 오른쪽에 채워집니다. 구성 요소는 확장 이름별로 그룹화됩니다. 목록이 표시되지 않으면 이전에 수행한 단계를 사용하여 ncg-public 리포지토리에 다시 동기화해야 할 수 있습니다. 다음과 같이 확장 이름을 선택하여 제공되는 구성 요소를 봅니다.

    NVIDIA DeepStream Graph 작성기 구성 요소를 보여주는 스크린샷

    다음 지침은 Composer 애플리케이션과 상호 작용하여 사용자 지정 애플리케이션을 개발하는 방법을 이해하는 데 도움이 됩니다.

    • 새 구성 요소 인스턴스를 추가하려면 구성 요소의 이름을 선택하고 유지합니다. 그런 다음, 그래프 편집기 공간으로 끌어옵니다.
    • 구성 요소의 이름을 표시하려면 그래프 영역에서 머리글을 확인합니다. 구성요소에는 입력/출력 포트용 핸들도 포함될 수 있습니다.
    • 구성 요소를 서로 연결하려면 핸들을 선택하고 호환되는 입력/출력 포트 간에 연결을 그립니다.
    • 구성 요소 세부 정보를 표시하려면 구성 요소를 선택합니다. 세부 정보는 애플리케이션의 오른쪽에 있는 세부 정보 창에 표시됩니다. 이 창의 속성을 편집하여 구성 요소의 동작을 사용자 지정할 수 있습니다.
  4. 참조 애플리케이션을 검토하여 이전 지침에 따라 만들 수 있는 항목을 보여 드리겠습니다. 이전에 DeepStream 참조 그래프 패키지를 설치했을 때 많은 예제가 다음 경로에 설치되었습니다.

    /opt/nvidia/deepstream/deepstream/reference_graphs/
    
    1. Composer 애플리케이션에서 파일>그래프 열기를 선택하고 /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1 경로로 이동합니다. deepstream-test1.yaml 파일을 선택합니다. 그런 다음, 확인을 선택합니다.

      NVIDIA DeepStream Graph 작성기 열기 Test1 애플리케이션을 보여주는 스크린샷

    2. NvDsSingleSrcInput 구성 요소를 선택하면 애플리케이션 오른쪽에 세부 정보 창이 열립니다. 세부 정보 창에서 아래로 스크롤하여 이 IVA 파이프라인에서 입력으로 사용할 비디오 파일을 설정하는 uri 속성을 확인합니다.

      NVIDIA DeepStream Graph 작성기 Test1 애플리케이션 속성을 보여주는 스크린샷

    3. RTSP 스트림을 사용하도록 uri 속성을 수정하려면 type4와 동일하게 설정합니다. RTSP 경로 rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov를 제공합니다. 이 작업은 여기에 보이는 DeepStream [source0] 구성 그룹 항목과 동일한 효과가 있습니다.

      [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. 다음으로, 이 예제에 제시된 IVA 파이프라인의 전체 흐름을 확인합니다. 그래프의 전체 워크플로 및 예상 동작을 이해한 후에는 재배포 및 실행을 위한 컨테이너화된 워크로드로 이 워크로드를 작동합니다.

    NVIDIA DeepStream Graph 작성기 Test1 애플리케이션  전체를 보여주는 스크린샷

    이 애플리케이션은 NvDsSingleSrcInput을 사용하여 비디오 소스를 입력으로 사용하며, 이것은 NvDsStreamMux(기술적으로 여러 비디오 입력을 처리할 수 있음)에 전달됩니다. NvDsStreamMux의 출력은 각 비디오 입력의 프레임을 제공하며, 이것은 NvDsInferVideo에서 처리를 위해 전송됩니다. 추론은 자전거, 자동차, 사람 또는 도로 표지판과 같은 ResNet 4 클래스 개체 감지기를 사용하여 적용됩니다. NvDsInferVideo의 추론 결과는 감지된 각 클래스에 대한 개수를 표시하기 위해 NvDsPerClassObjectCounting과 경계 상자가 있는 화면 감지를 생성하는 NvsOSD 모두에 전달됩니다. 상자는 NvDsVideoRenderer에 대한 최종 연결로 표시됩니다.

  6. 이 동작을 확인하고 작동하는 모습을 보려면 포함된 execute_graph.sh 스크립트를 호출하고 parameters.yaml에 필요한 매개 변수를 전달합니다. x86 기반 호스트에서 deepstream-test1.yaml에 대한 그래프를 실행하려면 터미널에서 다음 명령을 실행합니다.

    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
    

    여기에 보이는 것과 유사한 출력이 표시됩니다.

    NVIDIA DeepStream Graph 작성기 Test1 실행을 보여주는 스크린샷

    참고

    가상 머신을 사용하여 호스트 컴퓨터 요구 사항을 충족하려는 경우 시각화된 출력에 EGL 싱크를 사용하는 DeepStream 애플리케이션을 실행하려고 할 때 문제가 발생할 수 있습니다. 이 제한을 해결하려면 FakeSink에 대해 uri 원본의 type1로 변경합니다. FakeSink는 시각적 출력을 제공하지 않습니다. 워크로드를 실행할 수 있지만 처리된 결과가 화면에 표시되지 않습니다.