DeepStream 이란 ?
딥 러닝을 활용한 비디오 분석 응용 프로그램의 고 성능 개발을 손쉽게 할 수 있도록 만든 NVIDIA의 라이브러리이다. 높은 수준의 C++ API와 고성능 런타임 (High Performance Runtime)을 통해 GPU 가속 Transcoding 과 딥러링 추론 기능을 빠르게 통합하여 보다 반응이 빠른 AI 기반 서비스를 제공할 수 있도록 한다. 이는 Intelligent Video Analytics의 보다 손 쉬운 개발을 지원하며 개발자들은 딥스트림을 사용해 실시간으로 동영상 프레임을 처리하고, 이해하며 분류 작업을 진행 할 수 있다. 또한 매우 높은 수준으로 요구되는 처리량(Throughput) 및 반응 시간(Latency)에 대한 요건을 충족 시킬 수 있다.
이러한 DeepStream SDK 는 AI 기반 다중 센서 처리, 비디오 및 이미지 이해를 위한 완전한 스트리밍 분석 툴킷을 제공한다. 또한 픽셀 및 센서 데이터를 실행 가능한 인사이트로 변환하는 End-to-End 서비스 및 솔루션을 구축하기 위한 플랫폼인 NVIDIA Metropolis 의 필수적인 부분이기도 하다.
NVIDIA Metropolis
이 메트로폴리스(Metropolis)는 리테일 분석, 지능형 교통시스템, 창고 및 물류, 제조, 치안, 배수 시스템 등의 유지보수, 생체 인식을 활용하는 액세스 제어, 차량의 교통상황을 측정하여 교통 체증을 해소하는 대중교통 분야에 널리 이용된다. 이 메트로폴리스는 본 글에서 언급하는 NVIDIA DeepStream 을 사용하여 더 뛰어난 성능과 확장성을 경험해 볼 수 있다. 그 외에도 Transfer Learning Toolkit 및 TensorRT 도 활용할 수 있다.
참고로 메트로폴리스는 AI 및 IoT 애플리캐이션을 에지에서 클라우드까지 생성, 배포 및 확장할 수 있는 플랫폼이다. 많은 중국의 지능형 영상분석(IVA) 기업들이 메트로폴리스를 채택하고 있다. 그 중 유명한 하이크비전(Hikvision)의 인식 및 매칭 기술은 데이터 규모가 10배 이상 증가하는데도 90% 이상의 검출율(recall rate)을 기록하는 놀라운 성과를 보였는데, 이를 위해 하이크비전은 엔비디아 젯슨(Jetson)이 적용된 카메라와 네트워크 비디오 레코더, 테슬라(Tesla) P4 GPU 가속기로 구동되는 클라우드 서버, 트레이닝에 활용되는 DGX-1 AI 슈퍼컴퓨터의 엄청난 컴퓨터 연산력을 함께 활용했다고 한다. 하이크 비전 연구소의 쉬리앙 푸(Shiliang Pu) 소장은 "뛰어난 GPU 성능과 엔비디아의 엔드-투-엔드 AI 및 딥러닝 플랫폼을 동영상 스트림에 적용할 경우 여러 산업 부문에서 보다 스마트한 애플리캐이션 개발이 가능하다"라고 말했다.
DeepStream을 사용하면 좋은점
- AI 기반 비디오 및 이미지 분석을 위한 원활한 스트리밍 파이프라인 구축 가능
- 개발자에게 C / C++ / Python 의 개발 옵션을 두어 개발 유연성 제공
- 다양한 하드웨어 가속 플러그인과 함께 제공됨
- SSD, YOLO, FasterRCNN 및 MaskRCNN 과 같은 광범위한 AI 모델 지원 (더 많이 지원되었으면 좋겠다.)
- OpenCV 함수 및 라이브러리 통합 가능
- Pytorch 및 TensorFlow 와 같은 기본 프레임워크에 모델을 배포하거나 다중 GPU, 다중 스트림 및 일괄 처리 지원 옵션과 함꼐 높은 처리량의 추론을 위해 NVIDIA TensorRT를 사용하여 최상의 성능 달성 가능
- 모든 클라우드 및 엣지에서 실행될 수 있으므로 엣지와 클라우드 간의 효과적인 양방향 메시징, 보안, 스마트 녹화 및 무선 AI 모델 업데이트와 같은 IoT 의 요구사항 처리 가능
- 특히 Smart Record 기능을 사용하면 선택적 기록을 통해 엣지에서 디스크 공간을 절약 할 수 있음
- 클라우드 레지스트리의 전체 앱 또는 개별 AI 모델에 대한 원활한 OTA(Over-the-Air) 업데이트를 통해 다운 타임 없이 정확성을 지속적으로 개선 가능
- Kafka, MQTT 및 AMQP와의 IoT 통합 인터페이스 및 AWS IoT 및 Microsoft Azure IoT 와의 turnkey integration 제공 가능
- NVIDIA NGC 컨테이너를 사용하여 고성능 딥스트림 클라우드 네이트브 애플리케이션 구축 가능
- Kubernetes 및 Helm 차트를 통해 대규모로 배포하고 컨테이너화 된 앱 관리 가능
DeepStream SDK Plugins
- H.264 and H.265 video decoding
- Stream aggregation and batching
- TensorRT-based inferencing for detection, classification and segmentation
- Object tracking reference implementation
- On-screen display API for highlighting objects and text overlay
- Frame rendering from multi-source into a 2D grid array
- Accelerated X11/EGL-based rendering
- Filtering based on Region of Interest (ROI)
- JPEG decoding
- Scaling, format conversion, and rotation
- Dewarping for 360-degree camera input
- Metadata generation and encoding
- Messaging to cloud
Transfer Learning Toolkit(TLT)를 사용하여 DeepStream 어플리케이션 구축
딥스트림은 다양한 물체 감지, 이미지 분류 및 인스턴스 분할 기반 AI 모델에 탁월한 처리량을 제공한다. 처리량을 늘리기 위해 개발자는 Transfer Learning Toolkit(TLT)에서 매우 정확한 사전 훈련된 모델을 사용하고 딥스트림을 통해 배포할 수 있다.
다음 표는 엔비디아 홈페이지에서 가져온 표이다. 1080p / 30 fps 입력 스트림에 대해 end-to-end 로 추론한 성능을 나타낸다.
위와 같이 DeepStream SDK를 사용하면 스트리밍 비디오에 AI를 적용할 수 있으며 완전한 End-to-End 성능 최적화를 위해 디코딩/인코딩, 이미지 스케일링 및 변환, 엣지-클라우드 연결을 동시에 최적화 할 수 있다고 한다.
성능 지표에 나온 딥러닝 모델들은 엔비디아에서 제공하는 딥러닝 모델이다. 즉 NVIDIA 전용 모델인 것이다. 이러한 모델들은 NGC(NVIDIA GPU Cloud)에서 무료로 다운 받을 수 있다. 지금(2021/01/24) 기준으로는 TLT 2.0 까지 배포되었고 아래 링크에서 다운로드 받을 수 있다.
TLT(Transfer Learning Toolkit) Getting Started
자세히 살펴보니 다음과 같은 것들이 존재한다.
TLT(Transfer Learning Toolkit)
이는 quantization aware training 을 사용하여 FP 16 / FP 32 와 비슷한 수준을 유지하면서 INT8 정밀도로 2배의 추론 속도를 향상시켰기 때문에 큰 의미가 있으며 NVIDIA Volta 및 Turing GPU 용 Tensor 코어에서 실행되는 automatic mixed precision 으로 학습 시간을 단축하고 메모리 대역폭을 절약 할 수 있다.
각 모델들은 YOLOv3, RetinNet, DSSD, FasterRCNN, DetectNet_v2, MaskRCNN 및 SSD 등으로 학습되었다고 하는데 모델들을 더 자세히 볼 필요가 있기 때문에 다음 포스팅에 설명 하도록 하겠다!
이러한 모델들은 DeepStream SDK 5.0 과 즉시 사용가능한 호환성을 가진다고 한다. TLT 및 DeepStream 을 이용하여 지능형 비디오 분석 어플리캐이션을 구축에 대한 글은 아래 참고자료 7에 자세히 나와있다. 참고하면 좋을 것 같다.
NVIDIA DeepStream 관련 링크
DeepStream Release Notes
docs.nvidia.com/metropolis/deepstream/DeepStream_5.0.1_Release_Notes.pdf
DeepStream Development Guide
docs.nvidia.com/metropolis/deepstream/dev-guide/#
DeepStream SDK API Reference
docs.nvidia.com/metropolis/deepstream/sdk-api/index.html
DeepStream Plugin(GStreamer) Manual
docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_Intro.html
DeepStream Python API
docs.nvidia.com/metropolis/deepstream/python-api/index.html
DeepStream FAQ
docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_FAQ.html
DeepStream Troubleshooting
docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_troubleshooting.html
DeepStream Documentation Archive
docs.nvidia.com/metropolis/deepstream-archive.html
NVIDIA Transfer Learning Toolkit 관련 링크
Transfer Learning Toolkit - User Guide
docs.nvidia.com/metropolis/TLT/tlt-user-guide/index.html
Transfer Learning Toolkit - Release Notes
docs.nvidia.com/metropolis/TLT/tlt-user-guide/text/release_notes.html
이 글을 쓰면서 본 참고자료들
참고자료 1 : developer.nvidia.com/deepstream-sdk
참고자료 2 : blogs.nvidia.co.kr/2017/09/27/alibaba-huawei-metropolis/
참고자료 3 : www.nvidia.com/ko-kr/autonomous-machines/intelligent-video-analytics-platform/
참고자료 5 : docs.nvidia.com/metropolis/deepstream/dev-guide/#
참고자료 6 : blogs.nvidia.com/blog/2020/09/17/gtc-transforming-video-analytics/
참고자료 7 :
'AI Development > TensorRT' 카테고리의 다른 글
[TensorRT] trtexec 사용하기 (2) | 2021.03.30 |
---|---|
[DeepStream] ubuntu에서 nvidia docker + ngc 설치하기 (0) | 2021.01.27 |
[DeepStream] GTC 2020, Certification (Deep Learning for Intelligent Video Analytics) (0) | 2021.01.22 |
[TensorRT] Implicit vs Explicit (4) | 2020.10.21 |
[TensorRT] Squeeze + Unsqueeze + expand_as 조합의 Pytorch 모델 사용 시 나타날 수 있는 이슈 (3) | 2020.09.16 |