Налаштування NVIDIA DeepStream для Edge-відеоаналітики

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1564 послуг
Налаштування NVIDIA DeepStream для Edge-відеоаналітики
Середній
~2-3 дні
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1348
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    949
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1183
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    921

Налаштування NVIDIA DeepStream для Edge-відеоаналітики

Уявіть: 200 RTSP-потоків з камер, а CPU-сервер задихається на 10 потоках. DeepStream на Jetson Orin вирішує це — апаратне декодування та GPU-інференс дають 32 потоки на одній платі. Але налаштування пайплайну потребує розуміння GStreamer та TensorRT. Ми налаштовуємо пайплайни відеоаналітики на базі NVIDIA DeepStream для Edge-пристроїв. DeepStream SDK — GStreamer-based фреймворк з апаратним прискоренням: декодування RTSP, детекція об'єктів, трекінг, публікація метаданих у Kafka — все на Jetson або GPU. На Jetson Orin обробляємо 16+ HD-потоків у реальному часі, що в 10 разів більше, ніж аналоги на OpenCV та Intel Xeon. Досвід 30+ проєктів відеоаналітики підтверджує надійність рішення.

Архітектура DeepStream пайплайну

GStreamer плагіни DeepStream формують лінійний пайплайн:

[RTSP/File/USB] → nvv4l2decoder → nvstreammux → nvinfer → nvtracker
                                                    ↓
[Kafka/MQTT/File] ← nvmsgbroker ← nvmsgconv ← nvdsosd ← nvinfer (secondary)

nvv4l2decoder: Hardware decode (H.264/H.265/AV1) через Jetson VPU. Zero-copy в GPU memory — немає CPU→GPU transfer.

nvstreammux: Мультиплексує N потоків у batch. batch-size=8 → один виклик інференсу для 8 кадрів одночасно.

nvinfer: TensorRT engine всередині. Підтримує detector (YOLO, SSD), classifier, segmentor. Конфіг через .txt файл — model engine, batch size, precision.

nvtracker: Multi-object tracking. Алгоритми: IOU, NvSORT, NvDeepSORT (з ReID), NvDCF (correlation filter). DeepSORT: Re-ID мережа для утримання ID при перекриттях.

nvmsgconv + nvmsgbroker: Конвертація метаданих bbox/trackID/class у JSON, публікація в Kafka, MQTT, Azure IoT Hub, AWS IoT.

Чому DeepStream на Edge ефективніше CPU-рішень?

Порівняння з OpenCV на CPU показує: DeepStream на Jetson Orin AGX обробляє 32 HD-потоки з YOLOv8n FP16 при 30 FPS, тоді як OpenCV на Intel Xeon справляється з 2–3 потоками. Причина — апаратне декодування, zero-copy та TensorRT на GPU. Економія на хмарних обчисленнях сягає 3–5 разів за рахунок локальної обробки.

Конфігурація під конкретні задачі

Охоронне відеоспостереження (16 RTSP-камер)
[primary-gie]
model-engine-file=yolov8n.engine
batch-size=16
interval=0          # кожен кадр
network-type=0      # detector

[tracker]
tracker-width=640
tracker-height=384
ll-lib-file=/opt/nvidia/deepstream/lib/libnvds_nvmultiobjecttracker.so
ll-config-file=nvdcf_tracking.yml

Виробничий контроль якості (1–2 камери високої роздільної здатності): batch-size=1, interval=0, primary detector → secondary classifier (дефект/норма). Висока роздільна здатність: tile-based inference через nvdspreprocess з overlapping tiles.

Підрахунок людей у зонах: nvinfer → nvtracker → nvdsanalytics. nvdsanalytics: ROI counting, line crossing detection, direction detection. Все через конфіг без написання коду.

Як інтегрувати кастомні моделі YOLO?

  1. Експорт моделі в ONNX: yolo export model=yolov8n.pt format=onnx
  2. Конвертація ONNX в TensorRT engine: trtexec --onnx=yolov8n.onnx --saveEngine=yolov8n.engine --fp16
  3. Написання custom parser (C++) для розбору output-тензора в NvDsInferObjectDetectionInfo.
  4. Підключення engine та parser у конфіг DeepStream.

Якщо не хочете писати парсер з нуля, використовуємо готові рішення: Ultralytics GitHub для експорту безпосередньо в TensorRT або DeepStream-Yolo з готовими парсерами для різних версій YOLO.

Приклад custom parser:

extern "C" bool NvDsInferParseCustomYoloV8(
    std::vector<NvDsInferLayerInfo> const& outputLayersInfo,
    NvDsInferNetworkInfo const& networkInfo,
    NvDsInferParseDetectionParams const& detectionParams,
    std::vector<NvDsInferObjectDetectionInfo>& objectList) {
    // парсинг тензора → NvDsInferObjectDetectionInfo
}

Python біндінги (pyds)

Для кастомної логіки в probe callbacks:

def osd_sink_pad_buffer_probe(pad, info, u_data):
    gst_buffer = info.get_buffer()
    batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(gst_buffer))

    for frame_meta in pyds.NvDsFrameMetaList(batch_meta.frame_meta_list):
        for obj_meta in pyds.NvDsObjectMetaList(frame_meta.obj_meta_list):
            if obj_meta.class_id == PERSON_CLASS:
                # кастомна логіка: фільтрація, алерти, запис
                obj_meta.rect_params.border_color.set(1.0, 0, 0, 1.0)

Probe на будь-який pad пайплайну — повний доступ до метаданих без зупинки потоку.

Деплой на Jetson

JetPack: остання версія включає всі залежності. Встановлення: apt install deepstream-7.0. Сертифіковані інженери NVIDIA налаштовують середовище.

TensorRT engine генерація:

trtexec --onnx=yolov8n.onnx \
        --saveEngine=yolov8n.engine \
        --fp16 \
        --workspace=2048 \
        --minShapes=input:1x3x640x640 \
        --optShapes=input:8x3x640x640 \
        --maxShapes=input:16x3x640x640

Engine генерується на конкретному пристрої — не переносимо між різними Jetson SKU.

Контейнеризація: nvcr.io/nvidia/deepstream:7.0-gc-triton-devel. Docker на Jetson з --runtime nvidia. Оркестрація через docker-compose або K3s.

Масштабування та моніторинг

Метрики: DeepStream Prometheus exporter — FPS per source, inference time, tracker update time, drop frame ratio. Grafana dashboard.

Multi-node: Kafka як транспорт метаданих між вузлами. Кожен Jetson — producer. Центральний сервер — consumer + агрегація.

Віддалене керування: DeepStream App Framework з REST API (ds-server): додавання/видалення RTSP джерел без перезапуску пайплайну.

Порівняння продуктивності

Платформа Потоків HD Модель FPS/потік
Jetson Orin AGX 32 YOLOv8n FP16 30
Jetson Orin NX 16G 16 YOLOv8n FP16 30
Jetson Orin Nano 4 YOLOv8n INT8 25
RTX 4090 (x86) 64+ YOLOv8s FP16 30
Рішення Потоків HD FPS/потік Вартість інфраструктури
DeepStream на Jetson Orin 32 30 Низька
OpenCV на Intel Xeon 2 25 Висока

DeepStream на Jetson забезпечує в 10 разів більше потоків при значно менших витратах. Впровадження може скоротити витрати на серверне обладнання до 80%.

Що входить в роботу

  • Аудит поточної інфраструктури та вимог.
  • Проектування пайплайну: вибір моделі, параметри, інтеграції.
  • Кастомізація моделей (fine-tuning, quantization INT8/FP16).
  • Розробка custom parsers та probe callbacks.
  • Інтеграція з VMS (Milestone, Genetec) та зовнішніми системами (Kafka, MQTT).
  • Документація та навчання операторів.
  • Гарантія стабільної роботи 6 місяців.

Інвестиції в DeepStream окупаються за 6–12 місяців за рахунок відмови від дорогих CPU-серверів та скорочення трафіку на хмарні сервіси.

Строки: 4–8 тижнів

Базова конфігурація з готовою моделлю — 1–2 тижні. Кастомні парсери, інтеграція з VMS, складна бізнес-логіка — 6–8 тижнів.

Зв'яжіться з нами — оцінимо ваш проєкт за 2 дні. Отримайте консультацію сертифікованого інженера NVIDIA. GStreamer

Edge AI та оптимізація: деплой моделей без хмари

Уявіть: ваша модель розпізнавання облич видає 4 секунди latency на Jetson Orin, батарея сідає за годину, модель вилітає по OOM. Ми — команда інженерів з Edge AI — оптимізували понад 150 моделей для граничних пристроїв. Без профілювання та правильного вибору квантизації або дистиляції проект приречений. Розрив між дослідницьким кодом та edge-деплоєм — окрема інженерна дисципліна, і ми допомагаємо її освоїти за 2–16 тижнів під ключ. Справа не в експорті, а в системній роботі із залізом: GPU utilization, latency p99, memory bandwidth.

Чому просто «експортувати модель» не працює?

PyTorch-модель з float32 та batch_size=32 не готова до edge. Типові проблеми:

  • ResNet-50 в fp32 займає 98 MB, inference на Cortex-A78 — 380 мс. Після INT8-квантизації torch.ao.quantization — 24 MB, 95 мс. Експорт в ONNX + TensorRT на Jetson — 28 мс.
  • YOLOv8m на Raspberry Pi 5 в fp32 — 2.8 fps. TFLite INT8 — 9.4 fps. З XNNPACK делегатом — 14 fps.
  • Transformer-енкодер на мобільному CPU: MobileBERT в fp16 через CoreML на iPhone 15 — 18 мс/інференс. distilbert-base-uncased в ONNX — 42 мс.

Проблема не у виборі «квантизувати чи ні» — правильний шлях визначається пристроєм, завданням та допустимою деградацією метрики. Пропонуємо оцінку вашого проекту: за 24 години скажемо, наскільки реально прискорити модель.

Який метод квантизації вибрати для вашого завдання?

PTQ (Post-Training Quantization) — швидкий шлях. Берете навчену модель, проганяєте calibration dataset (200–1000 прикладів), отримуєте INT8 або INT4 ваги. Інструменти: torch.ao.quantization, ONNX Runtime quantization tool, bitsandbytes. Деградація точності: 0.5–2% на класифікації. Червона зона — детекція дрібних об'єктів та сегментація, де PTQ дає -4–8% mAP.

QAT (Quantization-Aware Training) — навчання з симульованими квантизаційними шумами. Дорожче (перенавчання), але деградація 0.1–0.5%. Виправдано, коли PTQ неприйнятний. В PyTorch — torch.ao.quantization.prepare_qat().

GPTQ / AWQ — для LLM. AWQ краще зберігає якість при 4-bit квантизації. llm-compressor від Neural Magic або autoawq — основні бібліотеки.

Зв'яжіться з нами для безкоштовного профілювання вашої моделі — ми оцінимо latency та запропонуємо план оптимізації.

Метод Час реалізації Деградація точності Інструменти
PTQ 1–2 дні 0.5–2% (до 8% на детекції) torch.ao, ONNX RT, bitsandbytes
QAT 1–3 тижні 0.1–0.5% torch.ao.prepare_qat, TF Quantization
GPTQ/AWQ 3–7 днів 1–3% (LLM) autoawq, llm-compressor

Прунінг та дистиляція: коли квантизації недостатньо

Структурний прунінг видаляє канали або шари. Наприклад, видалення 40% каналів ResNet-50 з наступним fine-tuning дає -35% розміру, -28% latency при втраті top-1 accuracy лише на 1.2%. Інструменти: torch.nn.utils.prune, для transformer — прунінг attention heads (movement pruning, LTP). Глибша техніка — N:M sparsity, коли з кожних M ваг залишаються N ненульових (NVIDIA Ampere підтримує 2:4).

Knowledge distillation — навчаємо маленьку student імітувати велику teacher через KLDivLoss на soft labels. Feature distillation на проміжних шарах (hint-based) дає краще збереження якості. Hugging Face DistilBERT: 66M vs 110M параметрів, -40% latency, -3% на GLUE. Температура дистиляції — ключовий гіперпараметр (типово 4–8).

Комбінований підхід: дистиляція → прунінг → QAT. Дає максимальний ефект на обмеженому залізі. У кількох клієнтів ми фіксували економію на облачних обчисленнях до 70%.

Цільові платформи та інструменти

Платформа Переважний формат Інструмент Специфіка
NVIDIA Jetson TensorRT engine trtexec, torch2trt INT8 calibration, DLA offload
Apple Silicon / iOS CoreML (.mlmodel) coremltools ANE (Neural Engine) автоматично
Android TFLite (.tflite) tf.lite.TFLiteConverter GPU delegate, NNAPI
x86 CPU ONNX + ORT onnxruntime AVX-512, VNNI
Arm Cortex TFLite / ONNX ort-arm, tflite XNNPACK, NEON
Qualcomm NPU QNN (.dlc) Qualcomm AI Hub Hexagon DSP

TensorRT — головний інструмент для NVIDIA edge. TRT будує граф з fusion операторів, вибирає оптимальні ядра. На Jetson AGX Orin YOLOv8m в TRT INT8 дає 78 fps проти 22 fps в fp16 PyTorch — прискорення в 3.5 рази.

Практичний кейс з нашої практики: детекція дефектів на виробничій лінії

Наш клієнт — виробниче підприємство. Завдання: виявлення подряпин на металі в реальному часі, 30 fps, камера до Jetson Xavier NX (16GB). Вихідна модель YOLOv8l mAP50 0.91, inference на сервері 28 мс, на Jetson в fp16 — 110 мс (9 fps). Не підходить.

Кроки оптимізації:

  1. Перехід на YOLOv8m — mAP50 0.887 (-2.3%), 68 мс
  2. Експорт в TensorRT FP16 через yolo export format=engine half=True — 31 мс (32 fps)
  3. INT8 calibration на 500 кадрах — 22 мс (45 fps), mAP50 0.879

Підсумок: деградація 3.5% при 5× прискоренні. Клієнт отримав engine та документацію. Гарантуємо, що метрика не впаде нижче обумовленого порогу — прописано в договорі.

Приклад профілювання latency по шарах YOLOv8m на Jetson Xavier NX (fp16):

- Convolution (layer 1–5): 12 ms
- Bottleneck (layer 6–10): 8 ms
- Head (detection): 11 ms

Вузьке місце — останні шари head'а. Після квантування head'а окремо latency head знизилась до 4 ms.

Що входить в роботу

  • Звіт по профілюванню моделі на цільовому пристрої (latency по шарах, вузькі місця)
  • Вибір та обґрунтування методів оптимізації (quantization / pruning / distillation)
  • Оптимізована модель (TensorRT engine / TFLite / CoreML / ONNX)
  • Конфіги для відтворення (скрипти, Docker-образ, інструкція)
  • Тестування на реальному пристрої (не менше 10 000 інференсів)
  • Навчання вашої команди (2 години онлайн)
  • Підтримка 1 місяць після передачі

Як замовити оптимізацію моделі?

  1. Залиште заявку на сайті або зв'яжіться з нами будь-яким зручним способом.
  2. Ми проводимо безкоштовне профілювання вашої моделі на цільовому пристрої протягом 24 годин.
  3. Готуємо план оптимізації з оцінкою trade-off (швидкість vs якість).
  4. Ви затверджуєте план — ми приступаємо до роботи.
  5. Після завершення передаємо оптимізовану модель, конфіги та документацію.
  6. Проводимо навчання вашої команди та надаємо місячну підтримку.

Терміни: оптимізація готової моделі — 2–4 тижні. Розробка з нуля під edge — 6–16 тижнів. Вартість розраховується індивідуально залежно від складності моделі та цільової платформи.

Отримайте консультацію — ми безкоштовно оцінимо вашу модель та запропонуємо план за 24 години. Замовте безкоштовне профілювання прямо зараз.