Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Jeśli ostatnio śledziłeś wiadomości, nastąpiła eksplozja start-upów opracowujących chipy przyspieszające wnioskowanie i szkolenie algorytmów ML (uczenia maszynowego). Jednak większość z tych żetonów jest wciąż w fazie rozwoju i nie jest to coś, na czym przeciętny producent może zdobyć rękę. Jak dotąd jedynym znaczącym wyjątkiem był Intel Movidius Neural Compute Stick, który jest dostępny w sprzedaży i jest dostarczany z dobrym pakietem SDK. Ma kilka istotnych wad - mianowicie cenę (około 100 USD) i fakt, że jest w formacie pamięci USB. Świetnie, jeśli chcesz go używać z laptopem lub Raspberry PI, ale co, jeśli chcesz wykonać kilka projektów rozpoznawania obrazu za pomocą Arduino? Lub Raspberry Pi Zero?
Krok 1: Sipeed MAix: AI na krawędzi
Nie tak dawno temu dostałem w swoje ręce płytkę rozwojową Sipeed M1w K210, która ma dwurdzeniowy, 64-bitowy procesor RISC-V i może pochwalić się wbudowanym KPU (procesorem sieci neuronowych), specjalnie zaprojektowanym do przyspieszania CNN do przetwarzania obrazu. Więcej szczegółów znajdziesz tutaj.
Cena tej płyty szczerze mnie zszokowała, to tylko 19 USD za pełnoprawną płytkę rozwojową AI-on-the-edge z obsługą Wi-Fi! Jest jednak pewne zastrzeżenie (oczywiście jest): oprogramowanie układowe micropython dla płyty jest wciąż w fazie rozwoju i ogólnie nie jest na razie zbyt przyjazne dla użytkownika. Jedynym sposobem na dostęp do wszystkich jego funkcji jest napisanie własnego wbudowanego kodu C lub zmodyfikowanie niektórych istniejących wersji demonstracyjnych.
Ten samouczek wyjaśnia, jak używać modelu wykrywania klasy Mobilenet 20 do wykrywania obiektów i wysyłania wykrytego kodu obiektu przez UART, skąd może zostać odebrany przez Arduino/Raspberry Pi.
W tym samouczku zakładamy, że znasz Linuksa i podstawy kompilacji kodu C. Jeśli usłyszenie tego wyrażenia sprawiło, że trochę zakręciło Ci się w głowie:) po prostu przejdź do kroku 4, w którym przesyłasz mój gotowy plik binarny do Sipeed M1 i pomiń kompilację.
Krok 2: Przygotuj swoje środowisko
Użyłem Ubuntu 16.04 do kompilacji i przesyłania kodu C. Można to zrobić w Windowsie, ale sam tego nie próbowałem.
Pobierz RISC-V GNU Compiler Toolchain, zainstaluj wszystkie niezbędne zależności.
git clone --recursive
sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
Skopiuj pobrany toolchain do katalogu /opt. Następnie uruchom następujące polecenia
./configure --prefix=/opt/kendryte-toolchain --with-cmodel=medany
robić
Dodaj teraz /opt/kendryte-toolchain/bin do swojej PATH.
Jesteś teraz gotowy do skompilowania kodu!
Krok 3: Skompiluj kod
Pobierz kod z mojego repozytorium github.
Pobierz samodzielny pakiet SDK Kendryte K210
Skopiuj folder /kpu z mojego repozytorium github do folderu /src w SDK.
Uruchom następujące polecenia w folderze SDK (nie w folderze /src!)
mkdir build && cd build
cmake.. -DPROJ=nazwa_projektu -DTOOLCHAIN=/opt/kendryte-toolchain/bin && make
gdzie nazwa_projektu jest nazwą twojego projektu (do Ciebie), a -DTOOLCHAIN= powinno wskazywać na lokalizację twojego łańcucha narzędzi risc-v (pobrałeś go w pierwszym kroku, pamiętasz?)
Świetny! Teraz miejmy nadzieję, że zobaczysz, że kompilacja została zakończona bez błędów i masz plik.bin, który możesz przesłać.
Krok 4: Przesyłanie pliku.bin
Teraz podłącz Sipeed M1 do komputera i z folderu /build uruchom następujące polecenie
sudo python3 isp_auto.py -d /dev/ttyUSB0 -b 200000 kpu.bin
Gdzie kpu.bin to nazwa twojego pliku.bin
Przesyłanie trwa zwykle 2-3 minuty, po jego zakończeniu zobaczysz, że tablica wykrywa 20 klas. Ostatnim krokiem dla nas jest podłączenie go do Arduino mega lub Raspberry Pi.
!!! Jeśli właśnie przyszedłeś z kroku 2 !
Uruchom następujące polecenie z folderu, w którym sklonowałeś moje repozytorium github
sudo python3 isp_auto.py -d /dev/ttyUSB0 -b 200000 kpu_bin.bin
Przesyłanie trwa zwykle 2-3 minuty, po jego zakończeniu zobaczysz, że tablica wykrywa 20 klas. Ostatnim krokiem dla nas jest podłączenie go do Arduino mega lub Raspberry Pi.
Krok 5: Łączenie z Arduino
Użyłem Arduino Mega z Seeed Studio Mega Shield, dlatego przylutowałem złącze Grove do płytki Sipeed M1. Możesz jednak po prostu użyć przewodów połączeniowych i podłączyć Sipeed M1 bezpośrednio do Arduino Mega, postępując zgodnie z tym schematem połączeń.
Następnie prześlij szkic camera.ino i otwórz monitor szeregowy. Kiedy skierujesz kamerę na różne obiekty (lista 20 klas znajduje się na szkicu) powinna wyświetlić nazwę klasy na monitorze szeregowym!
Gratulacje! Masz teraz działający moduł wykrywania obrazu dla swojego Arduino!
Krok 6: Łączenie z Raspberry Pi
Użyłem czapki Grove Pi+ dla Raspberry Pi 2B, ale znowu, podobnie jak w przypadku Arduino, możesz po prostu bezpośrednio podłączyć Sipeed M1 do interfejsu UART Raspberry Pi zgodnie z tym schematem połączeń.
Następnie uruchom camera_speak.py i skieruj kamerę na różne obiekty, terminal wyświetli następujący tekst „Myślę, że to jest”, a jeśli masz podłączone głośniki, wypowie to zdanie na głos. Całkiem fajnie, prawda?
Krok 7: Wniosek
Żyjemy w bardzo ekscytujących czasach, w których sztuczna inteligencja i uczenie maszynowe przenikają wszystkie obszary naszego życia. Nie mogę się doczekać rozwoju w tym obszarze. Utrzymuję kontakt z zespołem Sipeed i wiem, że aktywnie rozwijają opakowanie micropython dla wszystkich niezbędnych funkcji, w tym akceleracji CNN.
Kiedy będzie gotowy, najprawdopodobniej opublikuję więcej instrukcji, jak korzystać z własnych modeli CNN z micropythonem. Pomyśl o wszystkich ekscytujących aplikacjach, jakie możesz mieć dla płyty, która może obsługiwać własne sieci neuronowe przetwarzania obrazu za tę cenę i przy takim rozmiarze!