E-book details

TinyML. Wykorzystanie TensorFlow Lite do uczenia maszynowego na Arduino i innych mikrokontrolerach

TinyML. Wykorzystanie TensorFlow Lite do uczenia maszynowego na Arduino i innych mikrokontrolerach

Pete Warden, Daniel Situnayake

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!

  • 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
      • 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
  • 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
    • 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
    • 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
  • 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
    • 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
    • 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
    • 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
    • Podsumowanie
      • Uczenie się uczenia maszynowego
      • Co dalej?
  • 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
  • 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
    • 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
  • 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
  • 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
    • Bezpieczeństwo
      • Ochrona modeli
    • Wdrożenie
      • Przejście od płytki do produktu
    • Podsumowanie
  • Rozdział 21. Poszerzanie wiedzy
    • Fundacja TinyML
    • SIG Micro
    • Strona internetowa TensorFlow
    • Inne platformy programistyczne
    • Twitter
    • 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
  • Title: TinyML. Wykorzystanie TensorFlow Lite do uczenia maszynowego na Arduino i innych mikrokontrolerach
  • Author: Pete Warden, Daniel Situnayake
  • Original title: TinyML: Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers
  • Translation: Anna Mizerska
  • ISBN: 978-83-283-8363-0, 9788328383630
  • Date of issue: 2022-02-15
  • Format: Ebook
  • Item ID: tinyml
  • Publisher: Helion