Выпуск Savant 0.2.4, фреймворка компьютерного зрения и глубокого обучения

После месяца разработки опубликован выпуск Python-фреймворка Savant 0.2.4, упрощающего использование NVIDIA DeepStream для решения задач, связанных с машинным обучением. Фреймворк берет на себя всю сложную работу с GStreamer или FFmpeg, позволяя сосредоточиться на построении оптимизированных конвейеров вывода с помощью декларативного синтаксиса (YAML) и функций Python. Savant позволяет создавать конвейеры (pipeline), которые одинаково работают как на ускорителях в датацентре (NVIDIA Turing, Ampere, Hopper), так и на edge-устройствах (NVIDIA Jetson NX, AGX Xavier, Orin NX, AGX Orin, New Nano). С помощью Savant можно легко обрабатывать несколько видеопотоков одновременно, быстро создавать готовые к рабочим применениям конвейеры видеоаналитики, использующие NVIDIA TensorRT. Код проекта распространяется под лицензией Apache 2.0.

Три новых примера использования:

  • Предсказание возраста/пола, демонстрирующее использование YoloV5-Face, работу с пользовательской атрибутивной моделью, предсказывающей возраст и пол, и аффинные преобразования в GPU на основе лицевых лэндмарок с помощью OpenCV-CUDA и Python;
  • Условное кодирования видео, демонстрирующие конвейер, который рисует на кадрах и кодирует видеопоток только по запросу (в примере – только при обнаружении объектов моделью); показывает, как избежать нерационального использования вычислительных ресурсов, когда кадры требуются по определённому внешнему условию;
  • Обработка нескольких RTSP-потоков, демонстрирующая простой конвейер, обрабатывающий два RTSP-потока; поскольку Savant сильно отличается от ожиданий пользователей в отношении динамической обработки потоков, реализован простой конвейер, обрабатывающий несколько потоков одновременно, чтобы показать, как это работает.

Новые возможности

  • Условная отрисовка и кодирование, позволяющие снизить трафик и рационально использовать ресурсы CPU/GPU;
  • Новый адаптер источника RTSP на базе FFmpeg, который работает гораздо лучше, чем GStreamer, когда потоки включают B-кадры;
  • Новый универсальный адаптер на базе FFmpeg, который может работать со всеми входными данными, поддерживаемыми FFmpeg.
  • При разработке внедрена практика отслеживания возможных регрессий производительности при объединении каждого тикета.
  • Продолжен перенос внутренних компонентов Savant с Python на Rust: реализована библиотека основной функциональности Savant-rs с тщательно тестируемым кодом; постепенно производится замена компонентов на основе Python на компоненты на основе Rust, чтобы обеспечить работу Savant без глобальной блокировки (GIL), где это возможно, и высокое качество кода.
  • Расширена документация:
    • Документированы адаптеры для работы с данными;
    • Добавлены примеры использования препроцессинга изображений;
    • Создан раздел по настройке среды разработки в VS Code.
  • Выявленаа ошибка в реализации функциональности NVENC на устройствах Jetson: NVENC некорректно упорядочивает кодируемые кадры, если фактическая частота кадров в потоке не равна настроенной, что часто происходит при работе с потоками RTSP или при пропуске кадров по определённым условиям. В Savant проблема решена обходным путём через переупорядочивание кадров, когда это необходимо. Ошибка проявляется в DeepStream 6.2 и о ней отправлено уведомление компании NVIDIA, которая подтвердила наличие ошибки и исправит это в ближайшем релизе DeepStream.

В следующем релизе Savant 0.2.5 планируется интегрировать больше кода на языке Rust, чтобы сделать конвейеры менее зависимыми от GIL. Также планируется предложить новые функции, связанные с динамической конфигурацией конвейера и разработкой edge, и добавить три-четыре новых примера, охватывающих базовые и расширенные функции.

Release. Ссылка here.