TinyML

Book description

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

Table of contents

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

Product information

  • Title: TinyML
  • Author(s): Pete Warden
  • Release date: February 2022
  • Publisher(s): Helion
  • ISBN: 9788328383630