Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

mikroLuna, tym razem egde AI w liczniku prądu.

pixel7 28 Jul 2022 14:37 2898 8
  • mikroLuna, tym razem egde AI w liczniku prądu.

    Dzień dobry.

    W nawiązaniu do mojej poprzedniej konstrukcji Link prezentuję kolejną wersję Luny.
    Tym razem została uruchomiona w 100% na ESP32, mając za zadanie wypełnić założenia edge AI.

    Poprzednia konstrukcja wykonywała obliczenia na dodatkowym urządzeniu (rpi), teraz wszystko wykorzystuje jedynie zasoby mikroprocesora.
    Oprogramowanie oparte jest o bibliotekę TensorFlow Lite, co zmusiło mnie do przebudowania modelu sieci (zmniejszenie liczby neuronów).
    Układ także lekko się zmienił ze względu na obsługę karty SD, część wyprowadzeń ESP32cam nakłada się z tymi od karty. ADS został podłączony do innych nóg.
    System posiada webowy interfejs w formie dashboardu, z możliwością raportowania o zaistniałych zdarzeniach.
    Odświeżanie wykresów co ok 5 sek, więc w zasadzie podgląd na bieżąco.

    Model dla malucha

    Niestety mikroprocesor ESP32 ma ograniczone zasoby względem "dużych braci" co zmusza do odpowiedniego nimi zarządzania.
    Moja sieć musiała zostać drastycznie zmniejszona i mimo obaw o dokładność, udało mi się zredukować jej wielkość do 1208 neuronów,
    zachowując przy tym przyzwoitą wykrywalność.

    Code: dos
    Log in, to see the code


    Luna zamiast poprzednio analizowanego zakresu 500 sek obecnie widzi tylko 32.
    Powoduje to różnice w czasie wskazywania wykrytych urządzeń, czasem po prostu jest to za krótki okres żeby sklasyfikować nietypowy przebieg.
    Na obecną chwilę testuje różne topologie warstw.
    Zgodnie z podpowiedzią z poprzedniego tematu próbuję zastosować rekurencyjną sieć LSTM, na razie bez rezultatów - nie osiąga takiej dokładności jak obecna a dodatkowo mam trudności w zaimplementowaniu jej w tf Lite.

    Trening - tylko dla dużych

    Sieć trenuje na pc. Nie wiem czy da się to zrobić na ESP, obawiam się że to trwałoby dość długo...
    Uczenie wykonałem w pythonie za pomocą poprzednio zbudowanej aplikacji i zbieranych próbek, ale jak się okazuje są za długie [500] i nie mieszczą się istotne dane w zakresie 32 sek.
    Nie jestem w stanie ich przejrzeć i ponownie opisać, więc dodałem do oprogramowania funkcje zbierania nowych i ich zapisywania lokalnie.
    Po rozpoczęciu tworzony jest plik z 32 próbkami po 32 wartości (zebrany jest pełny zakres co sekundę).

    mikroLuna, tym razem egde AI w liczniku prądu.

    Próbki można zapisywać do istniejących lub dodać nową kategorię. Całość przechowywana jest na karcie SD dołączonej do układu.
    Dla ułatwienia dodałem obługę ftp na mikroprocesorze co ułatwia pobieranie danych.
    O taką paczkę można wzbogacić bazę dla Luny i ponownie ją przetrenować.
    Dodałem także uploader gotowej sieci co ułatwia upgrade, wystarczy dostraczyć odpowiednio wygenerowany plik .bin (można to zrobić z poziomu pythona) a układ po restarcie uruchomi nową wersję.

    mikroLuna, tym razem egde AI w liczniku prądu.

    Historia z prądem

    Dane zapisuję co 120 sek w pliku csv - takie okienko wydaje się obecnie optymalne, może trochę za długie względem 32 sek bufora. Zobaczę po paru dniach, zależy mi na zminimalizowaniu logów.
    Strona Luny posiada obecnie prosty system raportowania - wykres pokazujące powyżej zebrane dane.
    Mam zamiar dodać filtrowanie po okresie, urządzeniu itp. Gdyby był jeszcze jakiś sql lub pandas na esp...

    Poniżej screeny pokazujące historię:

    mikroLuna, tym razem egde AI w liczniku prądu. mikroLuna, tym razem egde AI w liczniku prądu. mikroLuna, tym razem egde AI w liczniku prądu.

    Co dalej?

    Z pewnością będę rozwijał zarówno soft układowy jaki i trenujący.
    Zgodnie z poprzednimi sugestiami dodam protokół MQTT, na razie skupiłem sie na platformie do rozwoju technologii egde AI, co w zasadzie się udało.
    Pracuje już nad kolejną wersją, jednak będzie to z gatunku wearable...

    p.

    Cool? Ranking DIY
    About Author
    pixel7
    Level 23  
    Offline 
    Has specialization in: python
    pixel7 wrote 560 posts with rating 69, helped 48 times. Live in city warszawa. Been with us since 2007 year.
  • #2
    speedy9
    Helpful for users
    pixel7 wrote:
    Poprzednia konstrukcja wykonywała obliczenia na dodatkowym urządzeniu (rpi), teraz wszystko wykorzystuje jedynie zasoby mikroprocesora.
    Oprogramowanie oparte jest o bibliotekę TensorFlow Lite, co zmusiło mnie do przebudowania modelu sieci (zmniejszenie liczby neuronów).

    ESP32-S3 ma wsparcie dla sieci neuronowych. Myślałeś o wykorzystaniu tej wersji SoC?
  • #4
    khoam
    Level 42  
    pixel7 wrote:
    Tym razem została uruchomiona w 100% na ESP32, mając za zadanie wypełnić założenia edge AI.

    "Edge AI is the deployment of AI applications in devices throughout the physical world. It’s called “edge AI” because the AI computation is done near the user at the edge of the network, close to where the data is located, rather than centrally in a cloud computing facility or private data center."

    Zaprezentowane rozwiązanie trudno nazwać Edge AI. Jest to raczej układ z wgraną, statyczną matrycą ANN o stałych wartościach wag. Równie dobrze można byłoby go uruchomić na procesorze 8-bitowym (ponad dwadzieścia lat temu tak właśnie robiłem).

    pixel7 wrote:
    Nie wiem czy da się to zrobić na ESP, obawiam się że to trwałoby dość długo..

    Da się. Na każdym z układów serii ESP. Najlepiej, gdy jest to S3, ponieważ dysponuje odpowiednią akceleracją sprzętową (instrukcje AI). Producent oferuje bibliotekę DL do realizacji projektów Edge AI. Trening sieci zwykle odbywa się w oddzielnym wątku (a nawet na dedykowanym rdzeniu), w trakcie normalnego działania układu.

    Mały hint: w środowiskach embedded, do poważnych zastosowań z wykorzystaniem ANN stosuje się arytmetykę stałoprzecinkową do reprezentowania wartości wag ANN. Obliczenia (trening sieci) wykonują się się wtedy wielokrotnie szybciej.

    Dodano po 17 [minuty]:

    pixel7 wrote:
    Próbki można zapisywać do istniejących lub dodać nową kategorię. Całość przechowywana jest na karcie SD dołączonej do układu.

    To jest nieporozumienie. Układy ESP mogą dysponować wystarczającą dużą ilością NVS do tego celu.
  • #5
    pixel7
    Level 23  
    speedy9 wrote:
    ESP32-S3 ma wsparcie dla sieci neuronowych. Myślałeś o wykorzystaniu tej wersji SoC?

    Tak, ale na razie buduje z tego co mam.

    linuxtorpeda wrote:
    1) po co?
    2) czy orientowałeś się, jak sprawdzają się inne rozwiązania dot. klasyfikacji włączonych urządzeń w sieci? (np. wykorzystujące FFT)
    3) czy masz pomysł na komercjalizację ww. urządzenia?


    1. Na prezentacje do DIY
    2. Tak, ale na tą chwilę muszę odpuścić sobie transformatę.
    3. A istnieje taka szansa?

    khoam wrote:
    "Edge AI is the deployment of AI applications in devices throughout the physical world. It’s called “edge AI” because the AI computation is done near the user at the edge of the network, close to where the data is located, rather than centrally in a cloud computing facility or private data center."

    Zaprezentowane rozwiązanie trudno nazwać Edge AI. Jest to raczej układ z wgraną, statyczną matrycą ANN o stałych wartościach wag. Równie dobrze można byłoby go uruchomić na procesorze 8-bitowym (ponad dwadzieścia lat temu tak właśnie robiłem).


    Na wstępie jak poprzednio, prośba o dodawanie źródeł tych cytatów.
    Obecny tu pochodzi ze strony nvidii - Link

    Wskaż mi proszę w powyższym gdzie znajduję się wykluczenie o którym piszesz? Chodzi mi o "statyczną matrycą ANN o stałych wartościach wag". Nic tam nie opisuje topologii, struktury ani działania.
    Na marginesie: "computation is done near the user at the edge of the network, close to where the data is located", w moim przypadku przekładniki położone są jakieś 100 mm od układu....

    Dodatkowo jak byś przewinął przytoczone przez siebie źródło, a nie wyrwał dwa zdania z kontekstu to ukazałby Ci się ten schemat:
    mikroLuna, tym razem egde AI w liczniku prądu.
    Możliwe że nie do końca zrozumiałeś mój opis, wybacz.
    Postaram się przybliżyć wytłumaczenie operując tym powyższym (ale od "prawej" do "lewej"):

    Pkt. 4 - Luna na esp32 (zamiast certified... itp), obsługuje ADC, liczy strumieniowe dane, zapisuje etc.
    Pkt. 5-6 Luna zapisuje i potrafi przekazać próbki i wyniki do DC - na karcie SD (dlaczego - wytłumaczę dalej)
    Data Center to mój laptop jest jednocześnie Cloudem - obsługuje pkt 1 i 2
    Za pomocą zbudowanego uploadera (w opisie) wysyłam POLICZONĄ sieć (ze STAŁYMI wagami) na ESP32 , ZGODNIE z punktem 3.
    Wracamy do punktu 4.

    Podaj gdzie dostrzegasz błąd w moim rozumowaniu i dlaczego uważasz że Luna nie odpowiada tym założeniom?
    Obecnie zanegowałeś moja wypowiedź, dodając jedynie swoje uwagi których to cytowany tekst i jego źródło nie odzwierciedla.

    khoam wrote:
    Równie dobrze można byłoby go uruchomić na procesorze 8-bitowym (ponad dwadzieścia lat temu tak właśnie robiłem).

    I do tej pory nie zobaczyliśmy nawet śladu po tej konstrukcji? Szkoda, miałbym tak ważny punkt odniesienia.

    khoam wrote:
    pixel7 wrote:
    Próbki można zapisywać do istniejących lub dodać nową kategorię. Całość przechowywana jest na karcie SD dołączonej do układu.

    To jest nieporozumienie. Układy ESP mogą dysponować wystarczającą dużą ilością NVS do tego celu.


    Rozumiem że przygotowywałeś zestawy uczące, pracujesz z bazami i byłeś zmuszony do ich łatwego przeglądania, sortowania, filtrowania, rysowania, poprawiania, modyfikacji? Z pewnością dane w zamkniętej pamięci NVS łatwiej odtwarzać np pandasie czy excelu czy innym narzędziu niż za pomocą pliku csv na przeniesionej w sekundę z prototypu karcie SD.
    Ja zazwyczaj ułatwiam sobie zadania, ale widzę że inni wolą budować karkołomne interfejsy z system wersjonowania bazy (dane eps32 = dane pc).
    Faktycznie. To jest nieporozumienie.
  • #6
    linuxtorpeda
    Level 26  
    pixel7 wrote:
    Tak, ale na tą chwilę muszę odpuścić sobie transformatę.

    Które z dwóch rozwiązań daje lepsze wyniki, FFT czy sieci neuronowe? Pytam z ciekawości.

    pixel7 wrote:
    A istnieje taka szansa?

    Nie, to pytanie retoryczne :) Dlatego osobiście odpuściłem zajmowanie się elektroniką po godzinach - na etacie zarobisz tyle, co w każdej innej branży, a szans na własny biznes zero.

    Od siebie dodam, że w tego typu projektach widzę więcej niebezpieczeństw niż korzyści. To idealny sposób na śledzenie naszych zachowań bez wyraźnej korzyści dla nas samych.
  • #7
    khoam
    Level 42  
    pixel7 wrote:
    Na wstępie jak poprzednio, prośba o dodawanie źródeł tych cytatów.
    Obecny tu pochodzi ze strony nvidii - Link

    To prawda, ale NVIDIA też ten termin zapożyczyła.

    pixel7 wrote:
    Możliwe że nie do końca zrozumiałeś mój opis, wybacz.

    Możliwe, opis tego oprogramowania na ESP32 jest praktycznie żaden. Wiele rzeczy trzeba się domyślać.

    pixel7 wrote:
    I do tej pory nie zobaczyliśmy nawet śladu po tej konstrukcji? Szkoda, miałbym tak ważny punkt odniesienia.

    Nie miałem wtedy jeszcze konta na Elektrodzie, a poza tym to była część mojej pracy ...

    pixel7 wrote:
    Z pewnością dane w zamkniętej pamięci NVS łatwiej odtwarzać np pandasie czy excelu

    Ta pamieć nie jest "zamknięta". Dane w obie strony można przesyłać po BLE czy WiFi, jak na obrazku, który zamieściłeś w ostatnim poście - na nim też nie ma czytnika kart SD. Natomiast komunikacja pomiędzy elementami systemu jest dwustronna i na bieżąco.
    W ostateczności można użyć nawet USB, jeżeli:

    pixel7 wrote:
    Na marginesie: "computation is done near the user at the edge of the network, close to where the data is located", w moim przypadku przekładniki położone są jakieś 100 mm od układu....

    Ok, mamy więc do czynienia z Desk Edge AI ;)

    Naprawdę nie chcę się kłócić. Jeżeli jesteś zadowolony ze swojego projektu, to najważniejsze. EOT.
  • #8
    aadeer
    Level 14  
    Jak oceniałeś dokładność sieci? Mógłbyś ją opisać dokładniej, bo np. z tego co wrzuciłeś tutaj widać, że ostatnia warstwa ma 8 neuronów, czyli 8 wyjść. Naturalnym byłoby traktowanie ich jako odpowiedniki poszczególnych urządzeń, ale z interfejsu widać, że masz tylko 6 urządzeń... Co oznacza prawdopodobieństwo dla danego urządzenia? Przeliczasz to jakoś? Czy są to po prostu wartości dla tych neuronów wyjściowych przeskalowane do zakresu 0...100 % ? Co się dzieję, gdy podłączysz nowe urządzenie, którego sieci nie uczyłeś?

    Na esp32 raczej masz wystarczająco pamięci wewnętrznej, w razie potrzeby można zmienić rozmiary partycji, jest biblioteka SqlLite3 w wersji Arduino, która działa na esp, chociaż przy odpowiednim przemyśleniu kolumn i tagów/nazw wykorzystanie plików csv może być szybsze i wystarczające, ale co kto lubi...

    Widzę, że w tym temacie również pojawiły się spory dotyczące nazewnictwa, niestety, koledzy którzy się "czepiają" znowu mają rację :D

    A po dodaniu MQTT można z tego zrobić fajną zabawkę i po integracji np. z Home Assistantem ustawić sobie powiadomienia o tym, że się woda zagotowała, pranie rozpoczęło/skończyło albo policzyć ile godzin żona ogląda tv :P
  • #9
    sweter_007
    Level 14  
    Witam.
    Stare wilki szczekają na młode wilki.
    W fabryce jest pięć frezarek. Poproszę wykryć złamane wiertło.
    O tutaj będzie potrzebny czujnik położenia wału, czujnik prądu, czujnik dźwiękowy.
    Proponujemy jeszcze naszej produkcji, super drogi czujnik przetwarzania obrazu, dla zwiększonego bezpieczeństwa oczywiście.
    Będziemy ingerować w maszynę, znajomy ma firmę co przestudiuje BHP, napiszę normy czy urwany czujnik zamieni się w rakietę wpadając w zębatki.
    Ale tanio nie będzie, ale bezpiecznie będzie.
    Smary, temperatura, trudne warunki dodatkowe koszty.
    Pięć maszyn rachunek prosty, cztery czujki razy pięć koszty.
    Stary wilku ile razem. Ile zer ?

    Pukpuk, kto tam. Młode wilki, tniemy koszta. Ile razy. Dziesięć razy, siadaj gadaj.
    Tu puszeczka do kontaktu, tam kabelek do g-code.
    Pięć maszyn rachunek prosty, jedna puszeczka kabelek prosty.
    Dwadzieścia maszyn rachunek prosty ...

    Poproszę wykryć niedomknięte drzwiczki lodówki w markecie ... itp itd.
    Wilk wilkowi wilkiem. Idzie nowe.