Załóżmy, że trzeba segregować warzywa, takie jak cytryny, cebule i pomidory, albo na przykład długopisy i ołówki. Do realizacji takiego zadania wystarczy płytka Raspberry Pi lub moduł ESP32-CAM oraz kilka przekaźników. W tym projekcie jako przykład wykorzystamy moduł ESP32-CAM do identyfikacji warzyw.
Gdy kamera wykryje pomidor, cebulę lub cytrynę, zostanie załączony odpowiedni przekaźnik, który otworzy pojemnik przeznaczony dla danego warzywa.
Na fotografii pokazano prototyp autora. Podzespoły potrzebne do budowy urządzenia wymieniono w liście elementów.
Przygotowanie modelu uczenia maszynowego (ML)
Aby rozpocząć pracę, należy otworzyć stronę Edge Impulse i utworzyć nowy projekt. Aby urządzenie mogło poprawnie rozpoznawać segregowane przedmioty, trzeba zgromadzić ich zdjęcia wykonane pod różnymi kątami, zarówno pojedynczych obiektów, jak i ich grup. Pozostałe etapy przygotowania modelu zostaną zrealizowane automatycznie przez środowisko Edge Impulse.
Aby zebrać zdjęcia obiektów, wykorzystamy w projekcie minikomputer Raspberry Pi oraz kamerę smartfonu lub laptopa. Kolejne kroki przedstawiono poniżej.
Wchodzimy na stronę Edge Impulse, logujemy się i tworzymy nowy projekt. W prawym górnym rogu ekranu klikamy Collect data (zbieranie danych), a następnie Connect a device to start building your dataset (podłącz urządzenie, aby rozpocząć tworzenie zestawu danych).
Gromadzimy dużą liczbę zdjęć obiektów wykonanych pod różnymi kątami i w różnych konfiguracjach. W lewej górnej części ekranu znajdują się trzy zakładki: Dataset (zestaw danych), Data source (źródło danych) oraz Labeling queue (kolejka etykietowania). Klikamy Data source i wskazujemy kamerę smartfonu lub laptopa. Od tej chwili wybrana kamera jest gotowa do wykonywania zdjęć potrzebnych do budowy zestawu danych.
Tworzymy projekt, przechodząc do Dashboard → Devices → Data acquisition (Impulse design → Create impulse → Image → Object detection). Po zebraniu odpowiedniej liczby zdjęć wszystkich rozpoznawanych obiektów (na przykład około 200) dzielimy je w proporcji 80:20 na zbiór treningowy i testowy. Każdy obiekt na zdjęciu należy oznaczyć za pomocą otaczającej go ramki. Aby ograniczyć konieczność ręcznego oznaczania obiektów, można w sekcji Label suggestions (sugestie etykiet) przejść do Labeling queue (kolejka etykietowania) i wybrać opcję Classify using YOLOv5.
W sekcji Object detection (wykrywanie obiektów) dostępnych jest kilka modeli wykrywania i klasyfikacji obiektów. Spośród nich najłatwiejsze w użyciu są YOLO i FOMO, które zapewniają zadowalającą skuteczność wykrywania i klasyfikacji obiektów. Po wybraniu modelu uruchamiamy proces trenowania. Operacja ta zajmuje pewien czas, dlatego należy uzbroić się w cierpliwość.
Pod koniec procesu trenowania sprawdzamy wartość wskaźnika F1 (F1 score). Powinna ona wynosić co najmniej 85%. Jeżeli wynik jest niższy, może być konieczna zmiana modelu lub usunięcie niektórych niereprezentatywnych obrazów, które pogarszają skuteczność działania modelu.
Teraz możemy przetestować model, wykorzystując 20% danych odłożonych wcześniej do testów. Można analizować obrazy pojedynczo lub przetestować cały zbiór jednocześnie. Skuteczność rozpoznawania powinna mieścić się w akceptowalnym zakresie (81%...91%). Co ciekawe, wynik bliski 100% nie zawsze jest korzystny, ponieważ może świadczyć o nadmiernym dopasowaniu modelu do danych treningowych.