Zliczanie osób w czasie rzeczywistym z wykorzystaniem Nvidia Jetson Nano!

Blog. Odkryj świat AI

Zliczanie osób w czasie rzeczywistym z wykorzystaniem Nvidia Jetson Nano!

AI Engineer

Krzysztof Udycz
Inżynier AI
24 czerwca 2019

Współczesne technologie, a w szczególności sztuczna inteligencja, w ostatnim czasie zaczęły rozwijać się bardzo szybko. Wiele znanych i doświadczonych firm zajmuje się m.in. przetwarzaniem języka naturalnego (ang. Natural Language Processing), przetwarzaniem obrazów (ang. Image Processing) czy po prostu uczeniem maszynowym (ang. Machine Learning). Jedną z takich firm jest Nvidia, która niedawno wypuściła na rynek Jetson’a Nano. Zdecydowaliśmy się przetestować to urządzenie w zakresie edge AI, implementując, a następnie testując algorytm, który pozwala na wykrywanie i śledzenie obiektów w czasie rzeczywistym.

Naszym pomysłem było przeprowadzenie analizy w czasie rzeczywistym z wykorzystaniem streamingu obrazu z podłączonej do urządzenia kamery w celu zliczenia klientów, którzy spełnią określone warunki. W ciągu kilku dni, stosując algorytmy sztucznej inteligencji, zbudowaliśmy urządzenie zliczające klientów. Głównym założeniem, na którym opierał się program zliczający było oddzielne liczenie klientów, którzy się zatrzymali przy kamerze oraz osobno tych, który tylko przeszli obok. Poniżej wyjaśniam, w jaki sposób zaimplementowaliśmy wspomniany algorytm oraz do czego takie rozwiązanie może być przydatne. 

Dlaczego firmy chcą liczyć klientów? Jakie są przypadki użycia?

Istnieje wiele przykładów zastosowania, w których takie podejście może być wykorzystywane. Czy zastanawiałeś się kiedyś, ile osób jest rzeczywiście zainteresowanych twoim stoiskiem targowym lub wystawą sklepową, a ile osób po prostu przechodzi obok? Chcesz się dowiedzieć co interesuje ludzi, którzy mijają witrynę? Jest to możliwe dzięki wykrywaniu, śledzeniu i zliczaniu w czasie rzeczywistym osób, które pozostawały przed kamerą przez określoną długość czasu. Na podstawie takiej analizy można określić, która wystawa jest najciekawsza dla danej grupy osób, jakie stanowisko/boks jest bardziej atrakcyjne lub jaka treść lepiej przyciąga uwagę ludzi. Informacje te pozwolą ci poprawić odbiór stoiska/wystawy i dostosować ofertę do potencjalnych klientów. Możliwości są nieograniczone.

Obejrzyj krótkie wideo z naszego testu:

Jak śledzić obiekty za pomocą sztucznej inteligencji?

Nvidia Jetson Nano – co to jest?

Nvidia Jetson Nano Developer Kit jest potężnym urządzeniem obliczeniowym do wbudowanych aplikacji. Zawiera zintegrowany 128-rdzeniowy układ GPU Maxwell, czterordzeniowy 64-bitowy procesor ARM A57, pamięć LPDDR4 o pojemności 4 GB, a także wsparcie MIPI CSI-2 i PCIe Gen2.

Ten kieszonkowy mini-komputer jest niewiarygodnie energooszczędny (5-10 W zużycia energii), a mimo to zapewnia duże możliwości obliczeniowe umożliwiające uruchomienie wielu nowoczesnych modeli AI, gwarantując przy tym wysoką efektywność. Jego wydajność obliczeniowa osiąga 472 GFLOPS, co pozwala zapewnić użytkownikowi spore wrażenia. Najnowszy członek rodziny Jetson został zaprojektowany jako platforma dla „AI on the Edge” – rozwiązania, w którym algorytmy sztucznej inteligencji są przetwarzane lokalnie na urządzeniu.

Aby rozpocząć pracę z Nvidia Jetson Nano Developer Kit, potrzebnych jest kilka rzeczy:

  • Karta pamięci microSD – karta, na której zainstalowany zostanie system operacyjny (JetPack);
  • Zasilanie;
  • Kabel HDMI – do podłączenia urządzenia do wyświetlacza;
  • Mysz i klawiatura – do sterowania i wprowadzania danych;
  • Połączenie z internetem – do pobierania oprogramowania.

Kolejną rzeczą wartą wspomnienia jest fakt, że Jetson Nano jest wspierany przez nowo wydane oprogramowanie o nazwie JetPack 4.2 SDK, które zawiera:

  • kompletne środowisko graficzne Linux (Ubuntu 18.04) ze sterownikami Nvidia;
  • biblioteki i API, takie jak:
    • CUDA Toolkit;
    • cuDNN – biblioteka CUDA Deep Neural Network;
    • TensorRT – deep learning w odniesieniu do klasyfikacji obrazów, segmentacji i wykrywania obiektów w sieciach neuronowych;
    • VisionWorks – pakiet oprogramowania dla Computer Vision i Image Processing;
  • Multimedia API;
  • narzędzia programistyczne – Nsight Eclipse Edition, narzędzia do debugowania i profilowania;
  • dokumentację i przykładowy kod.

A co z innymi popularnymi bibliotekami i frameworkami do Machine Learningu, takimi jak PyTorch, TensorFlow, Keras, Caffe czy OpenCV? Nie są one dostarczane wraz ze środowiskiem JetPack, ale można je łatwo zainstalować! I są w pełni kompatybilne z wydanym dev boardem.

Jetson Nano idealnie sprawuje się jako urządzenie Edge AI, które umożliwia Machine Learning/Deep Learning „on the edge”. Wydajność komputera w połączeniu z małymi rozmiarami, możliwościami pamięci, licznymi opcjami oraz elastycznością pracy sprawia, że zestaw Nvidia jest urządzeniem o nieograniczonym potencjale.

Nvidia Digits – co otrzymujemy?

Nvidia dzieli się swoimi doświadczeniami zebranymi przez lata, dostarczając zestaw narzędzi do Deep Learningu. Jednym z takich narzędzi jest DIGITS (The Deep Learning GPU Training System™), który umożliwia wykonywanie wielu zadań, m.in:

  • zarządzanie zestawami danych;
  • projektowanie i szkolenie bardzo dokładnych, głębokich sieci neuronowych do klasyfikacji obrazów, segmentacji, zadań związanych z wykrywaniem obiektów i wielu innych;
  • monitorowanie wydajności modelu;
  • walidację i wizualizację wyników;
  • wybór najlepszego modelu do wdrożenia.

System Deep Learning GPU Training System jest całkowicie interaktywny – do wszystkiego można dotrzeć poprzez intuicyjny interfejs dostępny za pośrednictwem przeglądarki. Połączenie DIGITS i Jetson firmy Nvidia tworzy skuteczne rozwiązanie do projektowania, testowania i wdrażania zaawansowanych sieci neuronowych dla dowolnej aplikacji.

Nvidia Jetson Nano

Jakie algorytmy możemy uruchomić na Jetson Nano?

Jetson Nano, w porównaniu do Google Coral Dev Board, wspiera szeroką gamę popularnych bibliotek i frameworków do Machine Learningu i Deep Learningu, takich jak Keras, TensorFlow, Caffe, Torch/PyTorch itp. Wsparcie dla tak wielu bibliotek czyni to urządzenie potężnym – może być wykorzystywane do projektowania, wdrażania i wykonywania działań z takich obszarów jak rozpoznawanie obrazów (ang. Computer Vision), Natural Language Processing czy przetwarzanie danych tabelarycznych. Jetson Nano firmy Nvidia może uruchamiać algorytmy takie jak:

  • klasyfikacja;
  • wykrywanie obiektów;
  • śledzenie obiektów;
  • segmentacja;
  • szacowanie pozycji i ruchu;
  • śledzenie cech charakterystycznych;
  • poprawa jakości obrazu (stabilizacja obrazu);
  • itp.

Wiele z tych algorytmów jest dostosowana do przetwarzania danych w czasie rzeczywistym, co oznacza, że mogą one analizować strumienie wideo o wysokiej rozdzielczości, np. z kamer na linii produkcyjnej/hali lub z kamer internetowych czy kamer bezpieczeństwa. Można także analizować w czasie rzeczywistym dźwięki lub dane z urządzeń IoT za pomocą Jetson Nano firmy Nvidia.

Wspomniane możliwości zestawu deweloperskiego, razem i oddzielnie, mogą posłużyć do budowy złożonych strumieni i systemów sztucznej inteligencji, które mogą być dodatkowo wykorzystywane w wielu zastosowaniach biznesowych i przemysłowych.

Śledzenie zainteresowania ludzi w czasie rzeczywistym podczas wydarzeń

Jetson Nano pojawił się na rynku niedawno, więc jest to relatywnie nowe urządzenie. Mimo iż Nano ma podobne oprogramowanie jak inni członkowie rodziny Jetson, to doświadczyliśmy kilku problemów. Ze wszystkimi sobie poradziliśmy – mamy doświadczenie z jego bratem Jetson TX2!

Zdecydowaliśmy się zrealizować mały proof of concept (PoC), aby przetestować i zademonstrować możliwości Jetson’a Nano. Naszym pomysłem było wykonanie analizy streamingu wideo w czasie rzeczywistym w celu zliczania osób podczas różnych wydarzeń np. targów, konferencji, a nawet poprzez ekspozycję sklepu w centrum handlowym. Ale jak można to wykorzystać w prawdziwym życiu? Dlaczego firmy chciałyby liczyć klientów? Na podstawie takiej analizy można określić, która wystawa jest najciekawsza dla określonej grupy osób, jakie stoisko czy boks jest bardziej atrakcyjne lub jaka treść lepiej przyciąga uwagę ludzi. Istnieje wiele przypadków użycia, w których takie podejście może być zastosowane.

Jak to zrobiliśmy?

Nasz algorytm wykrywania i śledzenia obiektów został zaimplementowany w języku programowania Python. Wykorzystaliśmy kamerę internetową C920 HD Pro Webcam firmy Logitech, która umożliwia nagrywanie lub streaming wideo o wysokiej rozdzielczości. Do widzenia komputerowego (ang. Computer Vision), szybszych obliczeń i implementacji głębokich sieci zdecydowaliśmy się wykorzystać kilka znanych bibliotek, takich jak CUDA, OpenCV, dlib i numpy. Oto kroki opisujące działanie naszego algorytmu:

  • Załadowanie bibliotek i zainicjowanie zmiennych;
  • Załadowanie modelu wykrywającego obiekty (w naszym wypadku klientów). Użyto modelu MobileNet z powodu jego wysokiej wydajności;
  • Uruchomienie streamingu obrazu z kamery internetowej;
  • Dla każdej klatki filmowej wykonanie poniższych czynności:
    •  Co 10 klatek skonstruowanie „image blob” z bieżącego obrazu, przepuszczenie go przez sieć w celu uzyskania predykcji oraz zainicjowanie listy brył ograniczających (ang. bounding boxes). Następnie iterowanie po wykrytych obiektach i jeśli dany obiekt nie jest obecnie śledzony, zainicjalizowanie trackera. OpenCV udostępnia kilka wbudowanych trackerów;
    •  Zainicjalowanie trackerów;
    •  Iteracja po wykrytych obiektach i narysowanie bounding boxów;
    • Zliczenie obiektów spełniających zdefiniowane założenia;
    • Wyświetlenie dodatkowych informacji;
  • Zatrzymanie streamingu wideo.

Rozważyliśmy dwa podejścia do liczenia ludzi. Pierwszym z nich jest liczenie osób, które pojawiają się na nagraniu przez okres dłuższy niż określona liczba klatek. Drugim sposobem jest sprawdzanie obszaru obiektu – jeśli powierzchnia zwiększa się z czasem, oznacza to, że obiekt zbliża się do naszego stoiska czy wystawy. Postanowiliśmy najpierw zaimplementować pierwsze podejście. Drugie podejście zostanie zaprezentowane wkrótce.

Jetson Nano a Jetson TX2

Jak już wspomniano, posiadamy pewne doświadczenie z Jetsonem TX2, więc zdecydowaliśmy się porównać możliwości obliczeniowe tych dwóch urządzeń. Jetson TX2 jest w stanie uzyskać 1,5 TFLOPS wydajności obliczeniowej, czyli prawie trzy razy więcej niż Jetson Nano. Z drugiej strony, jest większy i mniej przenośny niż mniejszy i nowszy członek rodziny Jetson. Przeprowadziliśmy te same testy na obu urządzeniach przy użyciu wspomnianego algorytmu wykrywania i śledzenia obiektów. Spodziewaliśmy się trzy razy szybszych obliczeń dla TX2. Co zaskakujące, wyniki dla Jetson Nano nie były tak złe w porównaniu z Jetson TX2. Może to wskazywać na bardzo dobrą optymalizację działania algorytmu.

Jetson Nano jest mniejszy i ma mniejszą wydajność obliczeniową niż większy Jetson TX2. Czy to więc oznacza, że jest gorszy? Wcale nie. Dla większości zastosowań jego wydajność jest wystarczająca.

Podsumowanie i wnioski

Jetson Nano firmy Nvidia oferuje rozwiązania umożliwiające świetny start w świat sztucznej inteligencji i doświadczenie jej potęgi. Wspiera on szeroką gamę znanych bibliotek i frameworków do machine learningu i deep learningu. Posiada również wystarczającą wydajność obliczeniową i zbiór dedykowanego oprogramowania. Dodatkową zaletą tego urządzenia oferującego rozwiązanie edge AI jest niewielki rozmiar, który pozwala na wykonywanie obliczeń w dowolnym miejscu.

Jednym z zastosowań urządzenia Jetson Nano może być analiza obrazu z kamery w czasie rzeczywistym. Wykrywanie, śledzenie i liczenie osób lub innych obiektów może zostać wykorzystane w wielu dziedzinach biznesu i przemysłu. Rozwiązanie to pozwoli, na przykład ocenić zainteresowanie ludzi danym stoiskiem targowym lub wystawą sklepową.

Jetson Nano to urządzenie oferujące wiele możliwości, które pozwolą ci na zaimplementowanie i zrealizowanie rozwiązania z zastosowaniem AI.

Chcesz dowiedzieć się jak wykorzystać AI w Twojej firmie?