TinyML. Wykorzystanie TensorFlow Lite do uczenia maszynowego na Arduino i innych mikrokontrolerach - ebook
TinyML. Wykorzystanie TensorFlow Lite do uczenia maszynowego na Arduino i innych mikrokontrolerach - ebook
Może się wydawać, że profesjonalne systemy uczenia maszynowego wymagają sporych zasobów mocy obliczeniowej i energii. Okazuje się, że niekoniecznie: można tworzyć zaawansowane, oparte na sieciach neuronowych aplikacje, które doskonale poradzą sobie bez potężnych procesorów. Owszem, praca na mikrokontrolerach podobnych do Arduino lub systemach wbudowanych wymaga pewnego przygotowania i odpowiedniego podejścia, jest to jednak fascynujący sposób na wykorzystanie niewielkich urządzeń o niskim zapotrzebowaniu na energię do tworzenia zdumiewających projektów.
Ta książka jest przystępnym wprowadzeniem do skomplikowanego świata, w którym za pomocą techniki TinyML wdraża się głębokie uczenie maszynowe w systemach wbudowanych. Nie musisz mieć żadnego doświadczenia z zakresu uczenia maszynowego czy pracy z mikrokontrolerami. W książce wyjaśniono, jak można trenować modele na tyle małe, by mogły działać w każdym środowisku - również Arduino. Dokładnie opisano sposoby użycia techniki TinyML w tworzeniu systemów wbudowanych opartych na zastosowaniu ucze nia maszynowego. Zaprezentowano też kilka ciekawych projektów, na przykład dotyczący budowy urządzenia rozpoznającego mowę, magicznej różdżki reagującej na gesty, a także rozszerzenia możliwości kamery o wykrywanie ludzi.
W książce między innymi:
- praca z Arduino i innymi mikrokontrolerami o niskim poborze mocy
- podstawy uczenia maszynowego, budowy i treningu modeli
- TensorFlow Lite i zestaw narzędzi Google dla TinyML
- bezpieczeństwo i ochrona prywatności w aplikacji
- optymalizacja modelu
- tworzenie modeli do interpretacji różnego rodzaju danych
Ograniczone zasoby? Poznaj TinyML!
Spis treści
- Wstęp
- Konwencje typograficzne przyjęte w tej książce
- Korzystanie z przykładowych kodów
- Podziękowania
- Rozdział 1. Wprowadzenie
- Urządzenia z systemem wbudowanym
- Ciągły rozwój
- Rozdział 2. Informacje wstępne
- Do kogo skierowana jest ta książka?
- Jaki sprzęt będzie Ci potrzebny?
- Jakie oprogramowanie będzie Ci potrzebne?
- Czego nauczysz się dzięki tej książce?
- Rozdział 3. Wprowadzenie do uczenia maszynowego
- Czym właściwie jest uczenie maszynowe?
- Proces uczenia głębokiego
- Określenie celu
- Zebranie zestawu danych
- Wybór danych
- Zbieranie danych
- Etykietowanie danych
- Nasz gotowy zestaw danych
- Zaprojektowanie architektury modelu
- Generowanie atrybutów z danych
- Tworzenie okien czasowych
- Normalizacja
- Myślenie z uczeniem maszynowym
- Generowanie atrybutów z danych
- Trenowanie modelu
- Niedotrenowanie i przetrenowanie
- Trening, walidacja i testowanie
- Przekształcenie modelu
- Uruchomienie procesu wnioskowania
- Ocena i rozwiązanie ewentualnych problemów
- Podsumowanie
- Rozdział 4. Witaj, świecie TinyML: budowa i trenowanie modelu
- Co będziemy budować?
- Nasz zestaw narzędzi do uczenia maszynowego
- Python i Jupyter Notebooks
- Google Colaboratory
- TensorFlow i Keras
- Budowa naszego modelu
- Importowanie pakietów
- Generowanie danych
- Rozdzielanie danych
- Definiowanie podstawowego modelu
- Trenowanie naszego modelu
- Wskaźniki treningu
- Wykres historii
- Ulepszenie naszego modelu
- Test
- Konwertowanie modelu na potrzeby TensorFlow Lite
- Konwertowanie na plik C
- Podsumowanie
- Rozdział 5. Witaj, świecie TinyML: budowanie aplikacji
- Omówienie testów
- Dodawanie zależności
- Przygotowanie testów
- Przygotowanie do rejestrowania danych
- Mapowanie naszego modelu
- Klasa AllOpsResolver
- Alokacja pamięci dla modelu
- Tworzenie interpretera
- Sprawdzenie tensora wejścia
- Uruchamianie procesu wnioskowania
- Odczytywanie danych wyjściowych
- Uruchamianie testów
- Pobieranie kodu
- Uruchamianie testów za pomocą Make
- Budowa pliku z projektem
- Omówienie kodu źródłowego
- Początek pliku main_functions.cc
- Obsługa wyjścia za pomocą output_handler.cc
- Koniec pliku main_functions.cc
- Omówienie pliku main.cc
- Uruchomienie aplikacji
- Podsumowanie
- Omówienie testów
- Rozdział 6. Witaj, świecie TinyML: uruchomienie aplikacji na mikrokontrolerze
- Czym właściwie jest mikrokontroler?
- Arduino
- Obsługa wyjścia na Arduino
- Uruchomienie przykładu
- Wprowadzanie własnych zmian
- SparkFun Edge
- Obsługa wyjścia na SparkFun Edge
- Uruchomienie przykładu
- Kompilacja
- Podpis pliku binarnego
- Wgrywanie pliku binarnego
- Podłączenie konwertera USB do płytki
- Podłączenie konwertera do komputera
- Uruchomienie skryptu do wgrania nowego programu na płytkę
- Testowanie programu
- Sprawdzanie danych o przebiegu programu
- Wprowadzanie własnych zmian
- Zestaw ST Microelectronics STM32F746G Discovery
- Obsługa wyjścia na STM32F746G
- Uruchomienie przykładu
- Wprowadzanie własnych zmian
- Podsumowanie
- Rozdział 7. Wykrywanie słowa wybudzającego: budowanie aplikacji
- Co będziemy tworzyć?
- Architektura aplikacji
- Wprowadzenie do naszego modelu
- Wszystkie elementy aplikacji
- Omówienie testów
- Podstawowy przepływ danych
- Element dostarczający dane audio
- Element dostarczający cechy
- Sposób przetwarzania dźwięku na spektrogram przez element dostarczający dane audio
- Element rozpoznający polecenia
- Element reagujący na polecenia
- Nasłuchiwanie słów wybudzających
- Uruchomienie naszej aplikacji
- Uruchomienie aplikacji na mikrokontrolerach
- Arduino
- Element reagujący na polecenia dla Arduino
- Uruchomienie przykładu
- Wprowadzanie własnych zmian
- SparkFun Edge
- Element reagujący na polecenia dla SparkFun Edge
- Uruchomienie przykładu
- Kompilacja
- Podpis pliku binarnego
- Wgrywanie pliku binarnego
- Podłączenie konwertera USB do płytki
- Podłączenie konwertera do komputera
- Uruchomienie skryptu do wgrania nowego programu na płytkę
- Testowanie programu
- Sprawdzanie danych o przebiegu programu
- Wprowadzanie własnych zmian
- Zestaw ST Microelectronics STM32F746G Discovery
- Element reagujący na polecenia dla STM32F746G
- Uruchomienie przykładu
- Testowanie programu
- Podgląd informacji o przebiegu programu
- Wprowadzanie własnych zmian
- Arduino
- Podsumowanie
- Rozdział 8. Wykrywanie słowa wybudzającego: trenowanie modelu
- Trenowanie naszego nowego modelu
- Trenowanie w Colab
- Trenowanie z użyciem GPU
- Konfiguracja treningu
- Instalacja pakietów
- Narzędzie TensorBoard
- Rozpoczęcie treningu
- Oczekiwanie na zakończenie treningu
- Pilnowanie, by Colab się nie wyłączył
- Zamrażanie grafu
- Konwertowanie na format TensorFlow Lite
- Utworzenie tablicy C
- Trenowanie w Colab
- Wykorzystanie modelu w naszym projekcie
- Zastępowanie modelu
- Zmiana etykiet
- Zmiany w kodzie command_responder.cc
- Arduino
- SparkFun Edge
- STM32F746G
- Inne sposoby uruchamiania skryptów
- Zasada działania modelu
- Wizualizacja danych wejściowych
- Zasada działania generowania cech
- Architektura modelu
- Dane wyjściowe modelu
- Trenowanie modelu z własnymi danymi
- Zestaw danych Speech Commands
- Trenowanie modelu na własnych danych
- Nagrywanie własnych dźwięków
- Powiększenie zestawu danych
- Architektury modeli
- Podsumowanie
- Trenowanie naszego nowego modelu
- Rozdział 9. Wykrywanie osoby: budowanie aplikacji
- Co będziemy budować?
- Architektura aplikacji
- Wprowadzenie do naszego modelu
- Wszystkie elementy aplikacji
- Omówienie testów
- Podstawowy przepływ danych
- Element dostarczający obrazy
- Element reagujący na wykrycie człowieka
- Wykrywanie ludzi
- Uruchomienie aplikacji na mikrokontrolerach
- Arduino
- Wybór modułu kamery
- Przechwytywanie obrazów na Arduino
- Reagowanie na wykrycie człowieka na Arduino
- Uruchomienie przykładu
- Wprowadzanie własnych zmian
- SparkFun Edge
- Wybór modułu kamery
- Przechwytywanie obrazów na SparkFun Edge
- Reagowanie na wykrycie człowieka na SparkFun Edge
- Uruchomienie przykładu
- Kompilacja
- Podpisanie pliku binarnego
- Wgrywanie pliku binarnego
- Podłączenie konwertera USB do płytki
- Podłączenie konwertera do komputera
- Uruchomienie skryptu do wgrania nowego programu na płytkę
- Testowanie programu
- Sprawdzanie danych o przebiegu programu
- Wprowadzanie własnych zmian
- Arduino
- Podsumowanie
- Rozdział 10. Wykrywanie osoby: trenowanie modelu
- Wybór maszyny
- Konfiguracja instancji Google Cloud Platform
- Wybór platformy programistycznej do treningu
- Tworzenie zestawu danych
- Trenowanie modelu
- TensorBoard
- Ocena modelu
- Eksportowanie modelu do TensorFlow Lite
- Eksportowanie do pliku GraphDef Protobuf
- Zamrażanie wag
- Kwantyzacja i konwertowanie na potrzeby TensorFlow Lite
- Konwertowanie na plik źródłowy C
- Trenowanie dla innych kategorii
- Architektura MobileNet
- Podsumowanie
- Rozdział 11. Magiczna różdżka: budowanie aplikacji
- Co będziemy tworzyć?
- Architektura aplikacji
- Wprowadzenie do naszego modelu
- Wszystkie elementy aplikacji
- Omówienie testów
- Podstawowy przepływ danych
- Element obsługujący akcelerometr
- Element przewidujący gesty
- Element reagujący na wykrycie gestu
- Wykrywanie gestu
- Uruchomienie aplikacji na mikrokontrolerach
- Arduino
- Stałe Arduino
- Odczytywanie pomiarów z akcelerometru na Arduino
- Reagowanie na gesty za pomocą Arduino
- Uruchomienie przykładu
- Wprowadzanie własnych zmian
- SparkFun Edge
- Odczytywanie pomiarów z akcelerometru na SparkFun Edge
- Reagowanie na gesty za pomocą SparkFun Edge
- Uruchomienie przykładu
- Kompilacja
- Podpis pliku binarnego
- Wgrywanie pliku binarnego
- Podłączenie konwertera USB do płytki
- Podłączenie konwertera do komputera
- Uruchomienie skryptu do wgrania nowego programu na płytkę
- Testowanie programu
- Wprowadzanie własnych zmian
- Arduino
- Podsumowanie
- Rozdział 12. Magiczna różdżka: trenowanie modelu
- Trenowanie modelu
- Trening w Colab
- Trenowanie z użyciem GPU
- Instalacja pakietów
- Przygotowanie danych
- Uruchomienie TensorBoard
- Rozpoczęcie treningu
- Ocena wyników
- Utworzenie tablicy C
- Inne sposoby uruchamiania skryptów
- Trening w Colab
- Zasada działania modelu
- Wizualizacja danych wejściowych
- Architektura modelu
- Trenowanie modelu z własnymi danymi
- Przechwytywanie danych
- SparkFun Edge
- Rejestrowanie danych
- Modyfikacja skryptów trenujących
- Trening
- Wykorzystanie nowego modelu
- Przechwytywanie danych
- Podsumowanie
- Uczenie się uczenia maszynowego
- Co dalej?
- Trenowanie modelu
- Rozdział 13. TensorFlow Lite dla mikrokontrolerów
- Czym jest TensorFlow Lite dla mikrokontrolerów?
- TensorFlow
- TensorFlow Lite
- TensorFlow Lite dla mikrokontrolerów
- Wymagania
- Dlaczego model potrzebuje interpretera?
- Generowanie projektu
- Kompilatory
- Wyspecjalizowany kod
- Pliki Makefile
- Pisanie testów
- Obsługa nowej platformy sprzętowej
- Wyświetlanie rejestru zdarzeń
- Wdrożenie funkcji DebugLog()
- Uruchamianie wszystkich plików źródłowych
- Integracja z plikami Makefile
- Obsługa nowego IDE lub kompilatora
- Integrowanie zmian w kodzie projektu z repozytoriami
- Wnoszenie swojego wkładu do kodu z otwartym źródłem
- Obsługa nowego akceleratora sprzętowego
- Format pliku
- Biblioteka FlatBuffers
- Przenoszenie operacji TensorFlow Lite Mobile na wersję dla mikrokontrolerów
- Oddzielanie kodu odniesienia
- Utworzenie kopii operatora dla mikrokontrolera
- Tworzenie wersji testów dla mikrokontrolerów
- Tworzenie testu Bazel
- Dodanie swojego operatora do obiektu AllOpsResolver
- Kompilacja testu pliku Makefile
- Podsumowanie
- Czym jest TensorFlow Lite dla mikrokontrolerów?
- Rozdział 14. Projektowanie własnych aplikacji TinyML
- Projektowanie
- Czy potrzebny jest mikrokontroler, czy może być większe urządzenie?
- Co jest możliwe?
- Podążanie czyimiś śladami
- Podobne modele do trenowania
- Sprawdzenie danych
- Magia Czarnoksiężnika z krainy Oz
- Poprawnie działająca wersja na komputerze jako pierwszy etap
- Rozdział 15. Optymalizacja prędkości działania programu
- Prędkość modelu a prędkość ogólna aplikacji
- Zmiany sprzętu
- Ulepszenia modelu
- Ocena opóźnienia modelu
- Przyspieszanie modelu
- Kwantyzacja
- Etap projektowania produktu
- Optymalizacje kodu
- Profilowanie wydajności
- Miganie
- Metoda strzelby
- Wyświetlanie informacji z przebiegu programu
- Analizator stanów logicznych
- Licznik
- Profilowanie
- Profilowanie wydajności
- Optymalizowanie operacji
- Implementacje już zoptymalizowane
- Tworzenie własnej zoptymalizowanej implementacji
- Wykorzystanie funkcjonalności sprzętu
- Akceleratory i koprocesory
- Wnoszenie swojego wkładu do kodu z otwartym źródłem
- Podsumowanie
- Rozdział 16. Optymalizacja poboru mocy
- Rozwijanie intuicji
- Pobór mocy standardowych elementów
- Wybór sprzętu
- Pomiar rzeczywistego poboru mocy
- Oszacowanie poboru mocy modelu
- Ulepszenia związane z zużyciem energii
- Cykl pracy
- Projektowanie kaskadowe
- Podsumowanie
- Rozwijanie intuicji
- Rozdział 17. Optymalizacja modelu i rozmiaru pliku binarnego
- Zrozumienie ograniczeń własnego systemu
- Oszacowanie zużycia pamięci
- Zużycie pamięci flash
- Zużycie pamięci RAM
- Szacunkowe wartości dokładności i rozmiaru modelu przy różnych problemach
- Model rozpoznający słowa wybudzające
- Model predykcyjnego utrzymania
- Wykrywanie obecności człowieka
- Wybór modelu
- Zmniejszenie rozmiaru pliku wykonywalnego
- Mierzenie rozmiaru kodu
- Ile miejsca zajmuje TensorFlow Lite dla mikrokontrolerów?
- OpResolver
- Rozmiar pojedynczych funkcji
- Stałe w platformie TensorFlow Lite
- Naprawdę malutkie modele
- Podsumowanie
- Rozdział 18. Debugowanie
- Różnica w dokładności między treningiem a wdrożeniem
- Różnice we wstępnym przetwarzaniu danych
- Debugowanie wstępnego przetwarzania danych
- Ocena działania programu na urządzeniu docelowym
- Różnice liczbowe
- Czy różnice stanowią problem?
- Ustalenie wskaźnika
- Punkt odniesienia
- Zamiana implementacji
- Tajemnicze awarie
- Debugowanie na pulpicie
- Sprawdzanie rejestru
- Debugowanie metodą strzelby
- Błędy związane z pamięcią
- Podsumowanie
- Różnica w dokładności między treningiem a wdrożeniem
- Rozdział 19. Przenoszenie modelu z TensorFlow do TensorFlow Lite
- Określenie wymaganych operacji
- Operacje obsługiwane w TensorFlow Lite
- Przeniesienie wstępnego i końcowego przetwarzania do kodu aplikacji
- Implementacja niezbędnych operacji
- Optymalizacja operacji
- Podsumowanie
- Rozdział 20. Prywatność, bezpieczeństwo i wdrażanie
- Prywatność
- PDD
- Zbieranie danych
- Wykorzystanie danych
- Dzielenie się danymi i ich przechowywanie
- Zgoda
- Używanie PDD
- PDD
- Bezpieczeństwo
- Ochrona modeli
- Wdrożenie
- Przejście od płytki do produktu
- Podsumowanie
- Prywatność
- Rozdział 21. Poszerzanie wiedzy
- Fundacja TinyML
- SIG Micro
- Strona internetowa TensorFlow
- Inne platformy programistyczne
- Przyjaciele TinyML
- Podsumowanie
- Dodatek A Używanie i tworzenie biblioteki Arduino w formacie ZIP
- Dodatek B Przechwytywanie dźwięku na Arduino
- O autorach
- Kolofon
Kategoria: | Hardware |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-8363-0 |
Rozmiar pliku: | 16 MB |