Omówienie biblioteki C++

Biblioteka TensorFlow Lite for Microcontrollers C++ jest częścią repozytorium TensorFlow. Został zaprojektowany tak, aby był czytelny, łatwy do modyfikacji, dobrze przetestowany, łatwy w integracji i zgodny ze zwykłymi TensorFlow Lite.

Dokument poniżej przedstawia podstawową strukturę biblioteki C++ i zawiera informacje na temat tworzenia własnego projektu.

Struktura pliku

Katalog główny micro ma stosunkowo prostą strukturę. Ponieważ jednak usługa znajduje się wewnątrz rozległego repozytorium TensorFlow, utworzyliśmy skrypty i wstępnie wygenerowane pliki projektu, które dostarczają odpowiednie pliki źródłowe w izolacji w różnych osadzonych środowiskach programistycznych.

Pliki kluczy

Najważniejsze pliki do zastosowania tłumacza TensorFlow Lite dla mikrokontrolerów znajdują się w katalogu głównym projektu wraz z testami:

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.

W artykule Pierwsze kroki z mikrokontrolerami znajdziesz informacje o typowych zastosowaniach.

System kompilacji umożliwia implementacje określonych plików na poszczególnych platformach. Znajdziesz je w katalogu z nazwą platformy, np. cortex-m.

Istnieje kilka innych katalogów, w tym:

  • kernel, który zawiera implementacje operacji i powiązany kod.
  • tools, który zawiera narzędzia do kompilacji i ich dane wyjściowe.
  • examples, który zawiera przykładowy kod.

Rozpocznij nowy projekt

Zalecamy użycie przykładu Hello World jako szablonu dla nowych projektów. Wykonaj czynności opisane w tej sekcji, aby pobrać wersję pakietu na wybraną przez siebie platformę.

Korzystanie z biblioteki Arduino

Jeśli używasz Arduino, przykładowy kod Hello World znajdziesz w bibliotece Arduino Arduino_TensorFlowLite, którą możesz zainstalować ręcznie w IDE Arduino i Arduino Create.

Po dodaniu biblioteki przejdź do File -> Examples. Na dole listy powinien być widoczny przykład o nazwie TensorFlowLite:hello_world. Wybierz go i kliknij hello_world, aby wczytać przykład. Następnie możesz zapisać kopię przykładu i używać jej jako podstawy do swojego projektu.

Generowanie projektów na inne platformy

TensorFlow Lite dla mikrokontrolerów może generować samodzielne projekty, które zawierają wszystkie niezbędne pliki źródłowe, za pomocą Makefile. Obecnie obsługiwane środowiska to Keil, Make i Mbed.

Aby generować te projekty za pomocą marki Make, skopiuj repozytorium TensorFlow/tflite-micro i uruchom to polecenie:

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

Zajmie to kilka minut, ponieważ trzeba pobrać duże łańcuchy narzędzi dla zależności. Po jego zakończeniu w ścieżce, takiej jak gen/linux_x86_64/prj/, powinny pojawić się foldery utworzone (dokładna ścieżka zależy od systemu operacyjnego hosta). Foldery te zawierają wygenerowane pliki projektu i źródłowe.

Po uruchomieniu polecenia w gen/linux_x86_64/prj/hello_world możesz znaleźć projekty Hello World. Na przykład hello_world/keil będzie zawierał projekt Keil.

Przeprowadzanie testów

Aby utworzyć bibliotekę i przeprowadzić wszystkie testy jednostkowe, użyj tego polecenia:

make -f tensorflow/lite/micro/tools/make/Makefile test

Aby uruchomić test pojedynczy, użyj tego polecenia, zastępując <test_name> nazwą testu:

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

Nazwy testów znajdziesz w plikach Makefiles. Na przykład examples/hello_world/Makefile.inc określa nazwy testowe w przykładzie Hello World.

Tworzenie plików binarnych

Aby utworzyć uruchamiany plik binarny dla danego projektu (np. przykładowej aplikacji), użyj poniższego polecenia, zastępując <project_name> nazwą projektu, który chcesz skompilować:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

Poniższe polecenie pozwala na przykład utworzyć plik binarny aplikacji Hello World:

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

Domyślnie projekt jest kompilowany na potrzeby systemu operacyjnego hosta. Aby określić inną architekturę docelową, użyj TARGET= i TARGET_ARCH=. Poniższy przykład pokazuje, jak utworzyć przykład Hello World dla ogólnej klasy Cortex-m0:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

Gdy określisz środowisko docelowe, w miejsce pierwotnego kodu zostaną użyte wszystkie dostępne pliki źródłowe związane z tym miejscem docelowym. Na przykład podkatalog examples/hello_world/cortex_m_generic zawiera implementacje usługi SparkFun Edge plików constants.cc i output_handler.cc, które będą używane, gdy określisz środowisko docelowe cortex_m_generic.

Nazwy projektów znajdziesz w plikach Makefiles. Na przykład examples/hello_world/Makefile.inc określa nazwy binarne na potrzeby przykładu Hello World.

Zoptymalizowane jądra

Referencyjne jądra w katalogu głównym tensorflow/lite/micro/kernels są zaimplementowane w czystym języku C/C++ i nie obejmują optymalizacji sprzętowej pod kątem danej platformy.

Zoptymalizowane wersje jądra są udostępniane w podkatalogach. Na przykład kernels/cmsis-nn zawiera kilka zoptymalizowanych jąder, które korzystają z biblioteki CMSIS-NN Arma.

Aby generować projekty za pomocą zoptymalizowanych jąder, użyj tego polecenia, zastępując <subdirectory_name> nazwą podkatalogu zawierającego optymalizacje:

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

Możesz dodać własne optymalizacje, tworząc dla nich nowy podfolder. Zalecamy przesyłanie żądań pull w przypadku nowych zoptymalizowanych implementacji.

Wygeneruj bibliotekę Arduino

Jeśli musisz wygenerować nową kompilację biblioteki, możesz uruchomić ten skrypt z repozytorium TensorFlow:

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

Utworzoną bibliotekę znajdziesz w pliku gen/arduino_x86_64/prj/tensorflow_lite.zip.

Przenoszenie numerów na nowe urządzenia

Wskazówki dotyczące przenoszenia mikrokontrolerów TensorFlow Lite dla mikrokontrolerów na nowe platformy i urządzenia znajdziesz na stronie micro/docs/new_platform_support.md.