W ramach kursów uczestnicy zdobywają przede wszystkim umiejętności praktyczne. Kursantki i kursanci dzielą się na grupy, wybierają problem do rozwiązania, a następnie realizują projekty, które trafiają do ich portfolio. Przedstawiamy Wam efekty pracy zespołu Rocket Science, który w ramach kursu Data Science zbudował mini system pozwalający rozpoznawać klocki LEGO.
Skład zespołu
Zespół składał się z trzech osób:
- Aleksandra Baran (LinkedIn, GitHub)
- Dariusz Balcer (LinkedIn, GitHub)
- Grzegorz Gomza (LinkedIn, GitHub)
MENTOR/OPIEKUN MERYTORYCZNY ZESPOŁU:
Mateusz Maj (LinkedIn)
Założenia projektu
Projekt powstał w ramach zaliczenia bootcampu Data Science i skupia się na jednej z najbardziej rozpoznawalnych zabawek na świecie – klockach LEGO. Razem podjęliśmy wyzwanie, wykorzystując umiejętności z zakresu analizy danych, uczenia maszynowego i wizji komputerowej.
Motywacją do realizacji projektu był scenariusz przedstawiony przez fikcyjnego interesariusza – twórcę startupu, który pracuje nad aplikacją rozpoznającą klocki LEGO na podstawie fotografii użytkowników. Taki system mógłby być pomocny zarówno dla kolekcjonerów, jak i pasjonatów LEGO, umożliwiając szybką identyfikację poszczególnych elementów.
Naszym celem było stworzenie modelu, który umożliwia rozpoznawanie poszczególnych elementów LEGO na podstawie zdjęć.
Aby to osiągnąć, stworzyliśmy model wykorzystujący tzw. deep learning, czyli zaawansowaną metodę uczenia komputerów na podstawie dużych ilości danych. W szczególności użyliśmy sieci konwolucyjnej (ang. convolutional neural network, CNN), która jest specjalnie zaprojektowana do pracy z obrazami, m.ni. potrafi rozpoznawać wzory w obrazach, takie jak kształty i tekstury, co sprawia, że idealnie nadaje się do tego typu zadań, jak rozpoznawanie klocków LEGO.
W projekcie wykorzystaliśmy zestaw danych dostępny na platformie Kaggle, który obejmuje szeroki zbiór obrazków klocków LEGO o różnych kształtach i rozmiarach.
ZACZNIJMY OD POCZĄTKU, CZYLI KILKA SŁÓW O LEGO:
Historia LEGO
Twórcą klocków, na których wzorowane są produkty Lego, był Hilary Fisher Page. Jego firma, Kiddicraft, wprowadziła na rynek w 1947 roku klocki pod nazwą Self-locking Building Bricks. Niestety, wynalazek ten nie odniósł większego sukcesu komercyjnego.
Pomysł został zaadaptowany przez firmę Lego, która w 1949 roku wprowadziła na rynek własny produkt, początkowo pod nazwą Automatic Binding Bricks. Mimo że Hilary F. Page posiadał patent na swój wynalazek, zniechęcony niepowodzeniem, nie podjął działań prawnych w obronie swoich praw.
Ostatecznie w 1981 roku firma Lego nabyła prawa do klocków oraz znaku towarowego Kiddicraft.
Źródło: https://www.lego.com/
PROJEKTOWANIE MODELU, CZYLI O WYZWANIACH KOLEKCJI LEGO
Katalog wszystkich klocków Lego w całej ich historii obejmuje blisko 84 tysiące pozycji. Stworzenie pełnego systemu do rozpoznawania i klasyfikacji wszystkich tych elementów okazało się dużym wyzwaniem, zarówno pod względem zasobów, jak i czasu potrzebnego na wytrenowanie oraz wdrożenie ostatecznego rozwiązania. Dodatkową trudność stanowił fakt, że choć klocki Lego zachowały pełną kompatybilność wstecz, to jednak ulegały pewnym modyfikacjom na przestrzeni lat. Przykładowo, podstawowy klocek 4×2 (nr katalogowy 3001) wystąpił dotychczas w dwunastu różnych wariantach.
Źródło: https://snakeandboris.blogspot.com/
Dla systemu rozpoznającego klocki stanowiło to dodatkowe wyzwanie.
Z jednej strony, chcieliśmy, aby system rozpoznawał, że chodzi o ten sam typ klocka, kiedy jest on wykorzystywany w budowie. Z drugiej strony, ważne było to, aby potrafił on także zidentyfikować konkretny wariant klocka, produkowany w danym okresie. Dla kolekcjonerów może to być kluczowa funkcjonalność.
Nasz model zdecydowaliśmy się zbudować na ograniczonej części katalogu, składającej się z „zaledwie” 20 klocków.
Dla każdego z nich przypisaliśmy 4000 sztuk zdjęć, z których 80% zostało wykorzystane do treningu modelu. Zdecydowaliśmy się na taki wybór ze względu na ograniczone zasoby obliczeniowe oraz możliwość wykorzystania GPU.
WEJDŹMY GŁĘBIEJ W TEMAT: Modele sieci konwolucyjnych
W celu realizacji zadania zdecydowaliśmy się na zastosowanie wspomnianej wcześniej sieci konwolucyjnej. Jako zespół RocketScience opracowaliśmy architekturę sieci „RocketNet”, przyjmującą jako dane wejściowe kolorowy obraz o rozdzielczości 64 px x 64 px.
W architekturze zastosowaliśmy trzy warstwy konwolucyjne, posiadające odpowiednio 32, 64 oraz 128 filtrów.
Między tymi warstwami umieszczone zostały warstwy: normalizacyjna oraz poolingowa. Przejście z warstwy konwolucyjnej na warstwę gęstą wymagało dodania warstwy spłaszczającej.
W sieci znalazła się warstwa gęsta z 512 neuronami, po której następuje warstwa dropout o wartości 50%.
W całej sieci zastosowana została funkcja aktywacji ReLU.
Warstwa wyjściowa składała się z 20 neuronów, odpowiadających liczbie klas.
Nasza architektura sieci w pewnym stopniu przypomina architekturę AlexNet. AlexNet jest nazwa sieci konwolucyjnej opracowanej w 2012 przez Alexa Krizhevsky na potrzeby konkursu, którego celem było skuteczne rozpoznanie jednego z 1000 obiektów na obrazku wielkości 224px x 224px. Zastosowane metody oraz opracowana architektura sieci była krokiem milowym w historii Deep Learningu. Można powiedzieć, że RocketNet jest uproszczoną wersją AlexNet. Gdyby Alex Net sprowadzić do rozdzielczości 64x64x3 oraz klasyfikacji 20 obrazków to zlądowalibyśmy do architektury sieci zastosowanej przez Rocket Science..
W RocketNet zastosowaliśmy dwie warstwy konwolucyjne mniej niż w AlexNet oraz zrezygnowaliśmy z drugiej warstwy gęstej.
Różnica widoczna jest także w parametrze stride: AlexNet w pierwszych warstwach przesuwa filtr o 5 px, podczas gdy RocketNet robi to w skoku 3 px.
Z uwagi na te podobieństwa, postanowiliśmy porównać obie sieci.
Trenowanie modeli – o co w tym chodzi i jak to zrobiliśmy w naszym projekcie?
Trenowanie sieci konwolucyjnych polega na nauczaniu modelu rozpoznawania wzorców w obrazach, poprzez dostosowywanie wag w sieci na podstawie danych treningowych. Trenowanie sieci odbywa się wielokrotnie w pętli, do momentu w którym sieć wskazuje właściwe wyniki na wcześniej przygotowanym testowym zestawie danych. W tym celu wykorzystuje się tzw. odwrotną propagację błędu (ang. Back propagation), co pozwala sieci na poprawę wyników przy kolejnych iteracjach (epokach) . To ważny krok, ponieważ umożliwia maszynom zrozumienie i analizowanie wizualnych danych.
Oba modele zostały wytrenowane dwukrotnie.
Pierwszy trening przeprowadzono przez 50 epok, aby określić moment przetrenowania modelu.
Drugi trening zrealizowano z liczbą epok ustaloną podczas pierwszego treningu.
Jako zespół uznaliśmy, że AlexNet był już wystarczająco wytrenowany po 40 epokach, mimo że tendencja była nadal lekko wzrostowa. Najprawdopodobniej z uwagi na większą ilość filtrów model uczył się wolniej, co nie oznacza jednak, że był odporny na przeuczenie.RocketNet został zatrzymany po 10 epokach, ponieważ w każdej kolejnej epoki spadała skuteczność modelu na zestawie walidacyjnym.
AlexNet:
RocketNet:
Ocena sieci
Na podstawie kształtu klocków można było oczekiwać pomyłek w trzech parach klocków:
(RocketNet)
A tymczasem najwięcej pomyłek było pomiędzy:
(RocketNet)
Okazało się, że sieć RocketNet miała problemy z rozpoznawaniem kilku klocków, problem ten w rzeczywistości skupiał się głównie na jednym klocku o numerze 15070, który był mylony z klockiem 15712. Pozostałe klocki nie były mylone nadmiernie często.
Skuteczność sieci RocketNet na zestawie walidacyjnym wyniosła 88,9%.
W przypadku sieci AlexNet pomyłki zdarzały się znacznie częściej, a także miały miejsce na wcześniej wspomnianych klockach. Większe błędy występowały jednak w przypadku innych klocków, takich jak 18651 oraz 11214.
Skuteczność sieci AlexNet na zestawie walidacyjnym wyniosła90,9%.
Można ogólnie stwierdzić, że AlexNet, z uwagi na swoją złożoność, nie była w stanie generalizować tak dobrze jak prostsza sieć RocketNet. Na tej podstawie można wysunąć wniosek, że nie zawsze bardziej złożona i skomplikowana sieć lepiej wykonuje powierzone jej zadania.
Podsumowując, nasz RocketNet był zaledwie o 2% „mniej” skuteczny, jednak błędy były rozdystrybuowane między wszystkie klasy, a nie skoncentrowane na kilku klockach, jak miało to miejsce w przypadku AlexNet.
Na podstawie uzyskanych wyników testowania modeli RocketNet i AlexNet oraz ich skuteczności, możemy stwierdzić, że jesteśmy zadowoleni z osiągniętych rezultatów. Fakt, że RocketNet, mimo niższej skuteczności, lepiej radził sobie z różnorodnością klas i minimalizował skoncentrowane błędy, daje nam nadzieję na dalsze udoskonalenie tego modelu. To pokazuje, że prostsze sieci mogą być równie efektywne, a nawet bardziej stabilne w praktycznych zastosowaniach, co otwiera nowe możliwości w eksploracji architektur sieciowych.
Co „widzi sieć neuronowa”?
Aby pogłębić wiedzę o tym, co się dzieje w procesie rozpoznawania obrazów przez sieć konwolucyjną, zespół zdecydował się na zastosowanie techniki Grad-CAM, która pozwala „zajrzeć” w głąb tej sieci. W szczególności odnosi się to do analizy, które obszary obrazu wpływają na decyzje modelu i jak model interpretuje różne cechy wizualne. Dzięki temu możemy lepiej zrozumieć, w jaki sposób sieć konwolucyjna klasifikuje obiekty, co może pomóc w dalszym doskonaleniu jej działania.
Metoda polega na generowaniu macierzy, która jest wynikiem „przejścia” obrazka przez kolejne warstwy konwolucyjne. Do tak wygenerowanego obrazka przypisywana jest skala „termiczna”. W kolejnym kroku obrazek ten nakładany jest na oryginalny obraz przed jego przetworzeniem przez sieć neuronową. Im głębsza warstwa sieci konwolucyjnej, tym mniejsze wizualne znaczenie może generować tego typu heatmapa. Ostatecznie ostatnia warstwa przechodzi jeszcze przez warstwę gęstą, która jest odpowiedzialna w dużej mierze za klasyfikację. Należy podkreślić, że tak wygenerowane heatmapy są jedynie wizualną reprezentacją matematycznych obliczeń wykonywanych przez sieć neuronową.
Na poniższych obrazkach sieci rozpoczynają się na samym dole, a zatem obrazy należy interpretować od dołu do góry. Możemy na nich zauważyć, jak sieć AlexNet starała się dokładnie i kompleksowo rozpoznać obiekty znajdujące się na obrazku. Z kolei RocketNet, na wstępie również analizując i generalizując cały obrazek, w ostatnim kroku wygenerowała heatmapę, która nie przypominała już oryginalnego obrazu. Ostatnia warstwa konwolucyjna dostarczyła jedynie sygnał do sieci gęstej, która zinterpretowała go jako klasę klocka.
Jak to można wykorzystać? Przykłady aplikacji:
Aplikacja do budowania z LEGO
Podsumowując, stworzyliśmy model sztucznej inteligencji, który rozpoznaje klocki LEGO i otwiera nowe możliwości w projektowaniu budowli. Dzięki aplikacji użytkownik może w pełni wykorzystać potencjał posiadanych klocków.
Funkcje aplikacji:
- Analiza stosu klocków – Aplikacja skanuje dostępne klocki i rozpoznaje wszystkie elementy, co pozwala dokładnie określić, z czym mamy do czynienia.
- Propozycje modeli – Na podstawie zidentyfikowanych klocków, aplikacja sugeruje różne modele, które można zbudować, dostosowane do wybranej tematyki, np. pojazdy, budowle czy postacie.
- Lista potrzebnych elementów – Po wyborze modelu, aplikacja wskaże, które z dostępnych klocków można wykorzystać do budowy, dopasowując model do tego, co już mamy pod ręką. Dzięki temu możemy tworzyć bez potrzeby dokupowania dodatkowych elementów.
- Automatyczne generowanie instrukcji – Gdy zdecydujesz się na konkretny model, aplikacja automatycznie wygeneruje szczegółową instrukcję krok po kroku, ułatwiając proces budowania.
Źródło: https://www.lego.com/
To nowoczesne narzędzie dla każdego miłośnika LEGO, które przekształca proces tworzenia w coś jeszcze bardziej kreatywnego i dostępnego!
Aplikacja wspierająca osoby niewidome i słabowidzące w budowaniu zestawów LEGO
Aplikacja ma na celu wsparcie osób niewidomych i słabowidzących w budowaniu zestawów LEGO, oferując narzędzia, które nie tylko poprawiają umiejętności, ale również tworzą angażujące, interaktywne doświadczenia.
LEGO już wcześniej wprowadziło zestawy do nauki alfabetu Braille’a, wspierające edukację dzieci niewidomych.
Aplikacja wykorzystująca model sieci neuronowej do rozpoznawania klocków, rozszerza te możliwości, czyniąc budowanie dostępne i w pełni przystosowane.
Funkcje aplikacji:
- Wybór projektu – Aplikacja rozpoczyna od przedstawienia projektu, opisując go w prosty i zrozumiały sposób, dostosowany do użytkownika, aby zachęcić do dalszej interakcji.
- Rozpoznawanie klocków LEGO – Dzięki kamerze aplikacja automatycznie rozpoznaje klocki i identyfikuje je za pomocą komunikatów głosowych, ułatwiając szybkie znalezienie odpowiednich elementów.
- Nauka alfabetu Braille’a – Integracja z zestawami do nauki Braille’a umożliwia interaktywne gry i zadania edukacyjne, wspierające rozwój umiejętności w przystępny i angażujący sposób.
- Instrukcje głosowe – Aplikacja oferuje krok po kroku szczegółowe instrukcje głosowe, które pomagają użytkownikowi wybierać odpowiednie klocki i umieszczać je we właściwych miejscach.
- Interaktywne opowieści – Wzbogacamy proces budowania poprzez opowiadanie historii o modelach, np. ciekawostki o rzeczywistych budynkach czy pojazdach, co czyni budowanie bardziej fascynującym.
- Wykrywanie błędów – Aplikacja monitoruje postęp budowy, wykrywa ewentualne błędy i informuje użytkownika o konieczności ich poprawy.
- Gratulacje i sugestie – Po zakończeniu budowy aplikacja gratuluje użytkownikowi osiągnięcia celu i proponuje kolejne projekty dostosowane do jego poziomu umiejętności.
Źródło: https://www.lego.com/
Ta aplikacja nie tylko otwiera świat LEGO dla osób niewidomych i słabowidzących, ale również wzmacnia ich kreatywność oraz rozwija zdolności poprzez angażujące i edukacyjne doświadczenia.
Aplikacja do organizacji i zarządzania kolekcją LEGO
Taka aplikacja to innowacyjne narzędzie, które umożliwia katalogowanie i zarządzanie klockami LEGO w prosty i intuicyjny sposób.
Dzięki funkcji skanowania, użytkownicy mogą automatycznie rozpoznawać i zapisywać szczegółowe informacje o swoich klockach, w tym ich rodzaj i ilość, co pomaga w efektywnej organizacji.
Funkcje aplikacji:
- Automatyczne rozpoznawanie klocków – Użytkownik skanuje klocki, a aplikacja automatycznie identyfikuje ich kształt, kolor oraz inne cechy, zapisując dane do cyfrowej kolekcji.
- Segregowanie według kategorii – Aplikacja ułatwia sortowanie klocków na podstawie ich kształtów, kolorów i typów, co znacznie upraszcza organizację oraz szybkie znajdywanie potrzebnych elementów.
- Wsparcie dla firm – Aplikacja jest przydatna także dla firm, które zajmują się skupowaniem dużych ilości wymieszanych klocków. Umożliwia szybkie segregowanie LEGO oraz odrzucanie klocków innych firm, co zwiększa efektywność pracy.
Źródło: https://www.lego.com/
Aplikacja idealnie sprawdza się zarówno dla miłośników LEGO, jak i profesjonalistów, oferując proste i efektywne zarządzanie nawet największymi kolekcjami klocków.
Aplikacja do zakupów i wymiany klocków LEGO
Aplikacja pomaga fanom LEGO w efektywnym zarządzaniu kolekcją, ułatwiając kompletowanie zestawów oraz wymianę i zakup brakujących elementów.
Dzięki nowoczesnym funkcjom użytkownicy mogą w pełni korzystać z możliwości rozbudowy swojej kolekcji.
Funkcje aplikacji:
- Skanowanie i identyfikacja klocków – Użytkownicy mogą skanować klocki za pomocą kamery w smartfonie, a aplikacja automatycznie rozpoznaje i kataloguje elementy, ułatwiając zarządzanie kolekcją.
- Znajdowanie brakujących elementów – Aplikacja analizuje zbiory użytkownika, identyfikując brakujące elementy w zestawach, co przyspiesza ich kompletowanie.
- Podpowiedzi dotyczące zakupów – Aplikacja porównuje ceny brakujących klocków w różnych sklepach internetowych i stacjonarnych, oferując najlepsze opcje zakupu, by użytkownik mógł wybrać najkorzystniejszą ofertę.
- Platforma do wymiany klocków – Aplikacja umożliwia użytkownikom wymianę klocków LEGO z innymi kolekcjonerami. Można oferować nadmiarowe elementy i szukać tych, które są potrzebne do ukończenia zestawów.
- Rekomendacje zakupów – Na podstawie analizy kolekcji i preferencji użytkownika, aplikacja sugeruje nowe zestawy LEGO, które mogą być dla niego interesujące.
Źródło: https://www.lego.com/
Dzięki tej aplikacji fani LEGO mogą z łatwością zarządzać swoimi zbiorami, kompletować brakujące elementy i nawiązywać kontakt z innymi kolekcjonerami, tworząc bardziej zróżnicowaną i bogatą kolekcję.
Podsumowanie
Na koniec chcielibyśmy wyrazić nasze ogromne uznanie dla Mateusza Maja, naszego opiekuna kursu, który sprawował nadzór merytoryczny nad całym projektem. Jego wsparcie było nieocenione nie tylko w kontekście tego konkretnego przedsięwzięcia, ale również przy wcześniejszych projektach realizowanych w trakcie kursu. Mateusz zawsze służył radą i pomocą, na jego zaangażowanie mogliśmy liczyć w każdej sytuacji, co zdecydowanie ułatwiło nam naukę i realizację zadań. Jego odpowiedzialność i chęć pomocy były kluczowe dla naszego sukcesu na całym bootcampie.
Prace nad projektem były dla naszego zespołu nie tylko okazją do rozwoju technicznego, ale również szansą na wspaniałą współpracę. Każdy z członków zespołu wniósł swoje unikalne doświadczenie i umiejętności, co pozwoliło nam spojrzeć na wiele zagadnień z różnych perspektyw. Ta różnorodność doświadczeń była naszą siłą – mogliśmy swobodnie dyskutować, wymieniać się pomysłami i znajdować innowacyjne rozwiązania.
Dzięki naszej współpracy projekt LEGO stał się czymś więcej niż tylko zadaniem na zaliczenie. Klocki LEGO od lat sprawiają radość zarówno dzieciom, jak i dorosłym. To kultowa zabawka, którą wszyscy znamy i lubimy.
Oczywiście, jak w każdym projekcie, napotkaliśmy pewne wyzwania. Ograniczenia sprzętowe sprawiły, że nie mogliśmy przetestować naszego modelu na tak szerokiej gamie klocków LEGO, jak byśmy chcieli. Jednak pomimo tych trudności, udało nam się stworzyć funkcjonalny model, który ma potencjał do dalszego rozwoju. Nasza praca nad projektem tylko rozbudziła nasz apetyt na więcej – z chęcią kontynuowalibyśmy go, mając do dyspozycji większe zasoby.
Jesteśmy niezwykle zadowoleni z efektów naszej pracy oraz z przebiegu całego projektu. Co więcej, wierzymy, że znajomości zawarte na kursie przetrwają dłużej niż do zakończenia naszego bootcampu.
Żaden z członków zespołu nie był wcześniej programistą – pochodzimy z różnych branż, a przed kursem nie mieliśmy żadnego doświadczenia z Data Science ani szerzej z branżą IT. Mamy nadzieję, że kiedyś uda nam się jeszcze wspólnie współpracować przy jakimś projekcie.
Sprawdź kurs weekendowy Data Science + AI
Dane stały się prawdziwą walutą w dzisiejszych czasach. Firmy odkryły możliwości, jakie płyną ze zbierania danych. Mocniejsze i tańsze komputery sprawiają, że Data Science jest dostępna dla coraz mniejszych firm, co przekłada się na wzrost zapotrzebowania na specjalistów od danych. Jeśli chcesz nauczyć się wykorzystywać dane i tworzyć takie aplikacje jak powyżej, to zapisz się na bootcamp Data Science.
Przeczytaj: Data Science – pasjonująca branża z wysokim zarobkami >>
Poznaj inne historie naszych absolwentów:
👉 Elektronikę zamienił na programowanie – historia Jarosława Witowskiego
👉 Zamiast zarządzać finansami rozwija zagraniczną aplikację – historia Magdy Kłopotek
👉 Architektka wnętrz, która została programistką – historia Julii Łojek