DeepStream 01: Introduction

Introduction

Posted by NAB on December 18, 2022

NVIDIA DeepStreame Overview

DeepStream một công cụ phân tích luồng xây dựng ứng dụng chạy bằng AI. Nó nhận luồng dữ liệu phát trực tiếp làm đầu vào - từ USB/CSI camera, video từ tệp hoặc được stream qua RTSP, đồng thời sử dụng AI và Computer Vision để tạo thông tin chi tiết từ các pixel để hiểu ra hơn về môi trường. DeepStream SDK có thể là lớp nền tảng cho một số giải pháp phân tích video như phân tích giao thông, người đi bộ trong thành phố thông minh (smart city), giám sát sức khỏe và an toàn trong y tế, tự kiểm tra và phân tích trong bán lẻ, phát hiện sản phẩm lỗi trong các dây chuyền sản xuất, …

DeepStream Overview

Hình 1: DeepStream Overview

DeepStream hỗ trợ phát triển ứng dụng bằng C/C++ và bằng Python thông qua các liên kết Python. Để dễ dàng hơn khi bắt đầu, DeepStream cung cấp một số ứng dụng tham khảo bằng cả C/C++ và Python. Xem chi tiết các phần C/C++ Sample Apps Source DetailsPython Sample Apps and Bindings Source Details để tìm hiểu hơn về các ứng dụng sẵn có. Xem NVIDIA-AI-IOT Github page để xem vài ví dụ tham khảo về ứng dụng DeepStream.

Nhân (Core) SDK bao gồm nhiều plugins tăng tốc độ phần cứng sử dụng các trình tăng tốc độ như VIC, GPU, DLA, NVDEC và NVENC. Bằng việc thực hiện tất cả các tính toán hoạt động nặng trong một trình tăng tốc chuyên dụng. DeepStream có thể đạt hiệu suất cao nhất cho các ứng dụng phân tích video. Một trong những khả năng chính của DeepStream là giao tiếp hai chiều an toàn giữ edgecloud. DeepStream cung cấp một số giao thức bảo mật vượt trội như xác thực SASL/Plain sử dụng username/password và xác thực 2 chiều TLS. Để tìm hiểu thêm về các tính năng bảo mật này, hãy đọc chương IOT. Để tìm hiểu các phần về các khả hai chiều, xem phần Bidirectional Messaging trong hướng dẫn.

DeepStream xây dựng bên trên một số thư viện NVIDIA GPUs; ứng dụng có thể được triển khai trên một edge device nhúng chạy nền tảng Jetson hoặc có thể được triển khai trên các edge or datacenter GPUs lớn như T4. Các ứng dụng DeepStream có thể được được triển khai trong các containers sử dụng NVIDIA container Runtime. Các containers hiện đang có sẵn trên NGC, NVIDIA GPU cloud registry. Để tìm hiểu hơn về triển khai với dockers xem chương Docker container. Các ứng dụng DeepStream có thể được sắp xếp trên edge bằng Kuberneters trên GPU. Biểu đồ mẫu Helm để triển khai ứng dụng DeepStream có sẵn trên NGC.

DeepStream Graph Architecture

DeepStream là một kiến trúc đồ thị tối ưu xây dựng sử dung mã nguồn mở GStreamer framework. Đồ thị dưới đây trình bày một ứng dụng phân tích video bắt đầu từ input video đến thông tin chi tiết output. Tất cả các khối riêng lẻ là các plugin khác nhau được sử dụng. Ở dưới cùng là các công cụ phần cứng khác nhau được sử dụng trong toàn bộ ứng dụng. Quản lý bộ nhớ tối tưng với zero-memory copy giữa các plugins và việc sử dụng các trình tăng tốc khác nhau đảm bảo hiệu suất cao nhất.

DeepStream overview graph architecture

Hình 2: DeepStream overview graph architecture

DeepStream cung cấp các khối xây dựng dưới dạng các plugin GStreamer có thể được sử dụng để xây dựng pipeline phân tích video hiệu quả. Có hơn 20 plugins khác nhau được tăng tốc phần cứng cho các tác vụ khác nhau.

  • Truyền dữ liệu có thể đi qua mạng thông qua RTSP hoặc từ các local file hệ thộng hoặc trực tiếp từ camera. Các luồng được capture sử dụng CPU. Sau khi các frames nằm trong bộ nhớ, chúng sẽ được gửi để giải mã (decode) bằng bộ tăng tốc NVDEC. Plugin để giải mã được gọi là Gst-nvvideo4linux2.
  • Sau khi giải mã, có một bược tiền xử lý ảnh, trong đó hình ảnh đầu vào có thể được tiền xử lý trước khi inference. Trong tiền xử lý ảnh có thể là dewraping (hiệu chỉnh biến dạng của ảnh) hoặc color space conversion (chuyển đôi không gian màu). Plugin Gst-nvdewraper có thể dewrap ảnh tử camera fisheye hoặc camera 360 độ. Plugin Gst-nvvideoconvert có thể thực hiện chuyển đổi định dạng màu sắc trên các frame. Các plugins này sử dụng GPU hoặc VIC (Vision Image Compositor - Bộ tổng hợp Vision Image).
  • Bước tiếp theo là chia các frame này vào các batch để có hiệu suất inference tối ưu. Việc chia batch được thực hiện bằng cách sử dụng plugin Gst-nvstreammux.
  • Khi các frames đã được chia thành các batch, nó sẽ được gửi để inference. Việc suy luận có thể được thực hiện sử dụng TensorRT, bộ tăng tốc NVIDIA inference runtime hoặc có thể thực hiện sử dụng các native framework như TensorFlow hoặc PyTorch sử dụng Triton inference server. Native TensorRT inference được thực hiện sử dụng plugin Gst-nvinfer, và inference bằng Triton được thực hiện bằng plugin Gst-nvinferserver. Inference có thể sử dụng GPU hoặc DLA (Deep Learning Accelerator) cho Jetson AGX Xavier và Xavier NX.
  • Sau khi inference, bước tiếp theo có thể liên quan đến việc theo dõi đối tượng (tracking the object). Có một số trackers để tham khảo trong SDK, từ hiệu suất cao đến độ chính xác cao. Object tracking được thực hiện sử dụng plugin Gst-nvtracker.
  • Để tạo các tạo các biểu diễn trực quan như là các bounding boxes, segmentation mask, labels, có một visualization plugin gọi là Gst-nvdsosd.
  • Cuối cùng để xuất kết quả, DeepStream trình bày nhiều tùy chọn khác nhau: reder output với các bouding boxes trên màn hình, lưu output vào local disk, stream qua RTSP hoặc chỉ gửi metadata lên cloud. Để gửi gửi metadata lên cloud, DeepStream sử dụng các plugin Gst-nvmsgconvGst-nvmsgbroker. Gst-nvmsgconv chuyển đổi metadata thành schema payload và Gst-nvmsgbroker thiết lập kết nối với cloud và gửi dữ liệu đo xa. Có một số giao thức trung gian thích hợp như Kafka, MQTT, AMQP và Azure IoT. Bộ điều hợp trung gian tùy chỉnh có thể được tạo.

DeepStream reference app

Để bắt đầu các, các developer có thể sử dụng các ứng dụng tham khảo được cung cấp. Cũng bao gồm các mã nguồn cho các ứng dụng này. Ứng dụng end-to-end được gọi là deepstream-app. Ứng dụng này có thể cấu hình đầy đủ - nó cho phép người dùng định cấu hình bất kỳ loại và số lượng sources. Người dụng cũng có thể lựa chọn loại network để chạy inference. Nó được xây dựng sẵn với một plugin inference để thực hiện phát hiện đối (Obejct Detection) tượng được xếp tầng bởi các plugin inference để thực hiện phân loại hình ảnh (Image Classification). Có một tùy chịn để cấu hình tracker. Đối với đầu ra, người dùng có thể chọn giữa hiện thị trên màn hình, lưu tệp đầu ra hoặc phát trực tuyến video qua RTSP.

DeepStream overview reference app

Hình 3: DeepStream overview reference app

Đây là một ứng dụng tham khảo tốt để bắt đầu tìm hiểu các khả năng của DeepStream. Ứng dụng này được đề cập chi tiết hơn trong chương DeepStream Reference Application - deepstream-app. Ứng dụng này sẽ hoạt động cho tất cả mô hình AI với hướng chi tiết được cung cấp trong các README riêng lẻ. Benchmark hiệu suất cũng được chạy bằng ứng dụng này.

Getting started with building apps

Đối với các developers đang tìm cách xây dựng ứng dụng tùy chỉnh của họ, deepstream-app có thể hơi quá sức để bắt đầu phát triển. SDK (Software Developement Kit) đi kèm với một số ứng dụng đơn giản, nơi các developers có thể tìm hiểu về các khái niệm cơ bản của DeepStream, xây dựng một pipeline đơn giản và sau đó tiến hành xây dựng các ứng dụng phức tạp hơn.

DeepStream overview building app

Hình 4: DeepStream overview building app

Các developers có thể bắt đầu với deepstream-test1 gần giống như một DeepStream hello world. Trong ứng dụng này, developers sẽ tìm hiểu cách để xây dựng một GStreamer pipeline sử dụng các plugins DeepStream khác nhau. Họ sẽ lấy video từ một file và giải mã (decode), chia thành batch, và cuối cùng thực hiện phát hiện đối tượng (Object Detection) và cuối cùng hiện thị các bounding boxes trên màn hình. deepstream-test2 tiến triển từ deepstream-test1 và xếp tầng secondary network sau primary network. deepstream-test3 trình bày cách để thêm nhiều nguồn video và cuối cùng deepstream-test4 sẽ trình bày các IoT services sử dụng message broker plugin. 4 ứng dụng khởi động này có sẵn trong cả native C/C++ cũng như Python. Để đọc thêm về các ứng dụng này và các ứng dụng mẫu khác trong DeepStream, hãy xem C/C++ Sample Apps Source DetailsPython Sample Apps and Bindings Source Details.

Các ứng dụng DeepStream có thể được tạo mà khồng cần lập trình sử dụng Graph Composer. Vui lòng xem Introduction

DeepStream in Python

Python rất dễ sử dụng và được các data siencetist và deep learning experts áp dụng rộng rãi khi tạo ra các mô hình AI. NVIDIA đã giới thiệu các bindings Python để giúp bạn xây dựng các ứng dụng AI hiệu suất cao bằng Python. Các DeepStream pipelines có thể được xây dựng sử dụng Gst-Python, các Python bindings của GStramer framework.

Overview DeepStream python

Hình 5: Overview DeepStream python

Ứng dụng DeepStream Python sử dụng dụng Gts-Python API action để xây dựng pipeline. Kiểu dữ liệu đều ở dạng native C và yêu cầu một lớp sim thông qua PyBindings hoặc Numpy để truy cập chúng từ ứng dụng Python. Dữ liệu tensor là raw tensor đầu ra là kết quả sau khi inference. Nếu bạn dang cố gắng phát hiện đối tượng (Object Detection), dữ liệu tensor này cần được hậu xử lý bằng thuật toán phân tích cú pháp và phân cụm để tạo ra các bouding boxes xung quanh các đối tượng đã phát hiện. Để bắt đầu Python, hãy xem chi tiết trong hướng dẫn này Python Sample Apps and Bindings Source Details và “DeepStream Python” trong hướng dẫn DeepStream Python API.


References