Omówienie biblioteki C++

Biblioteka LiteRT dla mikrokontrolerów w języku C++ jest częścią Repozytorium TensorFlow. Została zaprojektowana z myślą o czytelności, łatwej modyfikacji, sprawdzonych i integracjach, i zgodne ze zwykłym LiteRT.

W tym dokumencie opisano podstawową strukturę biblioteki C++ oraz zawiera informacje na temat tworzenia własnego projektu.

Struktura pliku

micro katalog główny ma stosunkowo prostą strukturę. Znajduje się ona jednak w obszernym repozytorium TensorFlow, stworzyliśmy skrypty wstępnie wygenerowane pliki projektu, które dostarczają oddzielnie odpowiednie pliki źródłowe w różnych osadzonych środowiskach programistycznych.

Pliki kluczy

Najważniejsze pliki związane z korzystaniem z LiteRT dla mikrokontrolerów Tłumacz znajduje się w głównej części projektu i towarzyszy mu testy:

[`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.

Zobacz artykuł Pierwsze kroki z mikrokontrolerami, i przewodnika po typowym wykorzystaniu.

System kompilacji pozwala na implementacje na określonych platformach . Znajdziesz je w katalogu o nazwie platformy, np. cortex-m

Istnieje kilka innych katalogów, takich jak:

  • 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. Ty możesz pobrać jej wersję na wybraną platformę, postępując zgodnie z podane w tej sekcji.

Korzystanie z biblioteki Arduino

Jeśli używasz Arduino, w parametrze Hello World znajdziesz Arduino_TensorFlowLite bibliotekę Arduino, którą możesz zainstalować ręcznie w Arduino IDE oraz Arduino Create.

Po dodaniu biblioteki otwórz File -> Examples. Powinno być widoczne przykład u dołu listy o nazwie TensorFlowLite:hello_world. Wybierz go i kliknij hello_world, aby wczytać przykład. Następnie możesz zapisać kopię raportu i użyć ich jako podstawy do stworzenia własnego projektu.

Generowanie projektów dla innych platform

LiteRT dla mikrokontrolerów umożliwia generowanie samodzielnych projektów które zawierają wszystkie niezbędne pliki źródłowe, używając parametru Makefile. Aktualna obsługiwane środowiska to Keil, Make i Mbed.

Aby wygenerować te projekty za pomocą narzędzia Twórz, skopiuj Repozytorium TensorFlow/tflite-micro i uruchom to polecenie:

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

Zajmie to tylko kilka minut, ponieważ musi pobrać kilka dużych łańcuchów narzędzi zależności. Po jego zakończeniu powinny pojawić się utworzone foldery. wewnątrz ścieżki, takiej jak gen/linux_x86_64/prj/ (parametr dokładna ścieżka zależy od systemu operacyjnego hosta). Foldery te zawierają wygenerowanych przez AI plików projektów i plików źródłowych.

Po uruchomieniu tego polecenia znajdziesz projekty Hello World w gen/linux_x86_64/prj/hello_world Dla: np. hello_world/keil będzie zawierać projekt Keil.

Przeprowadzanie testów

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

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

Aby uruchomić pojedynczy test, 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 pliku Makefiles. Przykład: examples/hello_world/Makefile.inc określa nazwy testowe dla funkcji Hello Przykład ze świata.

Twórz pliki binarne

Aby utworzyć uruchomiony plik binarny dla danego projektu (np. przykładowej aplikacji): użyj następującego polecenia, zastępując <project_name> wybranym projektem do stworzenia:

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

Na przykład poniższe polecenie utworzy plik binarny dla serwera Hello World aplikacja:

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

Domyślnie projekt zostanie skompilowany pod kątem systemu operacyjnego hosta. Do określić inną architekturę docelową, użyj TARGET= i TARGET_ARCH=. poniżej pokazujemy, jak utworzyć przykładową aplikację Hello World dla wersji ogólnej Cortex-m0:

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

Po określeniu miejsca docelowego wszystkie dostępne pliki źródłowe zostanie użyty w miejsce oryginalnego kodu. Na przykład podkatalog examples/hello_world/cortex_m_generic zawiera implementacje SparkFun Edge z plików constants.cc i output_handler.cc, które będą używane, gdy Określono wartość docelową cortex_m_generic.

Nazwy projektów znajdziesz w pliku Makefiles. Przykład: examples/hello_world/Makefile.inc określa nazwy binarne elementu Hello Przykład ze świata.

Zoptymalizowane jądra

Jądro referencyjne w katalogu głównym tensorflow/lite/micro/kernels to wdrożone w czystym języku C/C++ i nie zawierają sprzętu związanego z platformą i optymalizacji.

Zoptymalizowane wersje jądra są dostarczane w podkatalogach. Przykład: kernels/cmsis-nn zawiera kilka zoptymalizowanych jąder, które korzystają z procesora Arm Biblioteka CMSIS-NN.

Aby wygenerować projekty przy użyciu zoptymalizowanych jąder, użyj tego polecenia: , zastępując <subdirectory_name> nazwą podkatalogu zawierającego dyrektywę 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. Śr zachęcać do stosowania żądań pull do nowych zoptymalizowanych implementacji.

Generowanie biblioteki Arduino

Jeśli musisz wygenerować nową kompilację biblioteki, możesz uruchomić następujące polecenia z repozytorium TensorFlow:

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

Powstałą bibliotekę znajdziesz w gen/arduino_x86_64/prj/tensorflow_lite.zip

Przenoszenie na nowe urządzenia

Wskazówki dotyczące przenoszenia mikrokontrolerów LiteRT na nowe platformy urządzenia można znaleźć w micro/docs/new_platform_support.md