
ramowy Savant
Kilka tygodni temu dzielimy się tutaj na blogu trochę informacji nt Savant, czyli framework do analizy wideo co ułatwia wykorzystanie technologii NVIDIA DeepStream do rozwiązywania problemów związanych z uczeniem maszynowym. Powodem, dla którego o tym rozmawiamy, jest to, że niedawno ogłosił wydanie nowej wersji «Savant 0.2.4“, w którym zintegrowano nowe funkcje i rozszerzono przypadki użycia tego wspaniałego frameworka.
Osoby niezaznajomione z frameworkiem powinny o tym wiedzieć zajmuje się całą pracą z GStreamerem lub FFmpeg, co pozwala skupić się na tworzeniu zoptymalizowanych potoków danych wyjściowych przy użyciu składni deklaratywnej (YAML) i funkcji języka Python.

Nauczyli ukrywa wszystkie elementy wewnętrzne Gstreamera przed deweloperem i zapewnia praktyczne narzędzia do wdrażania strumieniowych aplikacji AI w prawdziwym życiu. Wykorzystuje standardowy model Nvidia PeopleNet do wykrywania ludzi i ich twarzy a zwłaszcza w miejscach, w których obowiązują przepisy dotyczące prywatności, ramy umożliwiają śledzenie i zamazywanie twarzy.
Co nowego w Savant 0.2.4?
Jak wspomnieliśmy na początku, to nowe wydanie zawiera nowe funkcje, które rozszerzyły przypadki użycia ram i o których wspomina się, że na przykład teraz Savant może być wykorzystany do przewidywania wieku/płci, zademonstrowanie użycia YoloV5-Face, praca z niestandardowym modelem atrybutów, który przewiduje wiek i płeć, oraz transformacje zależne od GPU w oparciu o cechy twarzy przy użyciu OpenCV-CUDA i Pythona.
Innym przypadkiem użycia jest warunkowe kodowanie wideo, który demonstruje potok oparty na ramkach i kodujący strumień wideo tylko na żądanie (w przykładzie tylko wtedy, gdy model wykrywa obiekty); pokazuje, jak uniknąć marnowania zasobów obliczeniowych, gdy określony warunek zewnętrzny wymaga ramek.
Również teraz możliwość wykorzystania Savanta do obsługi wielu strumieni RTSP, Demonstrując prosty potok, który przetwarza dwa strumienie RTSP, a ponieważ Savant bardzo różni się od tego, czego oczekują użytkownicy w zakresie dynamicznego przetwarzania wątków, zaimplementowaliśmy prosty potok, który przetwarza wiele wątków jednocześnie, aby pokazać, jak to działa.
Ze strony dodanych nowych funkcji wyróżnia się warunkowe renderowanie i kodowanie w celu zmniejszenia ruchu i efektywnego wykorzystania zasobów CPU/GPU, a także nowy adapter źródłowy RTSP oparty na FFmpeg który działa znacznie lepiej niż GStreamer, gdy strumienie zawierają ramki B i nowy uniwersalny adapter oparty na FFmpeg, który może współpracować ze wszystkimi wejściami kompatybilnymi z FFmpeg.
Oprócz tego podkreślono, że zidentyfikowano błąd w implementacji funkcjonalności NVENC na urządzeniach Jetson:NVENC, które nieprawidłowo przesyłały strumieniowo zakodowane ramki, jeśli rzeczywista liczba klatek na sekundę w strumieniu nie jest równa skonfigurowanej, co często ma miejsce podczas pracy ze strumieniami RTSP lub gdy ramki są odrzucane z powodu pewnych warunków. W Savant problem został rozwiązany przez obejście polegające na zmianie kolejności ramek w razie potrzeby. Błąd pojawia się w DeepStream 6.2 i został zgłoszony firmie NVIDIA, która potwierdziła błąd i naprawi go w następnej wersji DeepStream.
z inne zmiany, które się wyróżniają tej nowej wersji:
- Podczas opracowywania wprowadzono praktykę śledzenia możliwych regresji wydajności poprzez łączenie każdego zgłoszenia.
- Kontynuacja migracji wewnętrznych elementów Savant z Pythona do Rusta: podstawowa biblioteka funkcji Savant-rs zaimplementowana z szeroko przetestowanym kodem.
- Komponenty oparte na Pythonie są stopniowo zastępowane komponentami opartymi na Rust, aby zapewnić, że Savant działa bez globalnej blokady (GIL) zawsze, gdy jest to możliwe, a kod jest wysokiej jakości.
- Udokumentowane adaptery do pracy z danymi.
Dodano przykłady użycia wstępnego przetwarzania obrazu.
Stworzyłem sekcję o tym, jak skonfigurować środowisko programistyczne w VS Code.
Na koniec należy wspomnieć, że twórcy planuję w następnej wersji Savant 0.2.5 zintegrować więcej kodu Rusta, tak aby potoki mniej polegać na GIL. Planowane jest również dostarczenie nowych funkcji związanych z dynamiczną konfiguracją potoków i rozwojem brzegowym oraz dodanie trzech do czterech nowych próbek obejmujących podstawowe i zaawansowane funkcje.
Jeśli chcesz dowiedzieć się więcej na ten temat, możesz zapoznać się ze szczegółami w następujący link.