Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'SI'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 2 wyniki

  1. Mit o naszym poznawczym uniwersalizmie, o naszej gotowości odebrania i zrozumienia informacji całkowicie, przez jej pozaziemskość, nowej - trwa niewzruszony, chociaż, otrzymawszy posłanie z gwiazd, zrobiliśmy z nim nie więcej, niżby zrobił dzikus, który, ogrzawszy się u płomienia podpalonych dzieł najmędrszych, uważa, że doskonale owe znalezisko wykorzystał! - Stanisław Lem Głos Pana Tymi słowami Stanisław Lem konkludował próbę odszyfrowania przez Człowieka tajemniczego sygnału z kosmosu, którego odkrycie było dziełem przypadku. Sygnał, pochodzący najprawdopodobniej od obcej cywilizacji z krańca Kosmosu stał się zagadką, poddającą w wątpliwość ludzką poznawczość. Pomimo licznych prób i wzajemnej współpracy grona naukowców, wiadomość udało się rozpracować tylko częściowo, a nawet uzyskany wynik stanowił dalsze ogniwo niezrozumienia i zdumienia. Chcąc opowiedzieć czym był sygnał, jak został odkryty i do jakich odkryć poprowadził grupę uczonych należy sięgnąć do książki Stanisława Lema „Głos Pana”. Ten wpis brał udział konkursie na najlepszy artykuł o elektronice lub programowaniu. Sprawdź wyniki oraz listę wszystkich prac » Partnerem tej edycji konkursu (marzec 2020) był popularny producent obwodów drukowanych, firma PCBWay. Dlaczego przytoczone zostały właśnie te słowa i w jaki sposób korespondują one z tematem artykułu? Jeżeli miałeś nadzieję, że przedstawione zostaną kulisy pierwszego kontaktu z obcą cywilizacją, to niestety możesz się lekko rozczarować, ale ta era (jeszcze) nie nadeszła - jakkolwiek byśmy tego nie chcieli i próbowali zaklinać czasoprzestrzeń. Pozwólmy, rzucić sobie światło na niemniej, a nawet równie ciekawą materię. Komunikacja Powracając do powieści Stanisława Lema, komunikacja, choć jednostronna przebiega tam zdalnie. Z otchłani kosmosu dobiega sygnał w postaci ciągu neutrin – cząstek nie posiadających masy, zdolnych do przenikania materii. Cząstki te nadawane są w pewnych odstępach czasowych. Uważnie przyglądając się całości emisji dostrzec można, pewne zależności powodujące, że w procesie widoczna jest pewna wiadomość. Komunikatu zostaje zapętlony, a zarówno nadawca jak i odbiorca kosmicznego komunikatu nie widzą się wzajemnie. Są przekonani o wzajemnym istnieniu, ale fizycznie, poza komunikatem nie mają ze sobą jakiegokolwiek innego kontaktu. Czy cała idea tego procesu nie wygląda w pewien sposób znajomo? Tak, to Test Turinga! Obca cywilizacja przesyłając komunikat zainicjowała proces Testu Turinga, w oczekiwaniu na sprzężenie zwrotne, które miało udowodnić naszą inteligencję. Barierą oddzielającą „komputer” od człowieka jest ogromna przestrzeń kosmiczna, a sam sygnał przyjmuje nieco inną formę, niż tą jaką przewidział w swoich założeniach Alan Turing. Niestety, cały mistycyzm pierwszego kontaktu sprowadzony zostaje do trochę bardziej prozaicznego, wcześniej znanego pojęcia. Ale czy spoglądanie w niebo to jedyny sposób na nawiązanie dialogu z przyszłością? Schodzimy na ziemię Dialog już trwa, rozmówcą jesteś również Ty, ale to Alan Turing jako jeden z pierwszych dostrzegł możliwość rozmowy Człowieka z maszyną. Tak, sztuczna inteligencja, bo o niej mowa, choć nieco bardziej ziemska posiada kosmiczne możliwości. To sztuczna inteligencja ma nasze dane, potrafi nimi skutecznie manipulować, gromadzić i na podstawie ich podejmować poważne decyzje. Prowadzi nasze auta, wynajduje nowe lekarstwa, decyduje czy będziesz wiarygodnym kredytobiorcą, a nawet bywa „zwyczajnym rozmówcą”. Komunikacja z SI przybiera różne formy, choć dysponujemy szeregiem języków programowania, gotowymi rozwiązaniami informatycznymi, a sama wiedza jest niemalże powszechnie dostępna to właśnie komunikacja stanowi najważniejsze zagadnienie rozwoju sztucznej inteligencji. O ile, gdy stworzone przez nas oprogramowanie zawarte w ryzach algorytmów jest nam niemal całkowicie posłuszne, o tyle sztuczna inteligencja w swojej idei zaczyna „żyć własnym życiem” – życiem tak autonomicznym, że język cyfrowy schodzi momentami na drugi plan, a nawet może nie być samodzielnie wystarczający. Oczywiście nic nie wskazuje na to, abyśmy mieli w całości zrezygnować z języków programowania na rzecz… no właśnie czego? Rozmowy? Siri, Asystent Google czy Alexa to systemy bazujące na sztucznej inteligencji, które uprzednio zaprogramowane dalszą część cybernetycznego życia spędzają komunikując się poprzez komunikację werbalną. Całość procesu: gromadzenie danych, przetwarzanie czy wydawane przez nią komunikaty to głównie wiadomości głosowe. Jest to oczywiste i zrozumiałe, ale pod postacią wygodnej dla nas funkcjonalności rozpoznawania głosowego oraz syntezatora mowy, ukryty pozostaje znaczący krok w rozwoju komunikacji na linii człowiek – maszyna. W sposób nowoczesny, komfortowy, ale jednocześnie pionierski przeszliśmy z zerojedynkowej narracji do „języka człowieka”. Choć nie zawsze precyzyjnie i składnie, to rzeczywiście – maszyna rozmawia z człowiekiem. Wygląda to jak pierwszy krok w drodze do tego czym zwykliśmy nazywać świadomością. Doskonale operuje liczbami, w przeciągu ułamka sekundy zna odpowiedzi na liczbowe problemy, tworzy skomplikowane modele cyfrowe, wszystko co deterministyczne i natury arytmetycznej jest w jej zasięgu. Ma natomiast problem z pojęciami, które ironicznie, człowiekowi przychodzą nieco łatwiej – pojęciami abstrakcyjnymi. Czy w milionach tranzystorów może popłynąć rewolucyjna idea, zupełnie abstrakcyjna myśl, zakodowana jako „kilka zer i jedynek” ? Wszystkie wyniki pracy systemów sztucznej inteligencji, a w konsekwencji jej osiągnięcia bazują na dużych ilościach danych którymi jest „karmiona” i kolejno trenowana. Choć ten ciąg przyczynowo-skutkowy wydaje się pozostawać niewzruszony to ludzki umysł, również wiedziony ogromną ilością danych, popularniej zwanych bagażem doświadczeń potrafi myśleć w sposób abstrakcyjny, definiować swój byt i być samoświadomy. Czy samoświadomość sztucznej inteligencji to kwestia większej ilości danych i nowych połączeń sieci neuronowej? Jeżeli tak, to hipotetycznie moglibyśmy wskazać konkretny punkt, w którym owa sieć osiąga świadomość. Czy jest to wykonalne - jest nam ciężko określić, chociaż sam temat świadomości cyfrowej stanowi nie tylko obiekt: badań specjalistów, westchnień futurologów, ale także.. Rozważań filozofów Czy prekursorzy inżynierii elektronicznej tworząc pierwsze układy scalone, mogli doszukiwać się głębszego metafizycznego sensu w sygnałach? Jest to wątpliwie, jednak przyszłość przygotowała własną wizję - mariaż teorii informacji z humanizmem. Dwie dziedziny należące do przeciwległych biegunów nauki, połączyła potrzeba współpracy na rzecz ustalenia wspólnych mianowników etycznych dla człowieka i maszyny. Choć z pozoru nierealna wizja potrzeby dzielenia się wykuwaną przez lata ludzką moralnością, z pieśni przyszłości staje się prozą współczesności. Autonomiczne auta wyposażane są w systemy decyzyjne, których zadaniem jest podjęcie odpowiedniego wyboru w sytuacji zagrożenia życia. Ale czy faktycznie potrafimy zdefiniować odpowiedni wybór? Czy nie jest tak, że już na przestrzeni dialogu międzyludzkiego napotykamy problem z jasnym zdefiniowaniem systemu norm, który byłby spójny? Subiektywność, rozumiana bliżej jako doświadczenia życiowe i system wyznawanych przez nas wartości powodują dywersyfikację wersji algorytmu prawidłowego działania. Czy w niemożliwym do uniknięcia przypadku potrącenia pieszego system postanowi potrącić dziecko czy osobę starszą, osobę schorowaną czy kobietę w ciąży? Odpowiedź nie jest prosta, o ile w ogóle takowa istnieje. Wizja Elon Musk – właściciel firmy Tesla, produkującej innowacyjne samochody elektryczne do projektowania systemów autonomicznej jazdy wśród specjalistów z dziedzin IoT, Data Science, programistów systemów embedded rekrutuje osoby odpowiedzialne za moralne uposażenie systemów decyzyjnych – ekspertów z dziedziny filozofii. To oni są odpowiedzialni za wszystkie potencjalne dylematy natury moralnej. Zatrudnienie filozofów, ale również humanistów ogólnie w sektorze AI (Artificial intelligence – ang. Sztuczna Inteligencja) będzie niewątpliwie rosło. Urzeczywistnia się coś, o czym wcześniej nawet nie myśleliśmy – cykl technologiczny zatacza koło, a my uczłowieczamy technologię. Nie chodzi tu o podniosłe zwroty i patetyczne doszukiwanie się archetypu stwórcy w programiście – technologia brnie do przodu, a wraz z nią rola nas – jej głównych odbiorców i współrozmówców ulega ewolucji.
  2. SZTUCZNA INTELIGENCJA W SŁUŻBIE MOTORYZACJI Cz.1. (Trochę przydługi) Wstęp. Sztuczna inteligencja to ostatnio temat na topie. Wydaje się, że na dobre zostawiliśmy za sobą tzw. „wieki ciemne” , kiedy to, zaraz po wynalezieniu i udowodnieniu działania sieci neuronowych w końcówce lat ‘50 ubiegłego wieku, cała społeczność naukowców zniechęcona „fałszywymi obietnicami” uznała, że sieci, owszem działają, ale nie można ich nauczyć niczego pożytecznego i zgodnie zapomnieli o nich na paręnaście dobrych lat[1]. Dzisiaj nikogo nie trzeba przekonywać, że sieci działają, do tego w wielu przypadkach działają skuteczniej niż człowiek oraz inne „konwencjonalne” metody. Każdy z nas, chcąc nie chcąc, odczuwa działanie sztucznej inteligencji jeśli jest zalogowany na jakimkolwiek większym portalu społecznościowym. Sam niejednokrotnie byłem pełen podziwu dla algorytmów polecających w serwisach Youtube, czy Facebook. Akcjonariusze serwisów społecznościowych i instagramowe modelki pewnie się ze mną nie zgodzą, ale zawsze uważałem, że potencjał sztucznej inteligencji jest marnowany na algorytmy polecające albo upiększające zdjęcia. Jako inżynier transportu naturalnie widzę miejsce dla sieci neuronowych w transporcie motoryzacyjnym. Rynek pokazuje, że na pewno nie jestem w tym, ani jedyny, ani nawet pierwszy. Amerykański producent samochodów elektrycznych Tesla zdaje się być o krok od wypuszczenia na rynek całkowicie autonomicznego samochodu (Full Self-Driving) opartego w znacznej mierze na sieciach neuronowych, jednak również pozostali producenci aut z powodzeniem stosują rozwiązania sztucznej inteligencji w celu poprawienia bezpieczeństwa i komfortu jazdy (system monitorowania koncentracji kierowcy, system rozpoznawania znaków drogowych)[2]. Ten artykuł bierze udział w naszym konkursie! 🔥 Na zwycięzców czekają karty podarunkowe Allegro, m.in.: 2000 zł, 1000 zł i 500 zł. Potrafisz napisać podobny poradnik? Opublikuj go na forum i zgłoś się do konkursu! Czekamy na ciekawe teksty związane z elektroniką i programowaniem. Sprawdź szczegóły » Samochody autonomiczne to temat szalenie interesujący zarówno z punktu widzenia technicznego (duh!) jak i prawnego (w razie wypadku z winy pojazdu autonomicznego, kto powinien być pociągnięty do odpowiedzialności? Kierowca czy producent pojazdu?). Rozważania nad tymi zagadnieniami zachęciły mnie w końcu do podjęcia próby stworzenia własnego samochodu autonomicznego w małej skali (na razie 😉 ). Pojazdy autonomiczne do tego, aby odnaleźć siebie i innych uczestników ruchu drogowego w przestrzeni, wykorzystują różne technologie, a różnice między producentami są widoczne gołym okiem (sieć autonomicznych taksówek Waymo działających na terenie San Francisco wykorzystuje do nawigacji charakterystyczne, umiejscowione na dachach pojazdów LIDARy oraz bardzo dokładną mapę 3D terenu, tymczasem Tesla woli korzystać ze zwykłych kamer 2D i wspierać się sieciami neuronowymi). Cz.2. Założenia projektu, czyli co ja robię?! W czasie kiedy zaczynałem pracę nad tym projektem byłem już dobrze zaznajomiony z technikami analizy obrazu, biblioteką OpenCV i miałem jako-takie (podparte praktyką) pojęcie o sieciach neuronowych. Ponieważ byłem w tym czasie w trakcie lektury „Superinteligencji” Nicka Bostroma i moje myśli nieustannie krążyły w ogół sztucznej inteligencji, zacząłem się zastanawiać, czy to możliwe, żeby mój pojazd potrafił się poruszać po drodze wykorzystując TYLKO I WYŁĄCZNIE sieci neuronowe. Postanowiłem, że tworząc pojazd będę próbował używać sieci neuronowych do realizacji wszystkich założeń projektu, posiłkując się klasyczną analizą obrazu tylko w ostateczności, w sytuacji kiedy moje sieci polegną. Poniżej przedstawiam założenia projektu: pojazd do poruszania się ma wykorzystywać tylko kamery i sieci neuronowe, żadne inne sensory nie są dozwolone, pojazd ma poruszać się po narysowanej na ziemi 2-pasmowej drodze, pojazd na respektować zasadę ruchu prawostronnego, zjazd na przeciwległy pas uznawany jest jako błąd, pojazd ma stosować się do znaków drogowych i sygnalizacji świetlnej, pojazd ma mieć możliwość rozpoznawania pieszych, I na koniec zadanie z gwiazdką: pojazd ma posiadać możliwość przejazdu przez skrzyżowanie w dowolnym kierunku. W tym miejscu chciałbym dodać również, że moim zamiarem było osiągnięcie tego, nie nadwyrężając znacznie mojego budżetu. Do listy założeń wypada zatem dodać: osiągnąć powyższe minimalizując wydatki. Cz.3. Najmniej znaczy ZERO? Od początku wiedziałem, że bazą do projektu będzie robot, którego używałem zaczynając swoją przygodę z programowaniem Arduino, znany zapewne użytkownikom robot z kursu budowy robotów Forbot’a. Pozostał wybór kamer i komputera. Wahałem się między Jetsonem Nano, a Raspberry Pi, jednak urządzenia te nie należą do najtańszych, a trzeba też brać pod uwagę koszt kamery. Do głowy przyszła mi następująca myśli: "najmniej PLN to chyba będzie zero, prawda?". A gdyby tak wykorzystać stacjonarny komputer jako jednostkę obliczeniową i w jakiś sposób przesyłać obraz z kamery na pojeździe do komputera, a następnie odsyłać informacje o sterowaniu do jednostki wykonawczej, czyt. Arduino? A gdyby tak wykorzystać do tego smartfona? Pomysł spodobał mi się ze względu na to, że w razie porażki, nie wydałbym na projekt ani złotówki. Postanowiłem spróbować, mając z tyłu głowy, że w każdej chwili mogę zmienić podejście i dokonać zakupu mini komputera pokładowego. Pojazd użyty do projektu. Cz.4. Kontekst. Celem niniejszego artykułu (czy to nie powinno być w pierwszym akapicie?) jest ukazanie potęgi sieci neuronowych. Nie ma tu miejsca na szczegółowe opisywanie całego projektu. Niemniej jednak czytelnikom należy się wyjaśnienie, w jaki sposób doprowadziłem do tego, że mój pojazd jeździ i w jaki sposób komunikuje się z komputerem. Pozwolę sobie dokonać lakonicznego przedstawienia mojego systemu. Z chęcią dokładniej opiszę poszczególne elementy, jeśli artykuł będzie cieszył się dużym zainteresowaniem 🙂. Robot, którego używałem posiada 2 silniki napędzające niezależnie 2 przednie koła oraz jedno koło nienapędzane (typu kółko od wózka w super-markecie). Na pokładzie znajduje się telefon połączony kablem OTG-USB z Arduino. Pojazd nie ma osi skrętnej, mamy tu do czynienia ze sterowaniem typu "czołg" - jeśli chcemy wykonać skręt to jedno koło musi się kręcić wolniej od drugiego. Zainteresowanych budową robota odsyłam do kursu, jest bezpłatny. Teraz pora na tor sygnałowy. Na telefonie zainstalowana jest aplikacja do przesyłania obrazu typu ipwebcam, nazywa się DroidCam. Obraz jest przesyłany prosto z aplikacji do komputera za pośrednictwem sieci Wi-Fi (lokalnie). Na komputerze skrypt Pythona dokonuje analizy obrazu (każda klatka zostaje przepuszczona przez sieci, o czym opowiem w następnym rozdziale). Wyniki sieci są interpretowane i skrypt odsyła informację o sterowaniu na telefon, tym razem do specjalnej aplikacji w Javie (tą niestety musiałem napisać już sam) i dalej kablem USB do Arduino. Mikrokontroler podaje informacje na koła i jazda! Schemat toru sygnałowego. Cz.5. Sieć sieci nie równa. W końcu dochodzimy do sedna. Kiedy już miałem potrzebne narzędzia przyszła pora na tworzenie sieci i trening. Jest to etap nad którym spędziłem najwięcej czasu, eksperymentując z różnymi modelami sieci, optymizerami, rozważając sens zastosowania wstecznej propagacji błędów i tak dalej. W następnych akapitach chciałbym przedstawić moje osobiste odkrycie roku jakim jest biblioteka FastAi zbudowana na Pytorchu. Dla niezorientowanych spieszę z wyjaśnieniami. W świecie sieci neuronowych 90% użytkowników jako języka programowania używa Python’a. Dlaczego? Czy to ze względu na czytelność kodu, łatwość w programowaniu, intuicyjność? Czy może dlatego, że (całkiem przypadkiem) dwie największe biblioteki do uczenia maszynowego(TensorFlow i Pytorch) zostały napisane dla Pythona? W tym momencie ciężko powiedzieć, co było pierwsze, jajko czy kura? Jedno wiadomo na pewno, niska prędkość kompilacji i wykonywania kodu nie ma większego znaczenia w procesie trenowania sieci. Gorzej oczywiście z pracą w czasie rzeczywistym, ale należy pamiętać, że gotowe modele można konwertować i zaprzęgać do pracy w wielu innych językach. Rozpoczynając przygodę z sieciami neuronowymi zacząłem pracę z biblioteką TensorFlow (w tamtym czasie właśnie dla tej biblioteki w internecie było najwięcej informacji i tutoriali) i myślę, że wyrażę opinię wielu mówiąc, że było to doświadczenie nieprzyjemne. Jako, że o nieprzyjemnych rzeczach najlepiej nie mówić, wraz z nowym projektem zdecydowałem się na zmianę biblioteki na Pytorch (do zmiany nakłonił mnie również film na Youtubie w, którym szef ekipy od jazdy autonomicznej Tesli chwali się, że właśnie tej biblioteki używają). Odnośnie TensorFlow powiem tylko, że problemy jakie napotkałem próbując zainstalować tą bibliotekę na mojej maszynie powracają w koszmarach po dziś dzień. Ale co z tym FastAi? FastAi jest biblioteką zbudowaną na Pytorchu. Ułatwia korzystanie z Pytorch, dzięki niemu tworzenie i trenowanie sieci neuronowych staje się dziecinną igraszką. Każdemu, kto chce zacząć przygodę z sieciami neuronowymi, ale nie ma śmiałości polecam FastAi i serię tutoriali na Youtube współtwórcy tej biblioteki - Jeremy’ego Howarda. Dodatkową zaletą FastAi jest jej poziomowość. Można trenować naprawdę dobre modele, odpowiednio jedynie przygotowując dane i korzystając z gotowych ustawień, jednak wszystkie funkcje Pytorch są stale pod ręką. Jeszcze jedna pozytywna rzecz wynikła dla mnie z tego projektu. FastAi dosłownie wymusza pracowanie w Jupyter Notebooks, który zawsze z jakiegoś powodu mnie odstraszał. Teraz widzę, że jego używanie bywa uzasadnione, każdemu kto nie miał do czynienia z jupyterem polecam spróbowanie. Jest to świetne narzędzie dla eksperymentatorów (chwała wykonywaniu pojedynczych komórek kodu!). Minusy? FastAi działa tylko na Linuxie, ale kto jest zainteresowany sieciami z pewnością od dawna już korzysta z tego systemu operacyjnego. Cz.6. Sieć czy może sieci? Niemal od początku pracy miałem w głowie koncepcję na to w jaki sposób wykorzystać sieci, żeby sterować robotem. W realnej sytuacji (prawdziwy pojazd na prawdziwej drodze jako prawdziwy uczestnik prawdziwego ruchu drogowego) obraz z kamery/wielu kamer jest zapisywany razem z korespondującymi danymi o stanie pojazdu w tym o WIELKIEJ TRÓJCY do której należą: kąt skrętu kierownicą, stopień wciśnięcia pedału gazu, stopień wciśnięcia pedału hamulca. Potem wystarczy stworzyć model, który jako daną wejściową dostaje obraz z kamery, a wypluwa te trzy wartości. Proste prawda? Szkopuł w tym, że aby porządnie wytrenować sieć neuronową potrzeba dużej ilości danych. Sieci dosłownie żywią się danymi. Bez nich dają marne predykcje, choć są sposoby na poprawienie wyników sieci bez zwiększania ilości danych, ale o tym później. W realnej sytuacji (prawdziwy pojazd na prawdziwej drodze…) w celu zebrania danych do trenowania sieci wystarczy zapisywać normalne zachowania kierowców, jednak dla mnie oznaczało by to długie i mozolne jeżdżenie moim robotem po przygotowanym torze, a ciężko jest określić na początku, ile danych tak naprawdę potrzebuje sieć (chociaż z dużą pewnością można stwierdzić, że czym więcej tym lepiej 🙂 ). W dodatku wyniki sieci zależą oczywiście od jakości wprowadzonych danych, zatem musiałbym jeździć po torze bardzo precyzyjnie. Jeśli ktoś kiedykolwiek bawił się samochodem zdalnie sterowanym to wie, że precyzyjna jazda nie jest wcale taka łatwa. Musiał zatem istnieć jakiś sposób na zautomatyzowanie procesu zbierania danych. Ah, gdyby istniał taki samochód autonomiczny, który by zbierał te informacje… W końcu wpadłem na pomysł. Wykorzystałem odrobinę wiedzy z zakresu cyfrowej analizy obrazu, bibliotekę OpenCV i jedną dodatkową kamerę, którą umieściłem nad torem jazdy, tuż przy suficie. Na robocie przymocowałem zielony znacznik, który później wyodrębniłem na komputerze z tła. W Paint'cie narysowałem drogę po której ma się poruszać pojazd, i połączyłem te dwa obrazy. Miałem teraz współrzędne zielonego znacznika i niebieski tor. Z pomocą funkcji pointPolygonTest z OpenCV mogłem wyznaczyć odległość znacznika od najbliższego punktu na torze. Jeden warunek: tor musi stanowić zamknięty kształt. Mi to nawet było na rękę, dzięki temu pojazd mógł jeździć w kółko i zbierać dane. Teraz tylko prosty regulator PID i gotowe. Dla ułatwienia postanowiłem, że robot będzie jeździł ze stałą prędkością, więc zbierane dane miały postać: obraz z kamery w danym momencie oraz odchylenie znacznika od toru. Prosta sieć klasyfikująca. Wpada obraz z kamery (na GIF-ie poniżej dolny lewy róg), a wypada „odchylenie” od toru jazdy. Stworzyłem kilka wirtualnych "tras" na torze i zacząłem zbieranie danych. W międzyczasie rozregulowałem nieco PID, aby robot łapał trochę więcej skrajnych pozycji. Po godzinie jazdy uznałem, że mam wystarczająco danych do rozpoczęcia trenowania sieci (ostatecznie jeździłem nieco dłużej, w celu pobrania informacji o miejscach, w których robot mylił się najczęściej). Zbieranie danych. Cz.7. Można oszukiwać. Jak wspomniałem są sposoby na poprawienie wyników sieci bez zwiększania ilości danych. Jednym z nich jest tzw. „transfer learning” polegający na użyciu gotowego modelu sieci (w moim przypadku ResNet50), wytrenowanego na milionach zdjęć, którego skuteczność została udowodniona na „ogólnych” obiektach (odróżnia jabłko od gruszki, psa od kota) i dotrenowanie zaledwie kilku ostatnich warstw tak, żeby model lepiej odpowiadał na nasze dane. Przyspiesza to trenowanie i zwiększa dokładność predykcji. W trakcie pracy eksperymentowałem z różnymi gotowymi modelami jak i wieloma wartościami, głównie z wielkością zdjęcia (znacząco wpływa to na czas trenowania) jak i z ilością epok, typem optymizerów. Mimo, że zdarzało mi się zostawiać komputer włączony całą noc, a treningi trwały nieraz ponad 14 godzin, ostateczny model został wytrenowany w około 2 godziny (na karcie graficznej GTX 1660). Trenowanie modelu. Niektóre próby trwały ponad 14 godzin. Jak ze skutecznością predykcji? Zaledwie 60%. A jednak robot jeździ po torze prawie bezbłędnie. Jak to możliwe skoro 4 na 10 razy się myli? Kluczem nie jest w tym przypadku skuteczność, tylko skala błędu. W większości przypadków komputer popełniał bardzo niewielkie pomyłki, które nie miały wpływu na jazdę. Analizując zdjęcia jestem pod wrażeniem działania tego modelu, sam dla zabawy próbowałem odgadnąć jakie odchyły przypadają do jakich zdjęć. Poniżej przedstawiam kilka, spróbujcie odgadnąć sami (wartości od -15 do 15): Od lewej: 6,-11, 15 (pikseli odchyłu od idealnego toru jazdy). Kiedy przekonałem się, że robot jeździ po prostej drodze, nadszedł czas na coś bardziej skomplikowanego niż zwykła klasyfikacja obrazu(np.: na zdjęciu jest pies!) mianowicie na detekcję (np.: na zdjęciu jest pies i znajduje się on tutaj!). Wykorzystałem do tego system detekcji YOLO (You only look once) stworzony przez Josepha Redmona. YOLO znane jest w internecie z bardzo niskiego czasu detekcji (detekcja trwa dłużej niż klasyfikacja). Redmon udostępnia swój algorytm za darmo wraz z instrukcją jak trenować sieć pod detekcję własnych obiektów. Na początku próbowałem wykorzystać bazę zdjęć i etykiet Open Images Dataset, ale szybko przekonałem się, że lepiej zastosować własne zdjęcia. Nie pozostało mi nic innego jak odpalić program do etykiet (LabelImg) i ręcznie oznaczyć ok. 20 tyś zdjęć przedstawiających znaki drogowe, sygnalizację świetlną i pieszych. Zajęło to parę dni, ale było warto, wskaźnik detekcji poprawił się znacznie, głównie ze względu na to, że niektóre zdjęcia które zdecydowałem się oznaczać były bardzo niewyraźne, albo słońce świeciło bezpośrednio w kamerę, co odzwierciedlało prawdziwe sytuacje. Etykietowanie danych było mozolnym procesem, ale efekt był więcej niż zadowalający. Cz.8. Mądrzej, szybciej, lepiej. Ostatecznie projekt spełnił moje oczekiwania, muszę przyznać, że na początku nie spodziewałem się tak dobrych rezultatów. Finalnym potwierdzeniem działania robota powinien być przejazd po nieznanym torze. Dla utrudnienia tor testowy postanowiłem zrobić w innym kolorze (nie posiadał on również przerywanych linii), na dodatek w testowym przejeździe postarałem się, aby słońce świeciło w kamerę. Wyniki przejazdu można zobaczyć na załączonym GIF-ie 🙂 . Pozwoliłem sobie na zachowanie tajemnicy w kwestii przedstawionego na początku "zadania z gwiazdką" czyli jazdy przez skrzyżowanie. Dla dociekliwych na końcu artykułu umieściłem link do GitHuba, kto będzie chciał, dojdzie w jaki sposób realizuję to zadanie 🙂 . Jazda po nowym torze. Jest wiele sposobów na usprawnienie robota. Warto zaznaczyć, że czas przesyłu danych po Wi-Fi zajmuje niemal tyle samo czasu co detekcja i klasyfikacja. Umieszczenie algorytmów na komputerze pokładowym umożliwiłoby przetwarzanie większej ilości klatek na sekundę tym samym zwiększając dokładność i być może maksymalną prędkość pojazdu. Należy również zaznaczyć, że projekt był eksperymentem mającym na celu sprawdzenie możliwości sieci neuronowych i mam nadzieję, że nikt nie pomyśli, że neguję sens stosowania klasycznej analizy obrazu. Poniżej załączam film przedstawiający działanie robota. Aha, nie wspomniałem chyba, że można nim sterować za pomocą kierownicy komputerowej, która w trybie autonomicznym odzwierciedla ruchy pojazdu? Wystarczy nacisnąć przycisk na kierownicy i jesteśmy w trybie jazdy autonomicznej. Cały kod znajduje się na GitHubie. W razie niejasności służę pomocą, w przypadku dużego zainteresowania tematem chętnie stworzę bardziej szczegółowe wpisy. Pozdrawiam i zachęcam do dyskusji w komentarzach. Rafał [1] Bostrom, Nick. Superinteligencja. Wydawnictwo Helion 2016. ISBN 978-83-283-1934-9. [2] Zdaję sobie sprawę, że pojęcia "sieci neuronowe" i "sztuczna inteligencja" nie są tożsame, używam uproszczenia jako, że sieci stanowią jak na razie główny kierunek rozwoju SI.
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.