Zaznacz stronę

Czy można wykorzystać sztuczną inteligencję do policzenia samochodów przejeżdżających przez jedną z najbardziej obciążonych ulic w Żorach? Pomysł narodził się podczas jednego środowego popołudnia, gdy niemal równocześnie spotkały się dwa światy. Lokalny problem mieszkańców oraz nowoczesne narzędzia sztucznej inteligencji.

Pierwszym było posiedzenie Rady Dzielnicy, podczas którego jednym z omawianych tematów było natężenie ruchu na jednej z ulic. W dyskusji pojawiły się pytania, które regularnie wracają przy rozmowach o organizacji ruchu:

  • ile pojazdów faktycznie przejeżdża tą drogą,
  • jaki udział stanowią samochody osobowe, ciężarowe i autobusy,
  • czy ruch zmienia się w zależności od dnia tygodnia i pory dnia,
  • jak w praktyce wygląda obciążenie tej części miasta.

Jak często bywa w takich przypadkach, każdy miał własne obserwacje, ale brakowało twardych danych.

Drugim wydarzeniem był webinar organizowany przez Intel pod tytułem „From Annotation to Deployment: Building an Object Detection Pipeline with Geti, YOLO26, and OpenVINO”. Podczas prezentacji pokazano kompletny proces budowy modelu sztucznej inteligencji. Od przygotowania danych, przez anotację i trenowanie, aż po wdrożenie gotowego rozwiązania na urządzeniach brzegowych.

W pewnym momencie pojawiła się myśl: skoro istnieją narzędzia pozwalające stosunkowo szybko przygotować model wykrywający pojazdy, to może warto sprawdzić, czy da się zbudować własny system pomiaru natężenia ruchu drogowego. Tak narodził się projekt, którego celem jest stworzenie lokalnego systemu analizującego ruch drogowy przy pomocy kamery oraz sztucznej inteligencji. Założenia projektu są stosunkowo proste:

  • kamera obserwuje wybrany odcinek drogi,
  • system automatycznie wykrywa obiekty,
  • rozpoznaje ich typ,
  • zlicza przejazdy i przejścia,
  • zapisuje statystyki w określonych przedziałach czasu.

W praktyce oznacza to możliwość uzyskania odpowiedzi na pytania takie jak:

  • Ile samochodów przejechało daną ulicą w ciągu doby?
  • Jaki jest udział samochodów osobowych, dostawczych, ciężarowych i autobusów?
  • Ilu pieszych oraz rowerzystów korzysta z danej infrastruktury?
  • Jak zmienia się natężenie ruchu w ciągu dnia, tygodnia lub roku?
  • Czy wprowadzone zmiany organizacji ruchu przynoszą oczekiwane efekty?

Docelowo cały system ma działać lokalnie, bez konieczności przesyłania obrazu do chmury.

Intel Geti na Windows 11, WSL2 i RTX 3060 – od zera do działającej platformy AI

Dlaczego Intel Geti?

Wybrałem Intel Geti, ponieważ pozwala trenować modele wykrywania obiektów bez konieczności pisania kodu. Pozwoliło to na szybkie przejście od materiału wideo do działającego modelu AI. Platforma pozwala zarządzać całym procesem tworzenia modeli Computer Vision:

  • importem danych,
  • anotacją,
  • trenowaniem,
  • walidacją,
  • wdrażaniem modeli.

Dużą zaletą jest wykorzystanie mechanizmu Active Learning, który automatycznie wskazuje najbardziej wartościowe przykłady do dalszego oznaczania.

Środowisko testowe

Do realizacji projektu wykorzystałem:

  • Windows 11,
  • Ubuntu 24.04 LTS uruchomione w WSL2,
  • NVIDIA GeForce RTX 3060 12 GB,
  • 64 GB RAM,
  • Intel Geti 2.13.

Instalacja Intel Geti

Instalacja Intel Geti okazała się bardzo dobrze przygotowanym procesem. W praktyce sprowadza się do:

  1. Pobrania źródeł projektu.
  2. Przygotowania środowiska Python.
  3. Uruchomienia instalatora.
  4. Podania podstawowych parametrów konfiguracji.

Podczas instalacji wykorzystałem domyślną lokalizację przechowywania danych:

/data

Instalator automatycznie:

  • przygotował komponenty systemowe,
  • zainstalował K3S,
  • uruchomił Kubernetes,
  • wdrożył wszystkie wymagane usługi platformy.
Geti – cały proces instalacji mieści się na jednym ekranie.

Po zakończeniu instalacji w klastrze działało kilkadziesiąt kontenerów odpowiedzialnych między innymi za:

  • Flyte,
  • MongoDB,
  • PostgreSQL,
  • Kafka,
  • OpenLDAP,
  • ModelMesh,
  • OpenVINO Model Server,
  • interfejs użytkownika Geti.

Problem z dostępem z Windows

Po zakończeniu instalacji pojawił się jeden problem. Platforma działała poprawnie z poziomu Ubuntu uruchomionego w WSL2:

curl -k https://10.255.255.254

zwracał stronę aplikacji. Jednak z poziomu Windows 11 interfejs nie był dostępny. Rozwiązaniem okazało się skonfigurowanie przekierowania ruchu pomiędzy hostem Windows a środowiskiem WSL2. Początkowo wykorzystałem rozwiązanie testowe, a następnie przygotowałem trwałą usługę uruchamianą automatycznie wraz ze startem systemu. Po zakończeniu konfiguracji platforma była dostępna bezpośrednio z przeglądarki uruchomionej w Windows 11.

Pierwszy model wykrywania pojazdów

Po uruchomieniu środowiska przyszedł czas na sprawdzenie najważniejszego elementu całego projektu – procesu budowy modelu wykrywającego pojazdy. Na potrzeby pierwszych eksperymentów postanowiłem nie korzystać jeszcze z materiałów pochodzących z własnej kamery. Zamiast tego wykorzystałem dwa publicznie dostępne filmy przedstawiające ruch drogowy.

Celem nie było uzyskanie idealnego modelu, lecz sprawdzenie w praktyce:

  • jak wygląda proces anotacji danych,
  • jak działa Active Learning,
  • ile danych potrzeba do rozpoczęcia trenowania,
  • jak szybko model zaczyna samodzielnie wykrywać obiekty.

Utworzenie projektu

Geti – przyjazny i intuicyjny. Zaczynamy pracę z pierwszym projektem.

W Geti utworzyłem projekt typu Detection – Bounding Box oraz zdefiniowałem następujące klasy:

  • Car
  • Truck
  • Bus
  • Person
  • Bicycle
  • OtherVehicle
Geti – dodawania klas.

Następnie zaimportowałem dwa filmy przedstawiające ruch uliczny.

Pierwsze anotacje

Po imporcie materiałów rozpocząłem ręczne oznaczanie pojazdów. Już po oznaczeniu niewielkiej liczby klatek Intel Geti uruchomił pierwszy proces trenowania modelu. Było to dla mnie sporym zaskoczeniem. W klasycznym podejściu opartym o YOLO zwykle przygotowuje się znacznie większy zbiór danych przed rozpoczęciem treningu. Tutaj wystarczyło oznaczyć pierwsze przykłady.

Active Learning w praktyce

Najciekawszym elementem całego procesu okazał się Active Learning. Po pierwszym treningu system zaczął:

  • samodzielnie proponować kolejne oznaczenia,
  • wskazywać najbardziej wartościowe klatki,
  • podpowiadać obiekty wymagające weryfikacji.

Na ekranie pojawiła się informacja „Annotations required: 42”. Oznaczało to, że system sam wytypował 42 klatki, które jego zdaniem warto przejrzeć lub poprawić. W praktyce ilość pracy wykonywanej ręcznie zaczęła szybko maleć.

Geti – pierwszy trening modelu

Pierwsze wyniki

Kolejne wersje modelu osiągały coraz lepsze wyniki:

  • około 61% dla pierwszych iteracji,
  • około 78% po rozszerzeniu zbioru danych,
  • około 83% po dodaniu drugiego filmu.

Oznaczyłem nieco ponad 300 klatek i po kilkunastu minutach treningu uzyskałem skuteczność przekraczającą 80%. Skuteczność na tym poziomie, oznacza, że w większości przypadków model poprawnie rozpoznawał pojazdy widoczne na nagraniach.

Pierwsze obserwacje

Już po kilku iteracjach model bardzo dobrze radził sobie z wykrywaniem samochodów osobowych. Jednocześnie statystyki projektu pokazały typowy problem występujący podczas budowy zbiorów danych – nierównomierny rozkład klas. Samochodów było wielokrotnie więcej niż autobusów, rowerzystów czy pieszych. To pokazuje, że jakość modelu zależy nie tylko od liczby danych, ale również od ich różnorodności.

Geti – automatycznie wykrywa typy pojazdów.

Podsumowanie

Pierwszy etap projektu zakończył się sukcesem. Udało się:

  • uruchomić Intel Geti na Windows 11 z wykorzystaniem WSL2,
  • skonfigurować środowisko AI wykorzystujące Kubernetes,
  • wytrenować pierwszy model wykrywania pojazdów,
  • przetestować mechanizm Active Learning,
  • osiągnąć skuteczność przekraczającą 80%.

Największym zaskoczeniem okazało się to, jak szybko można przejść od surowego materiału wideo do działającego modelu sztucznej inteligencji.

W kolejnym etapie planuję wykorzystać własne nagrania oraz sprawdzić, czy model będzie w stanie generować wiarygodne statystyki natężenia ruchu dla rzeczywistej lokalizacji. To właśnie wtedy okaże się, czy pomysł, który narodził się podczas jednego popołudnia, może przekształcić się w praktyczne narzędzie wspierające analizę ruchu drogowego.